准备工作:未雨绸缪
在动手修复之前,充足的准备工作是成功的关键,这不仅能确保修复过程顺畅,还能避免二次损害。
所需工具与材料:
- 一个可用的U盘: 容量建议至少8GB,确保U盘内无重要数据,因为制作过程会将其完全格式化。
- CentOS ISO镜像文件: 最好是与待修复系统版本一致的ISO镜像文件(系统是CentOS 7,就使用CentOS 7的ISO),可以从CentOS官方镜像站下载,推荐使用
DVD ISO
或Everything ISO
,因为它们包含了救援模式所需的完整工具集。 - 一台正常工作的Linux或Windows电脑: 用于制作救援U盘。
制作救援U盘的核心方法:
在Linux环境下,使用dd
命令是最为可靠和通用的方法,它能以低级别方式将ISO镜像完整写入U盘,确保引导信息的正确性。
# 1. 插入U盘,并识别其设备名 sudo lsblk # 假设U盘被识别为 /dev/sdb (请务必确认,切勿选错!) # 2. 卸载U盘所有分区 (如果已自动挂载) sudo umount /dev/sdb* # 3. 使用dd命令写入ISO镜像 # if= 后面是ISO文件路径 # of= 后面是U盘设备名 # bs=4M 是块大小,可以提高写入速度 # status=progress 可以显示写入进度 sudo dd if=/path/to/your/CentOS-x86_64-DVD.iso of=/dev/sdb bs=4M status=progress oflag=sync # 4. 等待命令执行完成,U盘即制作完毕
警告: dd
命令具有破坏性,请务必仔细核对of=
参数后的设备名,一旦选错(例如选成了系统硬盘),将导致该盘数据永久丢失。
进入救援模式
制作好救援U盘后,下一步就是引导故障服务器进入救援模式。
- 关闭故障服务器,将制作好的CentOS救援U盘插入服务器的USB端口。
- 开机并进入BIOS/UEFI设置界面,通常在开机自检时按
Del
、F2
、F10
或F12
键(具体按键因主板品牌而异)。 - 在BIOS/UEFI设置中,将启动顺序(Boot Order)设置为U盘优先,保存设置并退出,服务器将从U盘重启。
- 启动后,屏幕上会出现CentOS的安装引导菜单,使用方向键选择 “Troubleshooting”,然后按回车。
- 在接下来的菜单中,选择 “Rescue a CentOS Linux system” 并按回车。
- 系统会加载救援环境,随后进入语言和键盘选择界面,通常直接按默认选择即可。
- 最关键的一步:系统会提示是否挂载原系统,选择 “1) Continue”,救援程序会尝试查找并挂载你的CentOS根分区到
/mnt/sysimage
目录,如果挂载成功,你会看到提示信息,并且命令行提示符会变为类似sh-4.2#
的形式。
核心修复场景实战
进入救援环境后,你就可以像医生一样对系统进行“手术”了,以下是三种最常见的修复场景。
修复GRUB2引导程序
系统无法启动,屏幕上可能显示grub>
提示符或“no bootable device”错误,这通常是GRUB引导记录损坏或配置文件丢失。
- 进入原系统环境(Chroot): 为了执行修复命令,我们需要将操作环境切换到原系统的根目录。
sh-4.2# chroot /mnt/sysimage
- 重新安装GRUB2到主引导记录(MBR)或GPT:
# 假设系统硬盘是 /dev/sda bash-4.2# grub2-install /dev/sda
- 重新生成GRUB2配置文件: 这一步会自动扫描系统中的内核和启动参数,创建新的
grub.cfg
。bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
- 完成修复后,依次退出chroot环境和重启:
bash-4.2# exit sh-4.2# reboot
检查并修复文件系统
系统在启动过程中卡在文件系统检查阶段,或提示/dev/sdaX: Superblock last mount time is in the future
等错误。
- 在救援模式下,根分区通常已经被挂载为只读模式,首先需要卸载它。
sh-4.2# umount /mnt/sysimage
- 使用
fsck
命令进行修复,假设需要修复的分区是/dev/sda2
。# -y 参数表示自动修复所有发现的问题,无需手动确认 sh-4.2# fsck -y /dev/sda2
- 修复完成后,重启系统,系统在启动时会自动进行一次完整的文件系统检查。
重置遗忘的root密码
忘记root密码是管理员常遇到的尴尬问题,救援模式可以轻松解决。
- 进入chroot环境:
sh-4.2# chroot /mnt/sysimage
- 使用passwd命令修改密码:
bash-4.2# passwd root
根据提示输入两次新密码即可。
- 处理SELinux上下文(重要!): 如果系统启用了SELinux(默认为Enforcing),直接修改密码文件可能导致重启后依然无法登录,需要创建一个文件,让系统在重启时自动重新标记SELinux上下文。
bash-4.2# touch /.autorelabel
- 退出并重启:
bash-4.2# exit sh-4.2# reboot
重启过程会比平时慢一些,因为系统正在对整个文件系统进行SELinux relabeling,完成后即可用新密码登录。
为了更直观地对比,下表小编总结了上述三种场景的核心操作:
修复场景 | 问题描述 | 核心命令(在chroot后或直接执行) |
---|---|---|
修复GRUB2引导 | 系统无法引导,出现grub提示或无引导设备 | grub2-install /dev/sda grub2-mkconfig -o /boot/grub2/grub.cfg |
修复文件系统 | 启动时文件系统检查失败,或提示文件系统错误 | umount /mnt/sysimage fsck -y /dev/sdaX |
重置root密码 | 忘记root用户密码,无法登录系统 | passwd root touch /.autorelabel |
收尾工作与重启
完成所有修复操作后,确保你已经:
- 退出了chroot环境(如果使用了)。
- 执行了
reboot
命令。 - 在服务器开始从硬盘重启时,及时拔掉U盘,以免再次进入救援模式。
通过以上步骤,绝大多数常见的CentOS启动故障都可以通过U盘救援模式得到有效解决,掌握这项技能,无疑为系统稳定运行增加了一道坚实的保障。
相关问答FAQs
Q1:在使用dd
命令制作U盘时,我如何百分之百确定U盘的设备名,避免误操作?
A1: 这是一个非常关键的问题,请遵循以下“双重确认”原则:
在插入U盘之前,先执行一次 lsblk
命令,记下当前系统中所有的磁盘和分区列表。插入U盘后,再次执行 lsblk
命令,新出现的设备就是你的U盘,U盘的容量较小,且分区类型(如FAT32
)与系统硬盘不同,这些都是重要的识别依据,插入前只有sda
,插入后多了一个sdb
,那么/dev/sdb
就是你的U盘,务必核对设备大小和分区信息,确认无误后再进行操作。
Q2:在救援模式下,如果系统提示“Failed to mount”或找不到原系统分区怎么办?
A2: 这通常意味着救援程序无法自动识别你的系统布局,可能是因为使用了LVM(逻辑卷管理)或RAID,此时需要手动挂载:
- 激活LVM(如果使用): 执行
lvm vgscan
来扫描卷组,然后执行lvm vgchange -ay
来激活所有找到的卷组。 - 手动查找和挂载: 再次使用
lsblk
或fdisk -l
查看分区,找到你的根分区(例如/dev/mapper/vg_centos-lv_root
或/dev/sda2
),然后手动创建挂载点并挂载:sh-4.2# mkdir /mnt/sysimage sh-4.2# mount /dev/your_root_partition /mnt/sysimage
如果你有单独的
/boot
分区(如/dev/sda1
),也需要手动挂载到/mnt/sysimage/boot
,完成手动挂载后,你就可以继续执行chroot /mnt/sysimage
等后续修复步骤了。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复