(这个问题涉及到一个类似的问题,但它讨论的是一个旋转的日志文件。)
今天我收到了一个关于/var
空间非常低的系统消息。
像往常一样,我执行了sudo apt-get clean
命令,情况只有稍微改善。然后我删除了旋转的日志文件,但改善的效果也很小。
经过检查,我发现/var/log
目录下的一些日志文件变得非常巨大。具体来说,ls -lSh /var/log
命令显示:
total 28G -rw-r----- 1 syslog adm 14G Aug 23 21:56 kern.log -rw-r----- 1 syslog adm 14G Aug 23 21:56 syslog -rw-rw-r-- 1 root utmp 390K Aug 23 21:47 wtmp -rw-r--r-- 1 root root 287K Aug 23 21:42 dpkg.log -rw-rw-r-- 1 root utmp 287K Aug 23 20:43 lastlog
正如我们所看到的,前两个是有问题的。我对为什么这样大的文件没有被轮换感到有些惊讶。
那么,我应该怎么做呢?只需删除这些文件然后重新启动吗?还是采取更谨慎的步骤?
我正在使用Ubuntu 14.04。
更新1
首先,系统只有几个月的历史。几个月前,我的硬盘崩溃后,我不得不从头安装系统。
现在,根据this answer的建议,
我首先使用tail
检查了有问题的日志文件,这并不令人意外。然后,为了进行更深入的检查,我执行了来自same answer的脚本。
for log in /var/log/{syslog,kern.log}; do
echo "${log} :"
sed -e 's/\[[^]]\+\]//' -e 's/.*[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}//' ${log} \
| sort | uniq -c | sort -hr | head -10
done
整个过程花了几个小时的时间。 输出结果如下所示,
/var/log/syslog : 71209229 Rafid-Hamiz-Dell kernel: sda3: rw=1, want=7638104968240336200, limit=1681522688 53929977 Rafid-Hamiz-Dell kernel: attempt to access beyond end of device 17280298 Rafid-Hamiz-Dell kernel: attempt to access beyond end of device 1639 Rafid-Hamiz-Dell kernel: EXT4-fs warning (device sda3): ext4_end_bio:317: I/O error -5 writing to inode 6819258 (offset 0 size 4096 starting block 54763121030042024) <snipped> /var/log/kern.log.1 : 71210257 Rafid-Hamiz-Dell kernel: attempt to access beyond end of device 71209212 Rafid-Hamiz-Dell kernel: sda3: rw=1, want=7638104968240336200, limit=1681522688 1639 Rafid-Hamiz-Dell kernel: EXT4-fs warning (device sda3): ext4_end_bio:317: I/O error -5 writing to inode 6819258 (offset 0 size 4096 starting block 954763121030042024)
(/dev/sda3
是我的主目录。正如我们所知,
为什么一个进程会想要超出限制去写入,这实际上超出了我的理解范围。如果即使在系统更新后这种情况仍然持续下去,也许我会在这个论坛上提出一个不同的问题。lsblk /dev/sda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931.5G 0 disk ├─sda1 8:1 0 122.1G 0 part / ├─sda2 8:2 0 7.6G 0 part [SWAP] └─sda3 8:3 0 801.8G 0 part /home
然后,从这个答案(你可能想要查看这个链接以获得更深入的理解),我执行了,
sudo su -
> kern.log
> syslog
现在,这些文件的大小为零。系统在重启前后都运行正常。
接下来几天我会观察这些文件(以及其他文件),如果它们表现异常,我会及时报告。
最后需要注意的是,这两个有问题的文件(kern.log和syslog)已经设置了轮转,通过检查/etc/logrotate.d/目录下的文件(使用grep命令可以帮助)可以看到。
更新2:
日志文件实际上已经进行了轮转。看起来这些大文件大小是在一天内产生的。