您有一些失控的日志。不必每天像疯一样删除文件,而是找到一个或多个快速增长的文件,然后向内看以调查可能造成此问题的原因。也许某些程序在循环中记录某些情况。禁用该程序,禁用其日志记录或尝试解决其抱怨的问题。
如果文件在您的眼前增长,并且您不知道正在写入哪个程序,则可以轻松找到。这是一个例子。谁/var/log/syslog
开的?我们使用以下fuser
命令:
# fuser /var/log/syslog
/var/log/syslog: 602
只有一个进程/var/log/syslog
打开。是过程602。那是什么?让我们不要理会ps
和grep
,而/proc
直接看一下文件系统:
# ls -l /proc/602/exe
lrwxrwxrwx 1 root root 0 Mar 29 17:45 /proc/602/exe -> /usr/sbin/rsyslogd
啊哈,是rsyslogd
。我们并不感到惊讶,rsyslogd
有/var/log/syslog/
开放。
不能保证此方法有效。原因是程序不必一定要打开文件就可以对其进行写入。假设您有一个打开文件,附加到文件然后关闭文件的过程。您的调查会有些困难。您可以运行fuser
很多次,直到偶然抓住“红色手”的过程。该过程本身可能会迅速进入和退出。另一个问题是,可能有多个进程打开了文件,但是只有一个进程使文件更大。在这种情况下,您可以跟踪他们的系统调用。
# fuser /var/log/huge-annoying-file
/var/log/huge-annoying-file: 1234 23459
糟糕!打开了两个进程:1234和23459。让我们看看它们在做什么:
# strace -p 1234
Process 1234 attached - interrupt to quit
select(1, NULL, NULL, NULL, {9, 922666}
它什么也没做,只是阻塞了select
通话。Ctrl-C断开跟踪:
select(1, NULL, NULL, NULL, {9, 922666}^C <unfinished ...>
检查下一个:
# strace -p 23459
write(5, "Useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
^C
糟糕,您正在不断写作。一定是坏东西。我们甚至可以检查该进程正在写入的文件描述符5实际上是否是大文件:
# ls -l /proc/23459/fd/5
lr-x------ 1 root root 64 Apr 3 23:39 /proc/23459/fd/5 -> /var/log/huge-annoying-file
我不怀疑您的文件系统已损坏,但是要强制进行全面检查,则不必引导DVD。
首先,查看文件系统的最大安装数设置。使用df命令标识您的分区。我在Ubuntu系统上的示例在这里:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 18062108 5499320 11645284 33% /
udev 392152 4 392148 1% /dev
tmpfs 159768 768 159000 1% /run
none 5120 0 5120 0% /run/lock
none 399416 200 399216 1% /run/shm
/dev/sr0 43668 43668 0 100% /media/VBOXADDITIONS_4.1.4_74291
您可以看到/
文件系统已安装在上/dev/sda1
。所以/dev/sda1
是根分区(和在该特定系统中唯一的分区)的存储装置。
让我们看一下该文件系统的一些属性。即使已安装,这也是安全的。该命令产生大量输出。这是节选:
$ dumpe2fs /dev/sda1
dumpe2fs 1.42 (29-Nov-2011)
Filesystem volume name: <none>
Last mounted on: /
[ ... SNIP ... ]
Last mount time: Fri Mar 29 17:45:18 2013
Last write time: Tue Mar 5 09:08:03 2013
Mount count: 22
Maximum mount count: 22
[ ... SNIP ... ]
嘿,坐骑人数等于最大坐骑人数。下次我重新启动时,将进行文件系统检查。重要的是安装数是一个正值。如果您的值为零,请使用将其更改为某个正值,例如22 tune2fs -c 22 /dev/whatever
。零表示无论分区安装了多少次,都不会强制执行检查。很少重启的系统此处的值应较低。每年停机一次的服务器可能在每次重新引导时都使用fsck。您还可以设置基于日期的检查间隔。
现在要强制检查,您可以覆盖实际计数以大于或等于最大值,然后重新启动。这是用资本完成的C
:tune2fs -C 1234 /dev/whatever
。现在,该分区看起来好像已经被挂载了1234次,没有检查,这大于一位或两位数的最大值。
sudo du -sh /var/* ~/.xsession-errors
请的输出吗?(如果有些愚蠢的话,我希望这两个地方会爆炸)。否则,我在Eliah工作-这表明磁盘有问题。认真对待