Linux救援模式之应用篇
挂载并访问文件系统
1. 首先识别分区
fdisk -l # 查看所有磁盘和分区
lsblk # 以树状结构查看块设备
blkid # 查看分区的UUID和文件系统类型
2. 创建挂载点并挂载分区
mkdir /mnt/rescue # 创建挂载点# 挂载根分区(根据你实际的根分区设备)
mount /dev/sda1 /mnt/rescue
# 示例,sda1替换为根分区# 如果需要,挂载其他重要分区
mount /dev/sda2 /mnt/rescue/boot
# 挂载/boot分区
mount /dev/sda3 /mnt/rescue/home
# 挂载/home分区
3. 挂载必要的虚拟文件系统(如果要chroot)
mount --bind /dev /mnt/rescue/dev
mount --bind /proc /mnt/rescue/proc
mount --bind /sys /mnt/rescue/sys
4. 访问文件
现在你可以:
直接浏览挂载点下的文件:
ls /mnt/rescue/home/yourusername
或者切换到原系统环境(chroot):
chroot /mnt/rescue
其他情况的处理方式
如果使用Live CD/USB进入救援模式
步骤基本相同,但可能需要先安装工具:
apt-get update && apt-get install e2fsprogs # Debian/Ubuntu
yum install e2fsprogs # RHEL/CentOS
对于LVM分区
vgscan # 扫描卷组
vgchange -ay # 激活卷组
lvdisplay # 显示逻辑卷
mount /dev/mapper/vgname-lvname /mnt/rescue
对于加密分区(LUKS)
cryptsetup luksOpen /dev/sdaX secret
# 然后挂载解密后的设备(通常是/dev/mapper/secret)
mount /dev/mapper/secret /mnt/rescue
注意事项
- 挂载时最好使用只读模式先检查:
mount -o ro /dev/sda1 /mnt/rescue
- 如果文件系统损坏,先修复再挂载:
fsck /dev/sda1
- 操作完成后记得卸载:
umount -R /mnt/rescue
检查与修复文件系统
检查文件系统
对于ext2/ext3/ext4文件系统
# 首先卸载文件系统(如果已挂载)
umount /dev/sdXN# 检查文件系统错误
fsck -y /dev/sdXN
# 其中sdXN是分区标识,如sda1
对于XFS文件系统
xfs_repair /dev/sdXN
对于Btrfs文件系统
btrfs check --repair /dev/sdXN
修复文件系统
超级块损坏(ext文件系统):
# 查找备份超级块
mke2fs -n /dev/sdXN
# 使用备份超级块修复
fsck -b 32768 /dev/sdXN
日志文件损坏:
# 清除日志(ext文件系统)
tune2fs -j /dev/sdXN
强制检查:
fsck -f /dev/sdXN
修复后操作
-
重新挂载文件系统检查修复结果
-
如果有必要,更新initramfs:
mount /dev/sdXN /mnt
chroot /mnt
update-initramfs -u
- 重启系统验证修复效果
注意事项
-
修复前尽量先备份重要数据
-
如果根文件系统损坏,可能需要使用live CD/USB
-
某些严重损坏可能需要从备份恢复
-
对于SSD,频繁运行fsck可能影响寿命
修复GRUB引导
1. 进入救援模式
2. 挂载根分区
找到根分区(通常是 /dev/sda1 或 /dev/nvme0n1p2,具体取决于磁盘类型和分区方案):
fdisk -l
挂载根分区到 /mnt:
mount /dev/sdXn /mnt
(将 sdXn 替换为根分区,如 /dev/sda2)
挂载必要的虚拟文件系统(如果系统是UEFI启动,还需挂载EFI分区):
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
对于EFI分区(通常是 /dev/sda1):
mount /dev/sdX1 /mnt/boot/efi
3. Chroot 到原系统
切换根目录到原系统环境:
chroot /mnt
4. 重新安装GRUB
BIOS模式:
grub-install /dev/sdX
(sdX 是磁盘设备,如 /dev/sda,不带分区号)
UEFI模式:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
5. 更新GRUB配置
update-grub
或:
grub-mkconfig -o /boot/grub/grub.cfg
6. 退出并重启
退出chroot环境:
exit
卸载所有挂载的分区:
umount -R /mnt
重启系统:
reboot
常见问题解决
- 如果GRUB安装失败:
- 检查是否挂载了正确的分区(尤其是 /boot 或 /boot/efi)。
- 确保磁盘设备名称正确(如 /dev/sda 而非 /dev/sda1)。
- 双系统用户:
- 如果Windows覆盖了GRUB,可能需要重复上述步骤重新安装GRUB。
重置root密码
1. 进入救援模式
重启系统,在 GRUB 启动菜单界面(若未显示,启动时按住 Shift 或 Esc)。
选择默认内核项,按 e 进入编辑模式。
找到以 linux 或 linux16 开头的行,在行尾添加:
rw init=/bin/bash
对于部分系统(如 CentOS 7),可能需要替换为 rw init=/sysroot/bin/sh。
按 Ctrl+X 或 F10 启动到单用户模式(救援环境)。
2. 挂载文件系统(如需)
如果直接进入 bash 提示符(如 Ubuntu),可跳过此步。
对于需要 chroot 的系统(如 CentOS/RHEL):
mount -o remount,rw / # 确保根文件系统可写
chroot /sysroot # 切换到原系统环境
3. 重置密码
执行以下命令重置 root 密码:
passwd root
输入两次新密码。
4. 处理 SELinux(仅限启用 SELinux 的系统)
如果系统使用 SELinux(如 CentOS/RHEL),需更新文件系统标签:
touch /.autorelabel # 下次启动时重新标记 SELinux 上下文
5. 重启系统
exec /sbin/init # 或直接 reboot
或按 Ctrl+Alt+Del,或执行:
sync; reboot -f
注意事项
-
物理访问权限:需直接操作服务器或虚拟机控制台。
-
云服务器:部分云平台(如 AWS、阿里云)需通过控制台使用自定义镜像或用户数据脚本重置密码。
-
文件系统加密:若 /etc 加密(如 LUKS),需先解密。
替代方案(已知 root 分区)
如果无法通过 GRUB 编辑,可使用 Live CD/USB 启动后挂载根分区:
mkdir /mnt/root
mount /dev/sdXn /mnt/root # sdXn 为根分区(如 /dev/sda1)
chroot /mnt/root
passwd root
通过以上步骤,可强制重置 root 密码。确保操作后系统安全性,避免未授权访问。