Skip to content

磁盘与文件系统管理

认识文件系统

文件系统的简单操作

了解如何查询文件系统的总容量与每个目录所占用的容量

磁盘与目录的容量

  • df: 列出文件系统的整体磁盘使用量
  • du: 查看文件系统的磁盘使用量(常用在查看目录所占磁盘空间)
df

df [-ahikHTm] [目录或文件名]
选项与参数:
-a: 列出所有的文件系统,包括系统特有的/proc等文件系统
-k: 以 KBytes 的容量显示各文件系统
-m: 以 MBytes 的容量显示各文件系统
-h: 以人们较易阅读的 GBytes、MBytes、KBytes 等格式自行显示
-H: 以 M=100K 替换 M=1024K 的进位方式
-T: 连同该硬盘分区的文件系统名称(例如xfs)也列出
-i: 不用磁盘容量,而以 inode 的数量来显示

示例一:将系统所有的文件系统全列出来

1
2
3
4
5
6
7
8
➜  ~ df
文件系统          1K-块    已用     可用 已用% 挂载点
/dev/vda1      41151808 2939524 36098852    8% /
devtmpfs         931516       0   931516    0% /dev
tmpfs            941860       0   941860    0% /dev/shm
tmpfs            941860   98672   843188   11% /run
tmpfs            941860       0   941860    0% /sys/fs/cgroup
tmpfs            188376       0   188376    0% /run/user/0

输出的结果信息为:

  • Filesystem(文件系统): 代表该文件系统是在哪个分区,所以列出设备名称
  • 1k-blocks: 说明下面的数字单位是 1KB,可利用 -h 或 -m 来改变容量
  • Used: 顾名思义,就是使用掉的磁盘空间
  • Available: 也就是剩下的磁盘空间大小
  • Use%: 就是磁盘的使用率,如果使用率高达 90% 以上,最好需要注意一下,免得容量不足造成系统问题,例如最容易被占满的 /var/spool/mail 这个保存邮件的目录
  • Mounted on: 就是磁盘的挂在目录(挂载点)
1
2
3
4
5
6
7
8
➜  ~ df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/vda1        40G  2.9G   35G    8% /
devtmpfs        910M     0  910M    0% /dev
tmpfs           920M     0  920M    0% /dev/shm
tmpfs           920M   97M  824M   11% /run
tmpfs           920M     0  920M    0% /sys/fs/cgroup
tmpfs           184M     0  184M    0% /run/user/0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
➜  ~ df -aT
文件系统       类型          1K-块    已用     可用 已用% 挂载点
rootfs         -                 -       -        -     - /
sysfs          sysfs             0       0        0     - /sys
proc           proc              0       0        0     - /proc
devtmpfs       devtmpfs     931516       0   931516    0% /dev
securityfs     securityfs        0       0        0     - /sys/kernel/security
tmpfs          tmpfs        941860       0   941860    0% /dev/shm
devpts         devpts            0       0        0     - /dev/pts
tmpfs          tmpfs        941860   98672   843188   11% /run
tmpfs          tmpfs        941860       0   941860    0% /sys/fs/cgroup
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/systemd
pstore         pstore            0       0        0     - /sys/fs/pstore
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/blkio
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/freezer
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/cpuset
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/memory
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/net_cls,net_prio
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/pids
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/cpu,cpuacct
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/perf_event
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/hugetlb
cgroup         cgroup            0       0        0     - /sys/fs/cgroup/devices
configfs       configfs          0       0        0     - /sys/kernel/config
/dev/vda1      ext4       41151808 2939896 36098480    8% /
systemd-1      autofs            0       0        0     - /proc/sys/fs/binfmt_misc
debugfs        debugfs           0       0        0     - /sys/kernel/debug
hugetlbfs      hugetlbfs         0       0        0     - /dev/hugepages
mqueue         mqueue            0       0        0     - /dev/mqueue
tmpfs          tmpfs        188376       0   188376    0% /run/user/0

系统里面其实还有很多特殊的文件系统存在。那些比较特殊的文件系统几乎都是在内存当中

例如/proc这个挂载点。因此,这些特殊的文件系统都不会占据磁盘空间

1
2
3
➜  ~ df -h /etc
文件系统        容量  已用  可用 已用% 挂载点
/dev/vda1        40G  2.9G   35G    8% /

这个范例比较有趣一点,在 df 后面加上目录或是文件时,df 会自动的分析该目录或文件所在的硬盘分区,并将该硬盘分区的容量显示出来,所以,您就可以知道某个目录下面还有多少容量可以使用了

由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在超级区块内的信息,所以这个命令显示结果的速度非常快。
在显示结果中你需要特别留意的是根目录/的剩余容量。
因为我们所有的数据都是由根目录衍生出来的,因此当根目录的剩余容量剩下 0 时,你的 Linux可能就问题很大了

另外需要注意的是,如果使用 -a 这个参数时,系统出现 /proc 这个挂载点,但是里面的东西都是 0,不要紧张。/proc 的东西都是 Linux 系统所需要加载的系统数据,而且是挂在在内存当中,所以当然没有占任何的磁盘空间

至于那个 /dev/shm/ 目录,其实是利用内存虚拟出来的磁盘空间,通常是总物理内存的一半。由于是通过内存模拟出来的磁盘,因此你在这个目录下面建立任何数据文件时,访问速度是非常快的。(在内存中工作)。不过,也由于它是内存模拟出来的,因此这个文件系统的大小在每台主机上都不一样,而且建立的东西在下次启动时就会消失,因为是在内存中嘛

du

du [-ahskm] 文件或目录名称

-a: 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量
-h: 以人们较易读的容量格式(G/M)显示
-s: 仅列出总量,而不列出每个各别的目录占用容量
-S: 不包括子目录下的总计,与 -s 有点差别
-k: 以 KBytes 列出容量显示
-m: 以 MBytes 列出容量显示 -d, --max-depth=N: print the total for a directory (or file, with --all) only if it is N or fewer levels below the command line argument; --max-depth=0 is the same as --summarize

直接输入 du 没加任何选项时,则 du 会分析【目前所在目录】的文件与目录所占用的磁盘空间
但是,实际显示时,仅会显示目录容量(不含文件),因为(.)目录下很多文件没有被里出来,
所以全部的目录相加不会等于(.)的容量,此外,输出的数值数据为 1K 大小的容量单位

与 df 不一样的是,du 这个命令其实会直接到文件系统内去查找所有的文件数据,。
此外,在默认的情况下,容量的输出是以 KB 为单位,如果你想要知道目录占了多少 MB,那么就是用 -m 这个参数即可。如果你想要知道该目录占了多少容量的话,使用 -s 就可以

至于 -S 这个选项部分,由于 du 默认会将所有文件的大小均列出,因此假设你在 /etc 下面使用 du 时,所有的文件大小,包括 /etc 下面的子目录容量也会被计算一次。
然后最终的容量(/etc)也会相加一次,因此很多朋友都会误会 du 分析的结果不太对劲,所以,如果想要列出某目录下的全部数据,或许也可以加上 -S 的选项,减少子目录的相加

硬连接与符号链接:ln