1. 当Ubuntu 18.04磁盘爆满时会发生什么前几天我的开发机突然黑屏罢工开机后直接卡在GRUB界面。检查日志才发现是磁盘空间被占满导致系统无法启动。这种情况在长期运行的Ubuntu服务器上特别常见——日志文件不断堆积、临时文件无人清理、软件包缓存越积越多直到某天突然撑爆硬盘。爆盘后的典型症状包括系统启动时卡在GRUB界面登录后立即闪退到登录界面图形界面无法加载只能看到黑屏终端命令报错No space left on device我统计过身边运维同事的案例80%的Ubuntu系统崩溃都源于磁盘空间不足。特别是Ubuntu 18.04这个LTS版本默认安装时根分区往往只分配20-30GB对开发环境来说根本不够用。有一次我客户的服务器因为日志轮转配置错误/var/log下一个日志文件就吃掉了40GB空间。提示定期运行df -h检查磁盘使用率当使用超过90%时就该清理了2. 常规命令行清理方法2.1 通过CtrlAltF1进入终端当系统还能勉强运行时最快的方法是切换到TTY终端按CtrlAltF1切换到第一个虚拟终端F1-F6对应不同终端输入用户名密码登录立即运行以下命令查看空间占用df -h | sort -h -k5这个组合命令会按使用率排序显示所有挂载点。我常用它快速定位问题分区。2.2 针对性清理大文件找到爆满的分区后用ncdu工具可视化分析sudo apt install ncdu -y ncdu / # 扫描根目录这个工具比du更直观能交互式浏览目录大小。有次我发现/var/lib/docker占了22GB原来是旧容器没清理。常用清理目标包括/var/log- 日志文件/var/cache/apt/archives- 软件包缓存~/.cache- 用户缓存/tmp- 临时文件2.3 自动化清理工具配置logrotate自动管理日志sudo vim /etc/logrotate.conf增加以下配置/var/log/*.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 root adm }3. 使用Recovery Mode释放空间3.1 进入Recovery Mode的方法当常规终端无法进入时开机时按住Shift键调出GRUB菜单选择Advanced options for Ubuntu选择带有(recovery mode)的内核版本3.2 Recovery Menu实用功能菜单中几个关键选项clean自动尝试释放空间效果有限fsck检查并修复文件系统错误root获取root shell进行手动清理我更喜欢直接选root然后运行journalctl --vacuum-size200M # 清理journal日志 apt-get autoremove --purge # 删除无用软件包 rm -rf /var/log/*.gz # 删除压缩日志3.3 常见问题解决有时会遇到只读文件系统错误需要先重新挂载mount -o remount,rw /4. 终极方案单用户模式4.1 进入单用户模式的步骤当其他方法都失效时在GRUB界面按e编辑启动项找到以linux开头的行将ro recovery nomodeset改为rw single init/bin/bash按CtrlX启动4.2 必须掌握的救援命令进入单用户模式后# 重新挂载根目录 mount -o remount,rw / # 检查磁盘空间 df -h # 查找大文件 find / -type f -size 100M -exec ls -lh {} \; # 删除docker残留数据 rm -rf /var/lib/docker/overlay2/*4.3 真实案例分享上周我遇到一个典型场景/boot分区被旧内核占满。解决方法# 查看已安装内核 dpkg --list | grep linux-image # 删除旧内核保留当前和上一个版本 sudo apt purge linux-image-5.4.0-XX-generic5. 预防胜于治疗设置磁盘空间监控脚本/usr/local/bin/disk_check.sh#!/bin/bash THRESHOLD90 CURRENT$(df / | grep / | awk { print $5} | sed s/%//g) if [ $CURRENT -gt $THRESHOLD ]; then echo WARNING: 磁盘使用率 $CURRENT% | mail -s 磁盘警报 adminexample.com fi添加到cron每天检查sudo chmod x /usr/local/bin/disk_check.sh sudo crontab -e # 添加 0 9 * * * /usr/local/bin/disk_check.sh这些方法都是我多年运维Ubuntu服务器的经验总结。刚开始遇到磁盘爆满时总是手忙脚乱现在有了这套系统化的应对方案再也没因为空间问题丢过数据。关键是要养成定期检查的习惯毕竟在数据爆炸的时代再大的硬盘也经不起随意挥霍。