我知道 du 和 df 之间经常存在一些差异,但是当我 du 我的 ramdisk 时,它占用 13G,而 df 显示它使用 16GB。这看起来差别还是蛮大的。这是正常的吗?
[root@zserver2 ramdisk]# du -h .
...
13G .
[root@zserver2 ramdisk]# df -h
Filesystem Size Used Avail Use% Mounted on
...
none 16G 16G 0 100% /home/stuff/ramdisk
ramdisk 在 fstab 中定义,默认为我的 32GB ram 的 50%:
# cat /etc/fstab
...
none /home/stuff/ramdisk tmpfs mode=774,uid=500,gid=501 0 0
答案1
很可能某些文件已从 ramdisk 中删除,而某些进程仍具有打开的文件句柄。检查这一点的一个简单方法是使用lsof /home/stuff/ramdisk
打开但不再位于文件系统上的文件将标记为“(已删除)”。
例如,我删除了文件“/dev/shm/test”,但它仍然由 python 脚本打开:
% df -h /dev/shm
Filesystem Size Used Avail Use% Mounted on
shm 512M 257M 256M 51% /dev/shm
% du -h /dev/shm
84K /dev/shm
% lsof /dev/shm
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
[...]
python 39756 adaephon 5r REG 0,13 268435456 44790 /dev/shm/test (deleted)
答案2
你可以
是否有已在 ramdisk 上删除的文件,但仍被某些进程或线程打开? [一旦这些进程/线程退出,操作系统将真正释放这些 inode,因此 df 将报告比以前少 3GB]
du 无法访问目录/文件中的很多内容? [偏执?可能是一些 rootkit 或隐藏的恶意内容......]
我确信我的脑海中还会出现其他可能性[文件系统上的元数据?是日记吗?你有很多文件吗? “du”是否会忽略“lost+found”目录中的内容或您使用的任何 FS 上的等效目录? ETC。]