操作系统

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修改密码报PAM authentication failed错误

最近接到一个运维开发任务,需要开发一个帐号管理系统,对手头三千多台Linux服务器的root帐号进行批量系统的管理,实现定期修改root为随机密码并加密存储,并向运维管理WEB前台提供密码查询解密接口等功能。 刚开始,我基于php+ssh2_exec开发了一套雏形。基本功能都实现了,结果老大说这里的运维就我稍微会点php,后面可不好维护。本来也被我说服了,因为写都写好了,难道要重构? 后面线上测试发现,公司有部分系系统接入了ldap鉴权,php的ssh2_exec就无法工作了,返回登陆失败的错误。 不得已,最后苦逼的用python将这个系统重构了一遍,并实现了多线程模式,因为不太会python的cgi框架,就用php搭的api接口,到此为止,基本全部搞定了。 在线上测试了几天后,发现总是有一台服务器要卡半天,登陆校验日志倒是成功的,但总是卡在修改密码那一步。 于是,print一下过程,发现chpasswd改密码这一步报错了!导致expect卡住了。 看了下错误信息是: chpasswd: PAM authentication failed 实际登陆这台机器,执行chpasswd,发现也是报这个错误。 试着执行passwd,也报错了: passwd: pam_start() failed, error 26 搜了半天,也看了半天的洋文案例,都没找到一个贴切的解决办法。最终,我看到有一篇类似的案例,他是通过检查 /var/log/secure 日志文件找到的错误。 于是,我也试着碰碰运气,发现还真有记录! 在 /var/log/secure 中,发现我在执行chpasswd命令是会提示找不到/etc/pam.conf文件。于是到其他系统上去看有没有这个文件,发现也没有的。 最终,我无奈之下,对比了2个系统的/etc目录,让我发现了猫腻!不知道哪个无聊的人把这个系统的/etc/pam.d给重命名为pam.d_bak了!!我去你XXX,浪费我半天时间。 直接 mv pam.d_bak pam.d,然后就能够执行 echo 'root:newpassword'|chpasswd 来修改密码了。 这种奇葩的原因并不多见,所以出了问题不一定能在搜索引擎得到答案。 不过,我写这篇文章的时候,特意把pam.d再一次重命名,chpasswd还是报一样的错,但是passwd报错却变成了: passwd: Permission denied 罗里吧嗦说了半天,主要分享一下这个奇葩的案例和解决过程。当搜索引擎都找不到的时候,那么恭喜你成为了第一个吃螃蟹的人,有了造福互联网的机会,赶紧解决问题再分享吧。。。 目前我开发的帐号管理系统运行良好,后续有时间再整理分享一下,也许有人需要,敬请期待!
阅读全文
操作系统

Linux系统监控、诊断工具之top命令详解

暂时没有写作灵感,就整理一些Linux基础知识好了,方便自己查阅,同时也是温故而知新嘛~! 在张戈博客,同样很有用的知识性博文还有以下几篇,也许你也会比较感兴趣: 详解Linux系统的CPU负载均值 教你如何查看Linux的CPU负载 Linux服务器的进程查看命令详解 Llinux文件目录权限及chmod命令简析 Linux系统内存监控、性能诊断工具vmstat命令详解 Ps:更多相关博文,请访问系统运维 或 站内搜索,当然有其他Linux相关知识的需求也欢迎留言。 接触 linux 的人对于 top 命令可能不会陌生(不同系统名字可能不一样,如 IBM 的 aix 中叫 topas ),它的作用主要用来监控系统实时负载率、进程的资源占用率及其它各项系统状态属性是否正常。 下面我们先来看张 top 命令的截图: (1)系统、任务统计信息: 前 8 行是系统整体的统计信息。第 1 行是任务队列信息,同 uptime 命令的执行结果。其内容如下: 01:06:48 当前时间 up 1:22 系统运行时间,格式为时:分 1 user 当前登录用户数 load average: 0.06, 0.60,0.48 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。注意:这三个值可以用来判定系统是否负载过高——如果值持续大于系统 cpu 个数,就需要优化你的程序或者架构了。 (2)进程、 cpu 统计信息: 第 2~6 行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下: Tasks: 29 total 进程总数 1 running 正在运行的进程数 28 sleeping 睡眠的进程数 0 stopped 停止的进程数 0 zombie 僵尸进程数 Cpu(s): 0.3% us 用户空间占用CPU百分比 1.0% sy 内核空间占用CPU百分比 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比 98.7% id 空闲CPU百分比 0.0% wa 等待输入输出的CPU时间百分比 0.0% hi Hardware IRQ 即“中断请求”的意思。 0.0% si Software IRQ (3)最后两行为内存信息: Mem: 191272k total 物理内存总量 173656k...
阅读全文
Linux基础知识之文件隐藏属性 操作系统

Linux基础知识之文件隐藏属性

这几天温习下Linux基础知识,基础里面较为薄弱的知识点我会在这里记录一下,以便回头查看 Linux下的文件除了权限属性,还有一些隐藏属性,必须使用lsattr来显示,如下所示: 结果中第一列是13个短横杆,其中每一个横杆都是一个属性,如果当前位置上设置了该属性就会显示相对应的字符。 如果要设置文件的隐藏属性,需要使用chattr命令。这里介绍几个常用的隐藏属性,第一种是a属性。拥有这种属性的文件只能在尾部增加数据而不能被删除。个人觉得用于重要的日志类文件非常不错,即可以继续追加内容,又可以避免被恶意删除。 下面实例使用chattr来给该文件添加a属性并测试: 如上所示,设置了a属性的文件(夹),即便权限是777,即便是root用户都不能删除它,但是实际上可以以尾部新增(append)的方式继续像该文件中写入内容: 还有一种比较常见的属性是i属性。设置了这种属性的文件将无法写入、改名、删除,即使是root用户也不行。这种属性常用于设置在系统或者关键服务中的配置文件,这对提升系统安全性有很大帮助。 更多隐藏属性请使用man chattr查看。
阅读全文