如果您的 Linux 虚拟机因任何原因而无法访问,您可以尝试按照以下步骤修复虚拟机。
所需的角色
如需获得修复虚拟机所需的权限,请让管理员向您授予项目的以下 IAM 角色:
-
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) -
使用服务账号的虚拟机:
服务账号用户 (
roles/iam.serviceAccountUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含修复虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
修复虚拟机需要以下权限:
- 项目的
compute.instances.create
权限 - 项目的
compute.disks.create
权限 - 项目的
compute.instances.get
权限 - 磁盘的
compute.disks.createSnapshot
权限 - 新虚拟机的
compute.instances.attachDisk
权限 - 磁盘的
compute.disks.use
权限 - 无法访问的新虚拟机的
compute.instances.start
权限 - 无法访问的新虚拟机的
compute.instances.stop
权限
修复虚拟机
如果您无法连接到虚拟机,或者启动磁盘已满,则必须创建临时虚拟机来修复无法访问的虚拟机。
- (可选)停止无法访问的虚拟机。
- 通过无法访问的虚拟机的启动磁盘创建快照。
- 使用最接近无法访问虚拟机操作系统的公共映像创建临时虚拟机。
- 检查您是否能够使用 SSH 连接到临时虚拟机。
按照以下步骤将额外磁盘添加到临时虚拟机:
在 Google Cloud 控制台中,前往虚拟机实例页面。
点击您创建的临时虚拟机名称。
点击
修改。在额外磁盘下,点击
添加新磁盘,然后执行以下操作:- 添加磁盘名称,例如 my-recovery-disk
- 对于来源类型,选择快照标签页。
- 在来源快照下拉菜单中,选择您之前在以下步骤中创建的来源虚拟机的快照。
- 点击完成。
点击保存。
使用 SSH 连接到临时虚拟机。
执行以下命令:
ls -l /dev/disk/by-id/google-*
输出将如下所示:
/dev/disk/by-id/google-my-vm -> ../../sda /dev/disk/by-id/google-my-vm-part1 -> ../../sda1 /dev/disk/by-id/google-my-vm-part14 -> ../../sda14 /dev/disk/by-id/google-my-vm-part15 -> ../../sda15 /dev/disk/by-id/google-my-recovery-disk -> ../../sdb /dev/disk/by-id/google-my-recovery-disk-part1 -> ../../sdb1 /dev/disk/by-id/google-my-recovery-disk-part2 -> ../../sdb2 /dev/disk/by-id/google-my-recovery-disk-part5 -> ../../sdb5
使用符号链接 (
/dev/disk/by-id/google-my-recovery-disk-partN
) 查找新添加磁盘的底层设备和分区,例如/dev/sdb1
。磁盘的符号链接是 google-DISK_NAME,或者如果为磁盘指定了自定义设备名称,则为 google-DEVICE_NAME,请记下新磁盘符号链接指向的设备名称。
在
/mnt/newdisk
处创建装载点:sudo mkdir /mnt/newdisk
将额外的磁盘分区装载到装载点
/mnt/newdisk
:sudo mount -o discard,defaults DISK_NAME /mnt/newdisk
将 DISK_NAME 替换为您在上述步骤中记下的设备名称,例如
/dev/sdb1
。如果您看到错误
Filesystem has duplicate UUID XXXXXX - can't mount
、mount: /mnt/newdisk: wrong fs type, bad option
或bad superblock on /dev/sdb
,请使用以下命令:sudo mount -o nouuid DISK_NAME /mnt/newdisk
无法访问的虚拟机的文件系统现已装载在
/mnt/newdisk
。您可以导航文件系统、更改配置文件、解决问题或检索数据。
还原更改并重新启动无法访问的虚拟机
解决问题或检索数据后,您需要恢复实际虚拟机。按照以下步骤恢复原始虚拟机:
卸载临时虚拟机中安装在
/mnt/newdisk
上的其他磁盘:cd ~ sudo umount /mnt/newdisk
在 Google Cloud 控制台中,前往虚拟机实例页面。
选择您创建的临时虚拟机。
点击
修改。在额外磁盘下,点击之前步骤中所创建磁盘的
,以将额外磁盘与临时虚拟机分离。点击保存。
转到 Google Cloud 控制台中的虚拟机实例页面。
现在,您应该可以使用 SSH 连接到虚拟机。