[root@10.12.208.117:/var/spool/postfix]# grep -v rootfs /proc/mounts > /etc/mtab
grep:writeerror:Nospaceleftondevice
看来是空间不足,找了下发现是 maildrop 目录把根目录撑爆了:
[root@10.12.208.117:/var/spool/postfix]# du -sh *
4.0Kactive
4.0Kbounce
4.0Kcorrupt
4.0Kdefer
4.0Kdeferred
4.0Kflush
4.0Khold
4.0Kincoming
9.4Gmaildrop
8.0Kpid
4.0Kprivate
4.0Kpublic
4.0Ksaved
4.0Ktrace
直接清空,在执行 grep -v rootfs /proc/mounts >/etc/mtab 命令进行修复:
[root@10.12.208.117:/var/spool/postfix]# grep -v rootfs /proc/mounts > /etc/mtab
[root@10.12.208.117:/var/spool/postfix]# df -h
FilesystemSizeUsedAvailUse%Mountedon
/dev/sda120G10.5G9.5G53%/
/dev/sda220G1.7G18G9%/usr/local
/dev/sda3103G63G35G65%/data
已经正常了,maildrop 爆满的问题一般是 crontab 未屏蔽错误造成的,于是顺手将crontab 里面的条目都带上了 2>&1 屏蔽了,下次应该不会出现因为目录爆满导致 mtab 异常的情况了。
区别与联系
继续记录一下/etc/fstab和/etc/mtab的区别和联系。
/etc/fstab 文件记录了服务器上硬盘分区信息,启动 Linux 的时候,检查分区的 fsck 命令和挂载分区的 mount 命令都需要 fstab 中的信息,来检查和挂载分区。
/etc/mtab 文件记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等,每当 mount 挂载分区、umount 卸载分区,都会动态更新 mtab,mtab总是保持着当前系统中已挂载的分区信息,fdisk、df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分区挂载情况。
当然我们自己还可以通过读取/proc/mount也可以来获取当前挂载信息(即使用文章中用到的修复命令 grep -v rootfs /proc/mounts)。
当 /etc/mtab 因为磁盘满或文件系统异常,导致该文件内缺失常或直接为空,就会出现上文记录的问题了。