关键时刻,服务器因磁盘写满而没法动工,这是每个Linux系统管理员都有可能碰到的实战类故障linux磁盘写满启动,这既意味着服务出现中断,又对管理员在高压状况下的问题诊断以及恢复能力进行考验,本文会对这一问题的根源、排查途径以及好多解决方案展开系统性剖析,帮你从满是红屏报错里迅速拿回系统的控制权 。

磁盘写满为什么会导致Linux无法启动

Linux系统于启动进程里,得朝着磁盘写入临时文件,写入日志,写入状态信息。当根分区或者关键系统分区被全然占满之际,这些写入操作会归于失败。常出现之现象是,系统于启动进程中卡住,或者启动之后没法进入图形界面,甚而到多用户模式,仅展示只读文件系统,或者展示“No space left on device”等错误信息。这恰似一条全然堵死之路,所有依赖此路的进程都会被阻断。

linux磁盘写满启动_linux磁盘inode满了_linux磁盘已满

除启动日志外 ,包括systemd -- journald在内的系统服务 ,在初始化之际 ,也需磁盘空间用以记录状态 。假使/var/log分区被填满 ,关键服务有可能启动失败 ,从而导致依赖链中断 。另外 ,满盘还兴许引发文件系统损毁 ,特别是在非正常关机情形下 。所以 ,这并非单纯空间问题 ,更有可能演变成数据完整性问题 ,务必要谨慎处置 。

如何紧急进入系统进行故障排查

在系统因磁盘空间已满致使不能够正常启动时,首先得尝试着进入救援模式或者单用户模式 。于GRUB引导菜单当中选择内核之际,借由编辑启动参数,在kernal这个词的末尾添加单个的值或者特定语句进而来尝试进入最小化的环境了。要是连单用户模式都没办法进入的话,就必然需凭借外部的rescue介质诸如此类的来启动计算机了 。

linux磁盘inode满了_linux磁盘写满启动_linux磁盘已满

经救援环境开启之后,最主要的任务是挂载原本系统的根分区,你得运用fdisk -l或者lsblk命令去辨识原本系统的磁盘分区,接着把它挂载到救援系统的某一个目录之下,就像mount /dev/sda2 /mnt/sysroot这样,随后运用chroot /mnt/sysroot切换至原本系统环境,如此才能够执行后续的清理以及修复命令,恰似直接对原本系统进行操作那般。

查找并清理占用空间最大的文件和目录

当进入系统之后linux操作系统版本,马上运用磁盘分析工具去把那罪魁祸首给定位出来。df -h这个命令能够去确认到底是哪一个分区达到了100%的使用率。紧接着呢,运用du -sh /* | sort -rh | head -10这个命令,快速地找寻出在根目录之下占用空间最大的前十个项目。这个命令能够帮自己迅速定位到出现异常增长的目录,比如说是不是/var这个目录,又或者是/home这个目录,再或者是/tmp这个目录。

linux磁盘inode满了_linux磁盘已满_linux磁盘写满启动

平常所见到的那种被称作“磁盘杀手”状况呈现的缘由涵盖了没有进行轮转操作的应用进程日志日志文件的存放位置比如像/var/log目录下所包含的那些文件、留存下来的软件包之中的缓存文件相应的缓存文件所在位置为/var/cache/apt/或者是/var/cache/yum、由用户所制造产生下的临时性文件或者是核心转储文件。针对于日志文件而言,可以运用truncate命令来实现清空的操作举例说明像是以truncate -s 0 /var/log/syslog这样的指令来达成清空,并不是直接去删除,目的在于防止正在向该文件写入数据的进程出现错误状况。当作缓存的话,能够安全地运用apt clean或者以yum clean all来予以清理 。

如何处理被删除但仍被进程占用的文件

有时候,你能够察觉到df呈现出磁盘已满的状况,然而du所统计的目录总容量,却远远小于磁盘的使用量。一般而言,这就表明存在文件已经被删除了,可是其空间依旧被某个尚在运行的进程所占用着,从而致使空间没办法得到释放。在这般情形下,要运用lsof | grep deleted命令去寻觅这些已经被标记为删除,可是却并未释放的文件句柄。

在寻觅到对应的进程以及文件描述符之后linux,你存有两个可供选择的办法:其一乃是重启持有此文件句柄的进程,这属于最为直接的方式;其二要是进程无法进行重启,那么能够尝试朝着该进程发送信号,促使其再度打开日志文件(就像针对syslogd进程运用kill -HUP那样)。更为彻底的举措则是直接终止该进程,然而这极有可能对正在运行的服务造成影响,需依据业务的重要程度予以权衡。

linux磁盘inode满了_linux磁盘写满启动_linux磁盘已满

如何有效防止磁盘再次被写满

故障恢复完毕之后,要把建立起妥善预防坏情况发生的整体机制这件事放在特别关键重要的位置上。首先呢,实现日志轮转也就是logrotate这样的操作处理方式,以此来做到保证用于记录各类事件等信息的日志文件不会一直永无止境地不断持续增长下去。要对位于/etc/logrotate.conf这个路径下的配置文件以及其位于/etc/lograte.d/这个路径下的配置文件进行合乎情理恰当合理的配置安排,去设定好比较合适适宜的保存保留的周期以及文件的大小规格。其次,设置磁盘使用率监控告警,针对关键分区,像//var/home这些,能够借助Zabbix、Prometheus等工具达成,或者通过简单的cron脚本,配合df命令以及邮件发送来予以实现。

于系统部署之初期,便应当采用合理的分区方案,去为日志、数据以及应用程序分配独立且容量充足的分区。运用LVM(逻辑卷管理器)能够在未来灵活地在线扩展分区容量。定期清理临时目录以及软件包缓存也应当被纳入例行维护任务,这些举措可以将磁盘写满的风险降到最低限度。

磁盘写满导致文件系统损坏如何修复

linux磁盘已满_linux磁盘inode满了_linux磁盘写满启动

在处于极端状况下时,磁盘写满这番情况有可能致使文件系统产生错误,比如说系统报告呈现出 “Read -- only file system” 这种情况。在这个时候,就算已经清理了空间,系统依旧存在可能无法正常运行的状况。修复的首个步骤是试着去卸载存在问题的分区,然而根分区一般情形下是没办法卸载的。在这个时候就需要再度进入救援模式,在分区处于未挂载的状态之下,运用 fsck 命令去进行检查以及修复,就像 fsck -y /dev/sda1 这样。

“fsck”命令会试着去修复索引节点(inode)错误状况、数据块错误情形等。那些修复过程存在风险,有可能致使数据丢失,因而在实施操作之前,要是条件许可的话linux磁盘写满启动,应当尽可能对于重要数据开展备份工作。修复完成以后,重新挂载分区并且检查数据完整性情况。为了防止此类损坏现象发生,除了要保证拥有足够空间以外,还得确保系统正常地关机,防止在满盘状态下强行断电 。

上述这些步骤,从开展紧急救援开始,接着进行根因排查,而后到预防修复,形成了处理Linux磁盘写满启动故障的完整闭环。你于实际工作里,最常碰到的是因哪种缘由致使的磁盘写满呢?是某一个失控的日志文件,还是一个被遗忘的测试进程呢?欢迎于 评论区分享你的经历以及高效排查技巧,要是觉得本文有帮助,也请点赞并分享给更多有可能遇到此问题的同行。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复