为什么 df 包含多个 tmpfs 条目?

为什么 df 包含多个 tmpfs 条目?

据我所知,这df -a包括“伪、重复和无法访问的文件系统”。这会导致相当多的坐骑被隐藏,例如:

udev             8055632         0   8055632   0% /dev
devpts                 0         0         0    - /dev/pts

-a...除非我通过该选项,否则不会出现。但是,我对未通过时包含的内容感兴趣-a

Filesystem     1K-blocks      Used Available Use% Mounted on
tmpfs            1624300      3292   1621008   1% /run
/dev/sda1      122485360  12664524 103552780  11% /
tmpfs            8121496     60308   8061188   1% /dev/shm
tmpfs               5120         4      5116   1% /run/lock
/dev/sdb1      460366888 154205092 282702932  36% /home
tmpfs            1624296      1688   1622608   1% /run/user/1000
/dev/sdc2      488282108 324162964 164119144  67% /media/jez/Picard - Main [C]

从我的角度来看,三个“真实”分区是sda1sdb1、 和 ,sdc2它们指向物理磁盘上的实际分区。如何df决定其默认输出还包括一些其他坐骑;显然tmpfs是?难道不是tmpfs“伪”文件系统吗?

答案1

临时文件系统不是伪文件系统,它是一个将其内容存储在虚拟内存中的真实文件系统。不同之处在于伪文件系统提供了表示真实的文件系统直接存储人工制品。

重要的是df,伪文件系统无法以通常的方式耗尽存储空间,因为无法直接向其中添加数据。真实文件系统存储空间不足,这才是df真正“关心”的。由于 tmpfs 文件系统可能会填满,因此默认情况下会列出它们。

答案2

(使用 GNU 工作,df因为 POSIX 没有该-a标志。)默认情况下df将显示已安装的具有非零大小的文件系统。

例子

df -ah

Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.9G  5.6G  2.0G  74% /
devtmpfs        458M     0  458M   0% /dev
proc               0     0     0    - /proc
sysfs              0     0     0    - /sys
tmpfs           462M  1.1M  461M   1% /dev/shm
devpts             0     0     0    - /dev/pts
tmpfs           185M  1.5M  184M   1% /run
tmpfs           5.0M  8.0K  5.0M   1% /run/lock
cgroup2            0     0     0    - /sys/fs/cgroup
systemd-1          -     -     -    - /proc/sys/fs/binfmt_misc
mqueue             0     0     0    - /dev/mqueue
sunrpc             0     0     0    - /run/rpc_pipefs
debugfs            0     0     0    - /sys/kernel/debug
tracefs            0     0     0    - /sys/kernel/tracing
fusectl            0     0     0    - /sys/fs/fuse/connections
configfs           0     0     0    - /sys/kernel/config
ramfs              0     0     0    - /run/credentials/systemd-sysctl.service
ramfs              0     0     0    - /run/credentials/systemd-sysusers.service
ramfs              0     0     0    - /run/credentials/systemd-tmpfiles-setup-dev.service
/dev/mmcblk0p1   63M   22M   42M  35% /boot
ramfs              0     0     0    - /run/credentials/systemd-tmpfiles-setup.service
binfmt_misc        0     0     0    - /proc/sys/fs/binfmt_misc
tmpfs            93M     0   93M   0% /run/user/1001

默认情况下,大小为零的条目(第二列)将被省略,即这些文件系统:

Filesystem      Size  Used Avail Use% Mounted on
proc               0     0     0    - /proc
sysfs              0     0     0    - /sys
devpts             0     0     0    - /dev/pts
cgroup2            0     0     0    - /sys/fs/cgroup
systemd-1          -     -     -    - /proc/sys/fs/binfmt_misc
mqueue             0     0     0    - /dev/mqueue
sunrpc             0     0     0    - /run/rpc_pipefs
debugfs            0     0     0    - /sys/kernel/debug
tracefs            0     0     0    - /sys/kernel/tracing
fusectl            0     0     0    - /sys/fs/fuse/connections
configfs           0     0     0    - /sys/kernel/config
ramfs              0     0     0    - /run/credentials/systemd-sysctl.service
ramfs              0     0     0    - /run/credentials/systemd-sysusers.service
ramfs              0     0     0    - /run/credentials/systemd-tmpfiles-setup-dev.service
ramfs              0     0     0    - /run/credentials/systemd-tmpfiles-setup.service
binfmt_misc        0     0     0    - /proc/sys/fs/binfmt_misc

导致此处显示的默认输出:

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.9G  5.6G  2.0G  74% /
devtmpfs        458M     0  458M   0% /dev
tmpfs           462M  1.1M  461M   1% /dev/shm
tmpfs           185M  1.5M  184M   1% /run
tmpfs           5.0M  8.0K  5.0M   1% /run/lock
/dev/mmcblk0p1   63M   22M   42M  35% /boot
tmpfs            93M     0   93M   0% /run/user/1001

这与其文档不一致,来自infoman,其中说,

不带参数,df报告所有当前安装的文件系统(所有类型)上已使用和可用的空间

但是也

-a --all在列表中包含虚拟、重复或无法访问的文件系统,默认情况下会忽略这些系统。

这在源代码(coreutils,df.c)中得到了证实。以下fsu_blocks是文件系统块的数量,show_all_fs由命令行上明确列出的文件系统设置-ashow_listed_fs

if (fsu.fsu_blocks == 0 && !show_all_fs && !show_listed_fs)
  return;

相关内容