我有一台 Solaris 10 服务器,它通过 NFS 安装了远程文件系统。我相信远程系统是 NetApp,但不清楚。
当我运行时,df -h <mountpoint>
我得到的大小为 12T,使用了 10T,容量为 87%。
当我更改为挂载点并运行时,ls -A |xargs du -s
我得到了大约 8 MB 的空间。我期望 du 递归下降并将所有文件大小相加,但这里似乎没有这样做。
作为对冲,我跑了
find <mountpoint> -ls | awk '{total=total+$7}END{print total}'
答案是 13006791645。除以 1024^3 (1073741824) 时,我得到大约 12.1 TB。
所以看来find -ls
和df
或多或少是一致的。为什么你会失败得如此严重?
PS:该命令ls -A
还会抓取隐藏的快照目录,但 find 找不到任何内容(“检测到循环”除外)。
答案1
du -s
以 512 字节块的形式进行报告。由于不报告人类可读的数据,df -h
因此无法进行比较。du
要比较这两个值,请使用du -sh <mountpoint>
或/usr/xpg4/bin/df -P
让df
也以 512 字节为单位进行报告。
根据man du
:
具有多个链接的文件将仅针对一项进行计数和写入。报告中选择的目录条目未指定。默认情况下,文件大小以 512 字节为单位写入,向上舍入到下一个 512 字节单位。
尝试/usr/xpg4/bin/df -P
获取 512 字节报告df
:
bash-3.2$ /usr/xpg4/bin/df -P /var
Filesystem 512-blocks Used Available Capacity Mounted on
rpool/ROOT/s10/var
1147797504 66061270 954397119 7% /var
并与du -s
:
bash-3.2$ du -s /var
65976060 /var
或者比较一下:
bash-3.2$ df -h /var
Filesystem size used avail capacity Mounted on
rpool/ROOT/s10x_u11wos_24a/var
547G 32G 455G 7% /var
和:
bash-3.2$ du -hs /var
31G /var