操作系统

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

本文记录2种因 /etc/mtab 文件异常导致 df 命令显示异常、分区丢失问题的解决过程,以备后用。 一、根目录丢失 前些日子,同事在RTX群里问大家,有台服务器执行 df -h 看不到根目录,该如何解决? 于是我帮忙解决了一把,看了下 /etc/fstab 内容,根目录挂载信息是正常的: 接着,看了下 /etc/mtab 文件内容,发现根目录缺失: 执行 grep -v rootfs /proc/mounts 命令进行修复: 可以看到,根目录已经出现了,再执行 df -h 就正常了: 二、df命令报错 帮同事解决问题后,不巧自己负责的服务器也出现类似问题,执行 df 命令报如下错误: df: cannot read table of mounted file systems: No such file or directory 想着应该可以上述问题原因一样,所以直接执行修复命令,发现报错: 看来是空间不足,找了下发现是 maildrop 目录把根目录撑爆了: 直接清空,在执行 grep -v rootfs /proc/mounts >/etc/mtab 命令进行修复: 已经正常了,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 因为磁盘满或文件系统异常,导致该文件内缺失常或直接为空,就会出现上文记录的问题了。
阅读全文
操作系统

Linux下巧用chattr、watch命令的实例

一、起因 前些日子,张戈在日志备份服务器加入了日志压缩的计划任务(详见服务器日志备份超节省空间的思路),结果发现监控总是发来tar的报警,提示存在tar进程。仔细检查history后发现是公司总部那边做的监控:   每20分钟执行一个监控脚本,然后删除。 分析下这样做的好处:①、不留痕迹;②、把history塞满,让其他操作无迹可寻(感觉有点蛋疼)。 二、擒获 每次执行后立马删除了,得想个办法把这脚本“擒获”! 于是我写了一个简单的脚本catch.sh: ps:如果发现hdd.sh就把它复制一份到tmp目录,如果tmp目录发现存在hdd.sh则打印 Catch it,结束脚本。 然后使用watch来执行它: ps:每隔0.1秒执行上面的脚本,应该可以在删除之前获取脚本。 等了一段时间,看了下终端: 还真抓住了! 编辑hdd.sh,发现了tar进程监控语句: 三、计策 一抓到“真凶”了,但是又不能处以“死刑”,因为还有“利用价值”,所以这是一个很棘手的事。 思考了下,有2种方案: ①、实时监控hdd.sh文件的出现,一出现就立即用sed干掉tar进程监控那一段代码; ②、固定hdd.sh,让其无法删除和替换,然后删除tar监控代码; 进一步思考发现,方案①不可行,先不说这实时监控会占资源,就是如何在执行之前把内容给修改了,都是一个头疼的问题,毕竟shell都是写入内存再执行代码的。等你删除tar监控代码了,对执行也没任何影响。 于是准备实施方案②。 四、实施 1、修改hdd.sh,屏蔽tar报警消息: 2、锁定hdd.sh,让监控端无法替换或删除 ①、如何让suxirong家目录下面的hdd.sh文件,无法修改和替换,首先想到的就是去掉所有权及写入权限: 结果,切换到suxirong账号,居然还是可以删除或替换。。。 ②、突然想起Linux还有一个-i 的文件属性可以锁定文件不被修改,于是执行如下语句: 用suxirong账号试下效果: 所有者是suxirong,也有可写权限,可就是无法修改,有种偷笑的赶脚: 好了,目的达到,现在就算是root都无法修改了!具体效果只要等明天日志压缩计划任务运行的时候就知道了。 五、写在最后 其实,chattr和lsattr在张戈博客早期文章:Linux基础知识之文件隐藏属性 一文中就已经提到过。这次主要分享一下我在工作中正好用到chattr的实例,另外就是利用watch命令持续间隔执行某脚本的方法,特殊场景使用会有奇效,完毕!
阅读全文