atr*_*eyu 6 mount disk-usage fstab bind
我有一个分区/dev/sdb1,它安装在/data。在 /etc/fstab 我有:
/dev/sdb1 /data ext4 defaults 1 2
Run Code Online (Sandbox Code Playgroud)
挂载该分区后,我将进行以下绑定挂载:
/data/backups/f17/opt /opt none rw,bind 0 0
/data/backups/f17/home /home none rw,bind 0 0
/data/var/www/html /var/www/html/ none rw,bind 0 0
Run Code Online (Sandbox Code Playgroud)
所有的安装都做得很好。
问题是,当我运行时df,我获得的与 sdb1 相关的唯一条目指向“/opt”,而不是“/data”。
例如:
/dev/sdb1 240233144 196081648 31925236 86% /opt
Run Code Online (Sandbox Code Playgroud)
我期望/想要df显示原始安装点,即/data,而不是/opt。或者至少,显示与 sdb1 相关的所有挂载点。如果我umount是 /opt 绑定挂载点,那么很df高兴地显示 /data (即使其他两个绑定挂载仍然被挂载,奇怪的是)。
如果我在终端中执行挂载命令,则行为没有区别(与让系统通过mount -a使用 /etc/fstab执行挂载命令相比)。
我知道我可以使用类似的东西findmnt --df来更好地了解所有已安装的文件系统,但我想使用df(并且我不想将 df 别名为其他任何东西)。
谢谢。
更新
(添加更多信息)
该文件/proc/mounts显示了所有四个挂载点:
/dev/sdb1 /data ext4 rw,relatime,data=ordered 0 0
/dev/sdb1 /var/www/html ext4 rw,relatime,data=ordered 0 0
/dev/sdb1 /home ext4 rw,relatime,data=ordered 0 0
/dev/sdb1 /opt ext4 rw,relatime,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
绑定安装相当于原始安装。没有一个标记为原件,一个标记为副本。绑定挂载在这方面就像硬链接,而不是符号链接。
由于 GNU coreutils 8.21(如果我正确阅读了变更日志),df努力只报告每个文件系统一次。旧版本的每个非忽略挂载点包含一个条目,因此绑定挂载会导致多个条目。df显示每个文件系统的最新挂载点,只要它可以确定。在您的情况下,df报告/opt,而不是/data,因为/opt是最后添加的。
传递选项-a以获取最近的 coreutils 以报告每个文件系统的所有条目。如果您不传递路径参数,这也会导致列出通常会被忽略的文件系统。如果您确实传递了路径参数,我认为df除了最新的挂载点外,永远不会报告任何内容。
如果您不想为df其他内容设置别名,您要么必须替换df为自定义实现,要么必须忍受df报告与您想要的内容不同的内容。如果您需要最早的挂载点而不是最新的挂载点,明智的解决方案是df -a仅调用并保留您感兴趣的设备的第一个匹配项。