我心如烟卸 发表于 2024-9-11 18:06:27

Linux系统 df 命令显示异常、分区丢失问题解决

一、根目录丢失
前些日子,同事在 RTX 群里问大家,有台服务器执行 df -h 看不到根目录,该如何解决?
# df -hFilesystem            SizeUsed Avail Use% Mounted onudev                  8.0G168K8.0G   1% /dev/dev/sda3            20G1.7G   18G   9% /usr/local/dev/sda4             103G   63G   35G65% /data
于是我帮忙解决了一把,看了下 /etc/fstab 内容,根目录挂载信息是正常的:
# cat /etc/fstab /dev/sda1            /                  ext3       noatime,acl,user_xattr1 1/dev/sda2            swap               swap       defaults                0 0/dev/sda3            /usr/local         ext3       noatime,acl,user_xattr1 2/dev/sda4            /data                ext3       noatime,acl,user_xattr1 2proc               /proc                proc       defaults                0 0sysfs                /sys               sysfs      noauto                  0 0debugfs            /sys/kernel/debug    debugfs    noauto                  0 0devpts               /dev/pts             devpts   mode=0620,gid=5         0 0
接着,看了下 /etc/mtab 文件内容,发现根目录缺失:
# cat /etc/mtab proc /proc proc rw 0 0udev /dev tmpfs rw 0 0devpts /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 0nfsd /proc/fs/nfsd nfsd rw 0 0
执行 grep -v rootfs /proc/mounts 命令进行修复:
# grep -v rootfs /proc/mounts > /etc/mtab# cat /etc/mtab/dev/root / ext3 rw,data=ordered 0 0proc /proc proc rw 0 0sysfs /sys sysfs rw 0 0udev /dev tmpfs rw 0 0devpts /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 0nfsd /proc/fs/nfsd nfsd rw 0 0
可以看到,根目录已经出现了,再执行 df -h 就正常了:
# df -hFilesystem            SizeUsed Avail Use% Mounted on/dev/root             9.9G5.0G4.4G54% /udev                  8.0G168K8.0G   1% /dev/dev/sda3            20G1.7G   18G   9% /usr/local/dev/sda4             103G   63G   35G65% /data二、df 命令报错
帮同事解决问题后,不巧自己负责的服务器也出现类似问题,执行 df 命令报如下错误:
df: cannot read table of mounted file systems: No such file or directory
想着应该可以上述问题原因一样,所以直接执行修复命令,发现报错:
# grep -v rootfs /proc/mounts > /etc/mtabgrep: write error: No space left on device
看来是空间不足,找了下发现是 maildrop 目录把根目录撑爆了:
# du -sh *4.0K    active4.0K    bounce4.0K    corrupt4.0K    defer4.0K    deferred4.0K    flush4.0K    hold4.0K    incoming9.4G    maildrop8.0K    pid4.0K    private4.0K    public4.0K    saved4.0K    trace
直接清空,在执行 grep -v rootfs /proc/mounts >/etc/mtab 命令进行修复:
# grep -v rootfs /proc/mounts > /etc/mtab# df -hFilesystem            SizeUsed Avail Use% Mounted on/dev/sda1            20G10.5G9.5G53% //dev/sda2            20G1.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 因为磁盘满或文件系统异常,导致该文件内缺失常或直接为空,就会出现上文记录的问题了。
页: [1]
查看完整版本: Linux系统 df 命令显示异常、分区丢失问题解决