linux丢失很多默认命令,Linux系统 df 命令显示异常、分区丢失问题解决

本文记录2种因 /etc/mtab 文件异常导致 df 命令显示异常、分区丢失问题的解决过程,以备后用。924a9f7e2eb5751ee2627e657089025b.png

一、根目录丢失

前些日子,同事在RTX群里问大家,有台服务器执行 df -h 看不到根目录,该如何解决?

[[email protected]:~]# df -h

Filesystem Size Used Avail Use% Mounted on

udev 8.0G 168K 8.0G 1% /dev

/dev/sda3 20G 1.7G 18G 9% /usr/local

/dev/sda4 103G 63G 35G 65% /data

于是我帮忙解决了一把,看了下 /etc/fstab 内容,根目录挂载信息是正常的:

[[email protected]:~]# cat /etc/fstab

/dev/sda1 / ext3 noatime,acl,user_xattr 1 1

/dev/sda2 swap swap defaults 0 0

/dev/sda3 /usr/local ext3 noatime,acl,user_xattr 1 2

/dev/sda4 /data ext3 noatime,acl,user_xattr 1 2

proc /proc proc defaults 0 0

sysfs /sys sysfs noauto 0 0

debugfs /sys/kernel/debug debugfs noauto 0 0

devpts /dev/pts devpts mode=0620,gid=5 0 0

接着,看了下 /etc/mtab 文件内容,发现根目录缺失:

[[email protected]:~]# cat /etc/mtab

proc /proc proc rw 0 0

udev /dev tmpfs rw 0 0

devpts /dev/pts devpts rw,mode=0620,gid=5 0 0

/dev/sda3 /usr/local ext3 rw,noatime,acl,user_xattr 0 0

/dev/sda4 /data ext3 rw,noatime,acl,user_xattr 0 0

nfsd /proc/fs/nfsd nfsd rw 0 0

执行 grep -v rootfs /proc/mounts 命令进行修复:

[[email protected].207.126.12:~]# grep -v rootfs /proc/mounts > /etc/mtab

[[email protected]:~]# cat /etc/mtab

/dev/root / ext3 rw,data=ordered 0 0

proc /proc proc rw 0 0

sysfs /sys sysfs rw 0 0

udev /dev tmpfs rw 0 0

devpts /dev/pts devpts rw 0 0

/dev/sda3 /usr/local ext3 rw,noatime,data=ordered 0 0

/dev/sda4 /data ext3 rw,noatime,data=ordered 0 0

nfsd /proc/fs/nfsd nfsd rw 0 0

可以看到,根目录已经出现了,再执行 df -h 就正常了:

[[email protected]:~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/root 9.9G 5.0G 4.4G 54% /

udev 8.0G 168K 8.0G 1% /dev

/dev/sda3 20G 1.7G 18G 9% /usr/local

/dev/sda4 103G 63G 35G 65% /data

二、df命令报错

帮同事解决问题后,不巧自己负责的服务器也出现类似问题,执行 df 命令报如下错误:

df: cannot read table of mounted file systems: No such file or directory

想着应该可以上述问题原因一样,所以直接执行修复命令,发现报错:

[[email protected]:/var/spool/postfix]# grep -v rootfs /proc/mounts > /etc/mtab

grep: write error: No space left on device

看来是空间不足,找了下发现是 maildrop 目录把根目录撑爆了:

[[email protected]:/var/spool/postfix]# du -sh *

4.0K active

4.0K bounce

4.0K corrupt

4.0K defer

4.0K deferred

4.0K flush

4.0K hold

4.0K incoming

9.4G maildrop

8.0K pid

4.0K private

4.0K public

4.0K saved

4.0K trace

直接清空,在执行 grep -v rootfs /proc/mounts >/etc/mtab 命令进行修复:

[[email protected]:/var/spool/postfix]# grep -v rootfs /proc/mounts > /etc/mtab

[[email protected]:/var/spool/postfix]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 20G 10.5G 9.5G 53% /

/dev/sda2 20G 1.7G 18G 9% /usr/local

/dev/sda3 103G 63G 35G 65% /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 因为磁盘满或文件系统异常,导致该文件内缺失常或直接为空,就会出现上文记录的问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值