【前言】
对于Linux的日常维护使用中,磁盘管理是每位管理员必须熟练操作掌握的一项技能,磁盘在Linux、Windows或其他操作系统中都是一项非常重要的资源,如何对其进行有效的分配与管理将直接关系到系统的性能。下面我们将对日常比较常用的几个磁盘管理命令的使用进行总结与分享。
【查看磁盘使用情况】
1、df命令
df命令用来查看已挂载磁盘分区的使用情况(包括:总容量、已用容量、可用容量等),不加任何参数,默认显示的单位是KB。
命令格式:df [OPTION]... [FILE]...
常用选项:
-a:显示全部文件系统的磁盘使用情况;
-m:以MB为单位显示;
-h:以较易阅读的方式显示,也就是自动根据磁盘分区文件大小以GB、MB、KB为单位进行显示;
-H:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i:显示i节点的信息,而不是磁盘块;
-T:显示文件系统的类型;
[root@CentOS6 ~]# df #显示各文件系统的磁盘空间使用情况Filesystem 1K-blocks Used Available Use% Mounted on/dev/mapper/vg_centos6-lv_root 18102140 4915524 12267064 29% /tmpfs 255392 72 255320 1% /dev/shm/dev/sda1 495844 33025 437219 8% /boot[root@CentOS6 ~]# df -h #以较易方式显示;Filesystem Size Used Avail Use% Mounted on/dev/mapper/vg_centos6-lv_root 18G 4.7G 12G 29% /tmpfs 250M 72K 250M 1% /dev/shm/dev/sda1 485M 33M 427M 8% /boot[root@CentOS6 ~]# df -i #显示i节点的使用情况;Filesystem Inodes IUsed IFree IUse% Mounted on/dev/mapper/vg_centos6-lv_root 1150560 198223 952337 18% /tmpfs 63848 3 63845 1% /dev/shm/dev/sda1 128016 38 127978 1% /boot[root@CentOS6 ~]# df -ah #以较易方式显示所有文件系统的磁盘空间使用情况;Filesystem Size Used Avail Use% Mounted on/dev/mapper/vg_centos6-lv_root 18G 4.7G 12G 29% /proc 0 0 0 - /procsysfs 0 0 0 - /sysdevpts 0 0 0 - /dev/ptstmpfs 250M 72K 250M 1% /dev/shm/dev/sda1 485M 33M 427M 8% /bootnone 0 0 0 - /proc/sys/fs/binfmt_misc[root@CentOS6 ~]# df -TH #以较易方式显示磁盘空间使用情况与文件系统类型,以1000 Bytes为换算单位Filesystem Type Size Used Avail Use% Mounted on/dev/mapper/vg_centos6-lv_root ext4 19G 5.1G 13G 29% /tmpfs tmpfs 262M 74k 262M 1% /dev/shm/dev/sda1 ext4 508M 34M 448M 8% /boot[root@CentOS6 ~]# df -Th #以较易方式显示磁盘空间使用情况与文件系统类型,以1024 Bytes为换算单位Filesystem Type Size Used Avail Use% Mounted on/dev/mapper/vg_centos6-lv_root ext4 18G 4.7G 12G 29% /tmpfs tmpfs 250M 72K 250M 1% /dev/shm/dev/sda1 ext4 485M 33M 427M 8% /boot#注意:细心的用户可能会发现已使用与可使用的磁盘空间之和并不等于磁盘分区的容量,这是因为默认#的每个分区都预留了少量空间供系统管理员使用。这样做的好处就是即使普通用户把空间全部用完,管#理员仍然可以通过预留空间对磁盘分区进行管理,以免因为磁盘分区爆满而导致系统故障。
2、du命令
du命令用来查看某个文件或目录所占空间大小。默认为显示当前工作目录下各目录所占空间大小,单位为KB。
命令格式:du [OPTION]... [FILE]...
常用选项:
-a:显示所有文件与目录容量;
-m:以MB为单位显示;
-h:以较易阅读的方式显示,也就是自动根据文件大小以GB、MB、KB为单位进行显示;
-s:只显示总容量,不显示每个文件与目录占用的容量;
[root@CentOS6 ~]# du 8 ./.gconfd #仅显示当前工作目录下的所有目录的占用容量;4 ./test1/y4 ./test1/a_b..中间略..4 ./.gconf #包括隐藏目录;332 . #当前目录所占用的总容量;[root@CentOS6 ~]# du -ah4.0K ./crontab #当前目录下的文件占用的容量也显示出来了;8.0K ./.gconfd..中间略..4.0K ./.gconf332K .[root@CentOS6 ~]# du -sh /* #显示系统根目录下各目录所占用容量;56K /17.9M /bin23M /boot4.0K /cgroup320K /dev38M /etc20K /hellbash16M /home144M /lib..略..
【磁盘分区】
fdisk磁盘分区工具
命令格式:fdisk [-l ] [DEVICE]
显示分区信息: fdisk -l [DEVICE]显示指定磁盘的分区信息,如没有指定磁盘,则显示系统中所有磁盘设备的分区信息;
管理分区:fdisk [DEVICE]
[root@CentOS6 ~]# fdisk -l #显示系统中所有磁盘设备的分区信息;Disk /dev/sda: 21.5 GB, 21474836480 bytes..略.. Device Boot Start End Blocks Id System/dev/sda1 * 1 64 512000 83 LinuxPartition 1 does not end on cylinder boundary./dev/sda2 64 2611 20458496 8e Linux LVMDisk /dev/sdb: 21.5 GB, 21474836480 bytes..略.. Device Boot Start End Blocks Id System/dev/sdb1 1 132 1060258+ 83 Linux/dev/sdb2 133 2610 19904535 5 Extended..略..[root@CentOS6 ~]# fdisk -l /dev/sdb #显示sdb磁盘的分区信息; ..略.. Device Boot Start End Blocks Id System/dev/sdb1 1 132 1060258+ 83 Linux/dev/sdb2 133 2610 19904535 5 Extended..略..[root@CentOS6 ~]# fdisk /dev/sdb #对sdb磁盘分区进行管理,交互式界面,有许多子命令;WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').Command (m for help): m #显示帮助信息;Command action a toggle a bootable flag #标记分区为启动扇区; b edit bsd disklabel c toggle the dos compatibility flag d delete a partition #删除分区; l list known partition types #列表出所有支持的系统ID; m print this menu n add a new partition #新建分区; o create a new empty DOS partition table p print the partition table #显示磁盘分区表; q quit without saving changes #不保存退出; s create a new empty Sun disklabel t change a partition's system id #修改分区的系统ID u change display/entry units v verify the partition table w write table to disk and exit #保存并退出; x extra functionality (experts only)Command (m for help): p #显示分区表; ..略.. Device Boot Start End Blocks Id System/dev/sdb1 1 132 1060258+ 83 Linux/dev/sdb2 133 525 3156741 83 LinuxCommand (m for help): n #新建分区;Command action l logical (5 or over) #指定新建的为逻辑分区,编号从5开始; p primary partition (1-4) #指定新建的为主分区,编号为1-4;pPartition number (1-4): 3 #指定分区编号;First cylinder (526-918, default 526): #指定起始柱面,一般使用默认即可,直接敲回车; Last cylinder, +cylinders or +size{K,M,G} (1705-2610, default 2610):+3G #指定分区大小,这里可以直接指定结束柱面(不好计算一般不这样用),也可以使用+size{K,M,G}直接指定分区大小; Command (m for help): w #保存退出,至此就在sdb上新建了一个3G大小编号为3的磁盘分区;[root@CentOS6 ~]# fdisk /dev/sdb ..略.. Device Boot Start End Blocks Id System/dev/sdb1 1 132 1060258+ 83 Linux/dev/sdb2 133 525 3156741 83 Linux/dev/sdb3 526 918 3156741 83 LinuxCommand (m for help): dPartition number (1-9): 3 #删除第3块磁盘分区Command (m for help): l #列表出所有支持的系统ID 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris ..略.. 1e Hidden W95 FAT1Command (m for help): t #修改分区的系统ID;Partition number (1-2): 2 #对分区3进行修改Hex code (type L to list codes): fd #设置系统ID为Linux raid auto;Changed system type of partition 2 to fd (Linux raid autodetect)Command (m for help): p ..略.. Device Boot Start End Blocks Id System/dev/sdb1 1 132 1060258+ 83 Linux/dev/sdb2 133 525 3156741 fd Linux raid autodetectCommand (m for help): w[root@CentOS6 ~]#
相关说明:
1、因主引导记录(MBR)中用来存放分区表的空间只有64bytes,每16bytes标记一个分区,一共4分区,所有只能创建4个分区,当我们需要创建更多的分区时,我们需要把最后一个分区创建成扩展分区,再通过扩展分区来创建逻辑分区,编号从5开始,但扩展分区只能有一个,所以我们可以把硬盘分成4个主分区或3个主分区加一个扩展分区;
2、扩展分区不能直接使用,还需要将其划分为逻辑分区才行,同时逻辑分区是建立在扩展分区上的,因此删除扩展分区后,建立在其基础上的逻辑分区也会消失,所以一定要小心操作;
3、当我们在用fdisk交互式界面输入时,如有输入错误我们可以通过crtl+tab删除;
4、System Id用来说明某分区一个什么样的分区类型,与操作系统相关连,打算把分区格式化成什么样的文件系统,就一定要让它的分区ID号跟文件系统类型相匹配。
注意: 对于已经有分区处于使用状态的磁盘来讲,新建分区后需要让内核重读其分区表,才能进行分区格式化等操作:
同步分区表到内核的命令:在CentOS 5上为partprobe [DEVICE];在CentOS 6上为: partx -a [DEVICE] 、kpartx -af [DEVICE]
【格式化分区-创建文件系统】
mkfs命令 :用于创建文件系统
命令格式:mkfs [OPTION] DEVICE
常用选项说明:-V: 显示简要的使用方法;
-t fstype: 指定文件系统类型;
-c:在创建文件系统前,检查该分区是否有坏轨。
mkfs -t FSTYPE 也可以写成 mkfs.FSTYPE 例如:mkfs -t ext4 = mkfs.ext4
mke2fs:用于创建磁盘分区上的“ext2/ext3/ext4”文件系统。
命令格式: mke2fs [OPTION] DEVICE
常用选项说明: -t {ext2|ext3|ext4}:指定文件系统类型,默认为ext2;
-b {1024|2048|4096}:指定块大小,默认为4096;
-L LABEL: 打标,设置文件系统的卷标;
-j: 相当于 -t ext3,就是在ext2的基础上创建日志;
-i #: 每多少字节给创建一个inode,此字节数不应该少于块大小;
-N #: 直接指定可用的inode数;
-m #: 指定预留空间占整个分区空间的百分比;默认为5;
-O:指定分区特性
[root@CentOS6 dev]# mke2fs -L test -t ext4 -b 2048 -m 8 /dev/sdb2 #在sdb2上创建卷标为test,块大小为2048,预留空间为8%,类型为ext4的文件系统;mke2fs 1.41.12 (17-May-2010)Filesystem label=test #卷标OS type: Linux #系统类型Block size=2048 (log=1) #块大小Fragment size=2048 (log=1)Stride=0 blocks, Stripe width=0 blocks38760 inodes, 309250 blocks #块与inod数量24740 blocks (8.00%) reserved for the super user #预留空间First data block=0 #第一个数据块Maximum filesystem blocks=317718528 19 block groups #块组数量16384 blocks per group, 16384 fragments per group2040 inodes per groupSuperblock backups stored on blocks: #超级块的存放位置16384, 49152, 81920, 114688, 147456Writing inode tables: done Creating journal (8192 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 32 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override. 1.41.12 (17-May-2010)
blkid: 查看指定块设备的信息,主要有文件系统类型、UUID、卷标。
blkid DEVICE
[root@CentOS6 dev]# blkid /dev/sdb1/dev/sdb1: UUID="bd1c4c0c-bce8-4c66-928b-d52ddd55f681" TYPE="ext4"
e2label:查看或设定卷标
e2label DEVICE [LABEL]
有卷标,则表示为该分区设定卷标,如没有给出卷标,则表示查看设备的卷标。
查看超级块信息: tune2fs -l DEVICE或dumpe2fs -h DEVICE
修改分区属性:tune2fs
注意:磁盘在格式化时已经定义好块大小,且块大小无法调整;
tune2fs [OPTION] DEVICE
常用选项说明:
-j: 将文件系统从ext2升级到ext3;
-L LABEL:修改卷标;
-m #: 修改预留空间百分比;
-O [^]FEATURE: 启用指定特性,特性前加^,表示关闭此种特性;
-o [^]mount-options: 开启或关闭指定的挂载选项,选项前加^,表示关闭此挂载选项;
fsck命令:用于检查并且试图修复文件系统中的错误。当文件系统发生错误四化,可用fsck指令尝试加以修复。
fsck [OPTION] DEVICE
-t fstype :指定要检查的文件系统类型
-a: 自动修复错误
-r: 交互式修复错误
e2fsck命令: 专用于修改ext系列文件系统
e2fsck [OPTION] DEVICE
-y: 对问题自动回答为yes
-f: 强制进行检测
当进程意外中止或系统崩溃等情况导入写入操作非正常中止时,可能会导致文件损坏;此时,应该修复文件系统: 注意:修复需离线修复,即先要卸载设备。
【交换分区:swap】
交换分区用于缓解物理内存资源不够用的情况(相对应windows的虚拟内存);
创建交换分区:
mkswap [-L LABEL] DEVICE
启动交换分区:
swapon DEVICE #启用指定交换分区;
swapon -a #启用所有交换分区;
禁用交换分区:
swapoff DEVICE #禁用指定交换分区;
swapoff -a #禁用所有交换分区;
【文件系统挂载】
文件系统挂载是将额外的分区与根文件系统上的某目录(挂载点)建立关联关系的过程,默认只有管理员才有权限。如果挂载目录中原有文件,则在挂载后原有文件会被隐藏,卸载后有能显示出来。
mount挂载命令:
Linux系统固定挂载点:/mnt, /media,挂载之前需确保挂载点的存在。
命令格式: mount [option]... [-t fstype] [-o option] 设备 挂载点
常用的挂载选项:
-t fstype:指定文件系统类型;
-r: readonly, 只读挂载;
-w: read and write, 读写挂载;
-L LABEL:以卷标方式指定设备, mount -L 卷标 挂载点;
-U UUID: 以UUID的方式指定设备,mount UUID='uuid' 挂载点, mount -U uuid 挂载点;
-a: 自动挂载所有(/etc/fstab文件中定义的)的支持自动挂载设备;
-n: 挂载时,不更新/etc/mtab文件;
-o option:
async:异步I/O,数据写操作先于内存完成,而后再根据某种策略同步至持久设备中;
sync: 同步I/O,数据直接同步至持久设备中;
atime/noatime: 文件和目录被访问时是否更新最近一次的访问时间戳;
auto/noauto:设备是否支持mount的-a选项自动挂载;
diratime/nodiratime: 目录被访问时是否更新最近一次的访问时间戳;
dev/nodev: 是否支持在此设备上使用设备;
exec/noexec: 是否允许执行此设备上的二进制程序文件;
suid/nosuid: 是否支持在此设备的文件上使用suid;
remount: 重新挂载,通常用于不卸载的情况下重新指定挂载选项
-ro: 只读挂载;
-rw: 读写挂载;
-user/nouser: 是否允许普通用户挂载此文件设备;
-acl: 在此设备是支持使用facl,默认不支持;
挂载选项的指定有两种方式,一个是在文件系统里面直接指定,一种是挂载的时候指定,下面以指定挂载后支持acl为例:
方法1: mount -o acl DEVICE MOUNT_POINT
方法2: tune2fs -o acl DEVICE 先为设备设定默认挂载选项,再挂载mount DEVICE MOUNT_POINT
查看所有已经挂载的设备:mount 或 cat /proc/mounts 或 cat /etc/mtab
卸载命令:umount (注意:卸载只能在挂载点没有被进程访问时方可以卸载 )
umount DEVICE 或 umount MOUNT_POINT
查看哪些进程正在访问挂载的设备: fuser -v 挂载点
中止正在此挂载点的进程: fuser -km 挂载点
【设置开机自动挂载】
通过修改 自动挂载的设备的配置文件:/etc/fstab即可设置开机自动挂载。
文件中6个字段的说明:
1、挂载的设备:设备文件或设备的UUID或设备的LABEL;
2、挂载点:一定是目录;
3、文件系统类型:指定文件系统类型(ext2/3/4,reiserfs,nfs,vfat等);
4、挂载选项:挂载选项可以有多个,彼此间使用逗号分隔;defaults包含rw、suid、dev、exec、auto、nouser、async等参数;
5、转储频率:通过dump命令进行备份的频率;
0:从不转储;1: 每天转储; 2: 每隔一天
6、自检次序:在开机过程中,通过fsck命令检验文件系统的完整性。
0:不自检,额外创建的文件系统都无须自动自检
1:首先自检,通常只有根文件系统需要首先自检
2:次级自检,不同的设备可以使用同一个自检次序
好了,希望大家踊跃拍砖! :):)