我已经尝试解决这个问题好几天了,但都没有成功。在这个论坛和其他论坛上,我看到了很多关于这个问题的讨论,但没有一个解决方案对我有用。
我目前的情况是,我有一些 GB“丢失”,我无法释放它们,也无法在任何地方找到它们。我猜这是内存泄漏之类的问题,只有在重新启动时才能修复,但我只是想问问是否有人有更好的主意,因为该服务器上目前有几个客户。
以下是我在其他线程中看到的一些命令和我的特定输出:
DF-H
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 16G 1.8G 90% /
tmpfs 384M 0 384M 0% /lib/init/rw
udev 10M 1.2M 8.9M 12% /dev
tmpfs 384M 0 384M 0% /dev/shm
du-Pshx/*2>/dev/null
4.8M /bin
27M /boot
0 /cdrom
1.2M /dev
8.8M /emul
504M /etc
4.0K /grubconf
88K /home
60K /images
0 /initrd.img
147M /lib
0 /lib32
0 /lib64
16K /lost+found
12K /media
4.0K /mnt
4.4M /opt
777M /proc
57M /root
4.7M /sbin
4.0K /selinux
4.0K /srv
0 /sys
4.0K /tmp
332M /usr
471M /var
0 /vmlinuz
lsof +L1
(no output)
lsof | grep -i 删除
(no output)
查找 / -size +50000 -exec ls -lah {} +;
-r-------- 1 root root 777M 2015-07-21 06:19 /proc/kcore
-rw------- 1 root root 64M 2015-07-09 03:31 /sys/devices/pci0000:00/0000:00:06.0/0000:01:04.0/resource0
-rw-r----- 1 root adm 49M 2015-07-21 06:19 /var/log/auth.log
-rw-r----- 1 root adm 174M 2015-07-19 06:25 /var/log/auth.log.1
-rw-rw---- 1 control mail 100M 2015-07-21 06:00 /var/mail/control
例如,如果你从 du 进行计算,你会得到几 GB,但远不及 16GB。
/ 是 ext3。
操作系统是Debian 6.0
我这里遗漏了什么吗?
答案1
99.9% 的情况下发生这种情况的原因是一个或多个文件已被删除,但仍有一个进程在写入旧文件句柄。
当程序想要对文件执行 I/O 操作时,它会询问内核“嘿内核,我想访问文件 /bla.txt,并且我希望能够对其进行读写”。然后内核返回一个“文件句柄”,它是对可用于执行读写操作的文件的引用。
只要程序保持文件句柄打开,它就可以继续写入,即使该文件随后被删除。
这通常在您对文件执行某些操作时变得明显,大多数情况下会像旋转日志文件一样。然后发生的是报告df
磁盘上的实际使用情况,其中可能包括仍在写入的打开文件所占用的空间。du
另一方面,它会遍历所有已知文件名并将其空间考虑在内。这个数字可能会更少,因为已删除的文件不再具有文件名,因此du
不会将其考虑在内。
要查看这是否是您的问题,请运行以下命令:lsof +L1
,如果您看到任何文件名显示“(deleted)”,则需要停止输出的“COMMAND”列中指定的进程,然后找出它为何保持已删除文件打开。一旦您弄清楚了,您就可以采取措施阻止这种情况发生。
答案2
我只能想到两个原因:
- 一个 rootkit 感染;
- 文件系统损坏。
用来dd
将您的分区转储到可移动/网络磁盘并在其他地方安装/检查它。转储时您可能会遇到一些不一致的情况,但很有可能可以轻松修复它们。