Linux常用工具之磁盘管理
Linux 磁盘管理常用三个命令为 df、du 和 fdisk。
- df(英文全称:disk free):列出文件系统的整体磁盘使用量
- du(英文全称:disk usage):检查磁盘空间使用量
- fdisk:用于磁盘分区
df
查看磁盘空间使用情况
df
命令报告我们拥有多少磁盘空间(空闲磁盘空间)。
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 3993324 0 3993324 0% /dev
tmpfs 4004320 24 4004296 1% /dev/shm
tmpfs 4004320 820 4003500 1% /run
tmpfs 4004320 0 4004320 0% /sys/fs/cgroup
/dev/vda1 1031986308 460769788 529174496 47% /
tmpfs 800864 0 800864 0% /run/user/0
正如你所见,输出结果分为六列。我们来看一下每一列的含义。
Filesystem
– Linux 系统中的文件系统1K-blocks
– 文件系统的大小,用 1K 大小的块来表示。Used
– 以 1K 大小的块所表示的已使用数量。Available
– 以 1K 大小的块所表示的可用空间的数量。Use%
– 文件系统中已使用的百分比。Mounted on
– 已挂载的文件系统的挂载点。
在上面的示例中你可能已经注意到了,它使用 1K 大小的块为单位来表示使用情况,如果以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示,可以使用 -h
标志。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 24K 3.9G 1% /dev/shm
tmpfs 3.9G 820K 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda1 985G 440G 505G 47% /
tmpfs 783M 0 783M 0% /run/user/0
显示文件系统类型
使用 -T
标志显示文件系统类型
$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 3993324 0 3993324 0% /dev
tmpfs tmpfs 4004320 24 4004296 1% /dev/shm
tmpfs tmpfs 4004320 820 4003500 1% /run
tmpfs tmpfs 4004320 0 4004320 0% /sys/fs/cgroup
/dev/vda1 ext4 1031986308 460770416 529173868 47% /
tmpfs tmpfs 800864 0 800864 0% /run/user/0
du
du命令是disk usage
的缩写,打印文件或目录使用的磁盘空间量估算。这对于查找占用大量磁盘空间的文件和目录非常有用。
du
命令的默认行为是打印文件目录占用的磁盘空间,而不是真是的文件大小。要打印文件目录真实大小,请使用du
命令--apparent-size
选项。
查看目录文件大小
要打印指定目录的总大小,而不打印子目录和文件的大小,请使用du
命令-s
选项。du
命令默认使用KB为单位打印文件目录的大小,在这里我们组合使用du
命令的-h
选项自动根据文件大小选择合适的大小单位打印目录文件夹的大小。
$ du -s /var/lib/
113761124 /var/lib/
$ du -sh /var/lib/
109G /var/lib/
统计多个目录总大小
du
命令的-c
选项可以合并多个目录的总大小,当您要获取两个或多个目录的合并后的总大小时,此选项非常有用。
$ du -csh /var/log /var/lib
3.2G /var/log
109G /var/lib
112G total
使用通配符统计
du命令可以通过通配符模式,统计目录下所有子目录磁盘占用量。
# *匹配所有目录
$ du -csh /var/*
4.0K /var/adm
402M /var/cache
4.0K /var/crash
20K /var/db
8.0K /var/empty
4.0K /var/games
4.0K /var/gopher
12K /var/kerberos
109G /var/lib
4.0K /var/local
0 /var/lock
3.2G /var/log
0 /var/mail
4.0K /var/nis
8.0K /var/opt
4.0K /var/preserve
2.9M /var/queue
0 /var/run
116K /var/spool
20K /var/tmp
4.0K /var/yp
113G total
也可以指定前缀方式打印匹配到的子目录磁盘占用量。
# 以l开发的所有目录大小
$ du -csh /var/l*
109G /var/lib
4.0K /var/local
0 /var/lock
3.2G /var/log
112G total
指定目录深度级别
默认情况下,du命令将会递归遍历指定目录的所有子目录,然后以千字节打印文件目录的大小。如果要打印指定目录深度级别的目录大小,请使用du
命令的--max-depth
选项并指定子目录级别。
例如命令du -h --max-depth=1 /var/lib
仅打印/var/lib
下第一级目录的总大小。
$ du -ch --max-depth=1 /var/lib
4.0K /var/lib/os-prober
8.0K /var/lib/logrotate
17G /var/lib/docker
128K /var/lib/alternatives
4.0K /var/lib/games
4.0K /var/lib/mysql-files
248K /var/lib/cloud
4.0K /var/lib/dbus
92G /var/lib/mysql
8.0K /var/lib/rsyslog
4.0K /var/lib/mysql-keyring
20K /var/lib/pgsql
4.0K /var/lib/initramfs
28K /var/lib/NetworkManag
4.0K /var/lib/machines
4.0K /var/lib/rpm-state
20M /var/lib/yum
8.0K /var/lib/chrony
28K /var/lib/polkit-1
16K /var/lib/dhclient
4.0K /var/lib/selinux
4.0K /var/lib/misc
8.0K /var/lib/plymouth
28K /var/lib/iscsi
182M /var/lib/rpm
8.0K /var/lib/postfix
20K /var/lib/authconfig
76K /var/lib/systemd
12K /var/lib/stateless
8.0K /var/lib/ntp
109M /var/lib/mlocate
4.0K /var/lib/tuned
109G /var/lib
109G total
fdisk
fdisk
的意思是 固定磁盘Fixed Disk 或 格式化磁盘Format Disk,它是命令行下允许用户对分区进行查看、创建、调整大小、删除、移动和复制的工具。它支持 MBR、Sun、SGI、BSD 分区表,但是它不支持 GUID 分区表(GPT)。它不是为操作大分区设计的。
fdisk
允许我们在每块硬盘上创建最多四个主分区。它们中的其中一个可以作为扩展分区,并下设多个逻辑分区。1-4 扇区作为主分区被保留,逻辑分区从扇区 5 开始。
查看磁盘分区情况
在执行操作之前,我们必须知道的是哪些磁盘被加入了系统。使用fdisk -l
命令将会列出磁盘名称、分区数量、分区表类型、磁盘识别代号、分区 ID 和分区类型。
$ fdisk -l
Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc52ba00d
Device Boot Start End Blocks Id System
/dev/vda1 63 104857566 52428752 83 Linux
Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes