一、进入救援模式
注意:进入救援模式前,强烈建议你对实例进行备份,以防止由于出现误操作等造成的影响。云硬盘可通过 创建快照 备份,本地系统盘可通过 创建自定义镜像 备份。
1. 登录 云服务器控制台。
2. 在实例管理页面中,根据实际使用的视图模式进行操作:
列表模式页签模式选择实例所在行右侧的更多 > 运维与检测 > 进入救援模式。如下:选择实例所在页签,并选择右上方的更多操作 > 运维与检测 > 进入救援模式。如下:
3. 在弹出的进入救援模式窗口中,设置救援模式期间登录实例的密码。如下:
注意:进入救援模式需要在关机状态下操作。如需关机请参见 关机实例 进行操作,避免强制关机可能导致的数据丢失或文件系统损坏,建议在主动关机后进行操作。
4. 单击进入救援模式。
此时可查看实例正在进入救援模式,当查看实例状态如下所示,则说明已成功进入救援模式,请参考下一步尽快修复实例。
二、使用救援模式进行系统修复
1. 使用 root 账户及 步骤3 中设置的密码,通过以下方式登录实例。
·若实例有公网 IP,则请参见 使用 SSH 登录 Linux 实例。
·若实例无公网 IP,则请参见 使用 VNC 登录 Linux 实例。
2. 登录成功后,逐步执行以下命令挂载系统盘根分区。
CentOSUbuntu救援模式下实例系统盘设备名为 vda,根分区为 vda1,默认未挂载。mkdir -p /mnt/vm1mount /dev/vda1 /mnt/vm1挂载成功后,你即可操作根分区中的数据。你也可使用 mount -o bind 命令,挂载原文件系统的一部分子目录,并通过 chroot 命令用来在指定的根目录下运行指令,具体操作命令如下:mount -o bind /dev /mnt/vm1/devmount -o bind /dev/pts /mnt/vm1/dev/ptsmount -o bind /proc /mnt/vm1/procmount -o bind /run /mnt/vm1/runmount -o bind /sys /mnt/vm1/syschroot /mnt/vm1 /bin/bash救援模式下实例系统盘设备名为 vda,根分区为 vda2,默认未挂载。mkdir -p /mnt/vm1mount /dev/vda2 /mnt/vm1挂载成功后,你即可操作根分区中的数据。你也可使用 mount -o bind 命令,挂载原文件系统的一部分子目录,并通过 chroot 命令用来在指定的根目录下运行指令,具体操作命令如下:mount -o bind /dev /mnt/vm1/devmount -o bind /dev/pts /mnt/vm1/dev/ptsmount -o bind /proc /mnt/vm1/procmount -o bind /run /mnt/vm1/runmount -o bind /sys /mnt/vm1/syschroot /mnt/vm1 /bin/bash
三、退出救援模式
1. 实例修复完成后,根据实际使用的视图模式通过以下步骤退出救援模式:
列表模式页签模式选择实例所在行右侧的更多 > 运维与检测 > 退出救援模式。如下:选择实例所在页签,并选择右上方的更多操作 > 运维与检测 > 退出救援模式。如下:
2. 实例退出救援模式后,会保持为进入救援模式之前的状态(例如:进入前为运行中,退出后仍为运行中)。
四、手动执行 fsck 修复文件系统
适用场景:根分区文件系统报错,修复文件系统报错需要先umount文件系统,然后执行fsck修复。
1. 通过lsblk命令来判断系统根分区。
2. 通过lsblk -f或者file -s命令查看根分区的文件系统类型。
3. 检查根分区文件系统错误,根据文件系统类型,调用相应的 fsck 程序,检查文件系统错误。
注意:检查文件系统错误时,需要确保分区处于未挂载状态,即执行findmnt 分区命令无输出。例如findmnt /dev/vda2无输出。
ext4xfs
e2fsck -n /dev/vda2 || echo FS_ERROR
五、Running Environment
Operating System: Ubuntu 24.04.2 LTS / x86_64Runtime Version: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
xfs_repair -n /dev/vda2 || echo FS_ERROR
六、Running Environment
Operating System: Ubuntu 24.04.2 LTS / x86_64Runtime Version: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
4. 修复根分区文件系统错误。如果前面检查到有文件系统错误,可以调用 fsck 程序修复错误。
注意:修复文件系统错误时,需要确保分区处于未挂载状态,即执行findmnt 分区命令无输出。例如findmnt /dev/vda2无输出。
ext4xfs
e2fsck /dev/vda2 && echo "done" || echo "failed"
七、Running Environment
Operating System: Ubuntu 24.04.2 LTS / x86_64Runtime Version: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
xfs_repair /dev/vda2 && echo "done" || echo "failed"
八、Running Environment
Operating System: Ubuntu 24.04.2 LTS / x86_64Runtime Version: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
九、修改 /etc/fstab
适用场景:系统/etc/fstab中有不存在的项,导致无法开机。重启机器,在 VNC 能看到类似Job dev-disk-by\\x2d-uuid-xxxxxxxxx.device/start running的日志持续较长时间。
1. 通过lsblk命令来判断系统根分区。
注意:这里根据分区大小判断系统根分区是/dev/vda2,也有根分区是/dev/vda1的情况。
2. 挂载上一步获取系统根分区到/mnt。
mount /dev/vda2 /mnt
3. 修改 fstab。可以对照blkid命令的输出与 fstab 中的项,注释其中 fstab 不存在的项。
# 进入救援模式后,/etc/fstab是救援模式系统的fstab。# 子机vda盘根分区挂载到了/mnt,所以/mnt/etc/fstab是子机系统盘的fstab。vim /mnt/etc/fstab# fstab文件每列含义:# <device> <dir> <type> <options> <dump> <fsck>
| fstab 列 | 描述 |
| <device> | 表示要挂载的设备。 |
| <dir> | 表示要挂载到的目录,dir=/ 的项就是系统的根分区。 |
| <type> | 表示文件系统类型。 |
| <options> | 表示挂载选项。 |
| <dump> | dump(8) 工具相关,一般是 0,表示禁用 dump。 |
| <fsck> | 用于设置开机时 fsck 检查的顺序,根分区需要设置为 1,其他分区可以设置为 2,也可以设置为 0(0 表示禁用 fsck 检查)。 |