我遇到了一个奇怪的情况,因为 Linux df 命令说没有可用磁盘空间
[root@backup cache]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 72G 70G 0 100% /
/dev/sda1 190M 11M 170M 7% /boot
tmpfs 248M 0 248M 0% /dev/shm
但du -sh /*
说
[root@backup cache]# du -sh /*
4.0K /bacula-restores
7.4M /bin
5.4M /boot
3.6T /data
116K /dev
55M /etc
204K /home
76M /lib
16K /lost+found
12K /media
0 /misc
16K /mnt
8.0K /mount
0 /net
8.0K /opt
0 /proc
2.3G /root
32M /sbin
8.0K /selinux
168K /share
8.0K /srv
0 /sys
361M /test
20K /tmp
3.2G /usr
1.5G /var
你能告诉我问题出在哪里吗?我的空间在哪里?我搞不清楚 :(
答案1
尝试:
$ lsof +L1
这将找到链接数小于 1 的文件(文件已被删除但仍在写入)。
当 du 和 df 不匹配时。
答案2
简短版本:用于lsof
查找未链接但仍打开的文件。重新启动保存该文件的应用程序(或者如果您懒得做,则重新启动整个系统),您将恢复可用空间。
长版本:很可能您有一个由应用程序打开并正在写入的文件,但已从文件系统取消链接(删除)。
与 NTFS 不同,ext 中有一种引用计数。这意味着当您删除文件时,只需删除对它的引用。在程序中打开文件会添加引用。因此,您必须找出哪个程序保存了该文件。这就是为什么在 UNIX 中进行文件操作时,您经常会看到对链接/取消链接的引用。通常使用工具来查找文件lsof
。
这种行为的好处是,您永远不会遇到 Windows 中经常出现的“文件已打开,因此无法删除”错误。您还可以替换系统文件,例如共享库,并且您的软件将使用旧库,直到重新启动(并从磁盘加载新库),而不必重新启动软件升级(再次是 Windows)。您现在看到的坏处是。文件系统中可见文件的大小通常与磁盘上的数据量不匹配。
答案3
或者在这种情况下穷人lsof
会是(对于Linux)
ls -l /proc/*/fd/ | grep deleted
答案4
您可能还想检查您的 inode 是否已耗尽df -i
。