专栏首页张戈的专栏Linux系统 df 命令显示异常、分区丢失问题解决

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

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

一、根目录丢失

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

[root@10.207.126.12:~]# 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 内容,根目录挂载信息是正常的:

[root@10.207.126.12:~]# 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 文件内容,发现根目录缺失:

[root@10.207.126.12:~]# 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 命令进行修复:

[root@10.207.126.12:~]# grep -v rootfs /proc/mounts > /etc/mtab
[root@10.207.126.12:~]# 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 就正常了:

[root@10.207.126.12:~]# 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

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

[root@10.12.208.117:/var/spool/postfix]# grep -v rootfs /proc/mounts > /etc/mtab
grep: write error: No space left on device

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

[root@10.12.208.117:/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 命令进行修复:

[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
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 条评论
登录 后参与评论

相关文章

  • Linux下的mongodb服务脚本,以备不时之需

    前些天,一位开发同事找到我,说他测试环境的 mongodb 经常挂掉,要我写一个监控或复活的脚本。我觉得很奇怪,测试环境又没啥负载,经常挂掉肯定有非常规原因。 ...

    张戈
  • Win平台Web访问白名单设置脚本(IP安全性原则)

    最近老是有用户申请开通某网站的访问权限,我接手之前浏览权限的设置方法是修改 tomcat 下的 server.xml 配置文件,通过定义 allow="IP.....

    张戈
  • WordPress给文章添加百度是否已收录查询和显示功能(自定义栏目优化版)

    文章页面显示百度是否收录这个功能在张戈博客已经测试有一段时间了。最开始的代码也是从网络上找的,只是自己用,所以也就没想着分享了,毕竟是人家的成果,而且自行百度也...

    张戈
  • PE文件和COFF文件格式分析——签名、COFF文件头和可选文件头2

            之前的博文中介绍了IMAGE_FILE_HEADER结构,现在来讨论比较复杂的“可选文件头”结构体。(转载请指明来自breaksoftware的...

    方亮
  • 多线程协作wait、notify、notifyAll方法简介理解使用 多线程中篇(十四)

    wait和notify以及notifyAll之所以是Object的方法就是因为任何一个对象都可以当做锁对象(锁对象也是一种临界资源)

    noteless
  • 一文读懂动态规划

    动态规划(DP, Dynamic Programming)是很多互联网公司笔试/面试喜欢考的题目,听起来也非常高大上。对于非计算机专业,或者没怎么刷过编程题的人...

    用户7164815
  • Ubuntu16.04 配置OpenCV3.4.2及基本使用

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效...

    FPGA开源工作室
  • Nexus5 bootloader内容初探及延伸思考编译使用

    在Android启动过程分析-从按下电源键到第一个用户进程[转载]中,我们知道BootLoader是在操作系统前执行的程序,有没有很好奇它到底有些啥内容呢?

    用户2930595
  • python之面向对象中的多态

    说明:SonDog继承了Dog,并重写了play方法 。在Person类中,game方法需要传入一个Dog的实例。

    绝命生
  • Python 图像拼接

    于小勇

扫码关注云+社区

领取腾讯云代金券