
1. 当Ubuntu无法启动时你该怎么做遇到Ubuntu系统无法正常启动的情况很多新手会感到手足无措。其实大多数启动问题都可以通过紧急救援模式来解决。我遇到过无数次类似情况从个人笔记本到服务器集群掌握这套排查方法真的能救命。最常见的症状是系统启动时卡住或者直接进入一个黑屏界面显示emergency mode字样。这种情况八成是文件系统出了问题。别慌这时候Grub就是我们的救命稻草。Grub全称是GRand Unified Bootloader它是Linux系统的守门人负责在开机时加载操作系统内核。提示在开始操作前建议先准备好一个Ubuntu安装U盘。万一救援模式也失效还能用Live CD模式抢救数据。2. 进入Grub救援模式的正确姿势2.1 唤醒Grub菜单大多数Ubuntu系统默认隐藏Grub菜单需要手动唤醒。这里有个小技巧在开机BIOS画面结束后立即长按Shift键传统BIOS或反复按Esc键UEFI。我实测过不下20台设备这个方法在90%的情况下都有效。如果没反应也别急可能是按键时机不对。多试几次在主板LOGO消失的瞬间按键最稳妥。成功的话你会看到一个蓝底白字的菜单这就是Grub的庐山真面目了。2.2 认识Grub选项Grub菜单通常包含这几个关键选项Ubuntu正常启动Advanced options for Ubuntu高级选项Memory test内存测试与我们无关我们要选的是Advanced options。这里有个坑不同Ubuntu版本菜单略有差异。在18.04上这个选项可能在第二页需要按方向键往下翻。我曾在凌晨三点因为这个细节折腾了半小时希望大家引以为戒。3. 深入救援模式核心操作3.1 选择正确的内核版本进入Advanced options后你会看到多个内核版本每个都对应一个普通版和一个恢复版(recovery mode)。这里有个重要原则选最新版本对应的恢复模式。比如列表中最上面的是Ubuntu, with Linux 5.15.0-76-generic (recovery mode)就选它。为什么强调最新版本因为旧内核可能缺少对新硬件的支持。上周我就遇到个案例用户选了旧版内核结果因为不识别NVMe SSD导致修复失败白白浪费两小时。3.2 救援模式菜单详解成功进入恢复模式后会出现一个包含多个选项的菜单fsck文件系统检查与修复重点clean尝试清理磁盘空间dpkg修复损坏的软件包grub更新Grub引导加载程序network启用网络连接root进入root shell我们最关心的是fsck但别急着选它。建议先选root进入命令行执行以下命令确保文件系统可写mount -o remount,rw /这个命令我称之为救援模式万能钥匙它能解除只读挂载让后续操作顺利进行。记得有一次我跳过这步直接fsck结果所有修复都无法保存不得不从头再来。4. 使用fsck修复文件系统4.1 确认问题分区执行df -h查看已挂载分区但更关键的是lsblk -f它能显示所有磁盘分区的文件系统类型。常见问题分区是根目录(/)和/boot在输出中通常对应/dev/sda1、/dev/sda2等。这里有个血泪教训一定要确认分区号有次我把sda1和sdb1搞混结果修复了错误磁盘差点酿成数据灾难。稳妥的做法是先用blkid核对分区UUID是否匹配/etc/fstab中的记录。4.2 fsck命令实战最安全的修复命令是fsck -y /dev/sda1这个-y参数表示自动回答yes到所有问题避免修复过程中卡住。但如果你不确定问题严重程度可以先不加-y手动确认每个修复项fsck /dev/sda1我曾遇到过fsck运行时间超过3小时的情况别担心耐心等待。期间它会输出大量信息重点关注这几类Inode X has imagic flag set索引节点异常Unexpected inconsistency严重结构错误Free blocks count wrong空间计数错误4.3 高级修复技巧如果标准fsck无效可能需要使用备用超级块。先用mkfs.ext4 -n /dev/sda1查看备用超级块位置然后fsck -b 32768 /dev/sda1这个32768就是查到的备用超级块位置。去年我处理过一块频繁掉电损坏的硬盘原始超级块完全损坏靠这个方法才救回数据。修复完成后务必执行sync确保所有写入落地然后reboot重启。如果问题依旧可能需要考虑更复杂的方案比如从Live CD运行fsck或者检查硬盘SMART状态。5. 常见问题与避坑指南5.1 修复后无法进入图形界面这种情况我遇到过不下十次多半是因为显卡驱动或显示管理器损坏。可以先在Grub菜单的Linux启动行末尾添加nomodeset参数临时进入系统然后重装显卡驱动ubuntu-drivers autoinstall5.2 密码错误无法进入救援模式如果提示root密码错误但你又没设置过试试直接回车。Ubuntu默认不设root密码用sudo权限即可。实在不行可以在Grub启动参数中添加init/bin/bash进入单用户模式。5.3 文件系统只读无法修改除了前面提到的remount命令有时还需要检查磁盘错误计数tune2fs -l /dev/sda1 | grep -i count如果错误计数过高系统会强制只读。可以用tune2fs -c 0 -i 0 /dev/sda1重置计数器。6. 预防胜于治疗日常维护建议与其等系统崩溃再抢救不如平时做好预防。我给自己管理的每台服务器都设置了定期fsck检查tune2fs -c 100 /dev/sda1这个命令表示每100次挂载后自动检查。对于关键服务器我还会每月手动执行一次fsck -nf /dev/sda1-n参数表示只检查不修复相当于给文件系统做体检。另外养成定期备份的好习惯。我习惯用rsync做增量备份命令很简单rsync -avz --delete /重要数据 /备份目录/这个习惯曾多次救我于水火特别是遇到物理磁盘损坏时数据恢复的成本和成功率远不如备份来得可靠。