本指南简要介绍了如何在Linux中使用Virt-rescue命令行实用程序来拯救虚拟机。Virt-rescue就像一张救援光盘,但只针对虚拟机。它提供了一个简单的救援shell和一些恢复工具来检查和纠正虚拟机或磁盘镜像中的问题。
请注意,Virt-rescue与Guestfish不同。Guestfish是一个用于编辑和修改虚拟机和磁盘镜像的交互式shell。相比之下,Virt-rescue特别适用于拯救无法启动的虚拟机。如果一个虚拟机无法启动,你可以简单地使用virt-rescue在虚拟机或磁盘镜像上启动一个救援shell,并尝试使用标准的Linux命令来修复它。
您可以在任何磁盘镜像文件或设备上使用virt-rescue,而不仅仅是虚拟机。例如,它可以在USB驱动器、SD卡和硬盘上使用。它不需要root权限,除非你需要root权限才能打开磁盘镜像。Virt-rescue是libguestfs的一部分,libguestfs提供了很多命令行工具来访问和修改虚拟机磁盘镜像。
首先,确保虚拟机已关闭。您不得在任何实时虚拟机或磁盘镜像上运行 rescue shell。
要在有问题的虚拟机上运行rescue shell,请执行以下操作:
$ virt-rescue -d centos8-uefi -i
用您的虚拟机名称替换“centos8-uefi”。您可以使用“ virsh list --all”命令找到可用虚拟机的列表。
您还可以直接在任何磁盘镜像上运行rescue shell,如下所示:
$ virt-rescue -a CentOS_8_Server.img -i
在这里,-i(-inspector)标志用于自动挂载虚拟机的文件系统。如果不使用它,则必须在名为/ sysroot的空目录中手动安装虚拟机的文件系统。
现在,您将进入一个交互式bash shell中,可以在其中使用许多普通的Linux命令来拯救虚拟机。
从rescue shell中,您可以开始使用普通的Linux命令来修复VM。
如上所述,客户机的文件系统安装在/sysroot目录中。
您可以使用“ls”命令进行验证:
><rescue> ls /sysroot/
首先将chroot进入/ sysroot目录:
><rescue> chroot /sysroot
要从rescue shell退出,请键入exit并按Enter或按Ctrl + d。
以只读模式启动VM
您不应在任何活动的VM上运行rescue shell。但是,如果出于任何原因仍然要执行此操作,请使用--ro选项在活动磁盘映像或VM上安全地使用“ virt-rescue”。
$ virt-rescue -d centos8-uefi -i --ro
或者
$ virt-rescue -a CentOS_8_Server.img -i --ro
--ro选项将以只读模式启动VM或磁盘映像。它是试验VM或磁盘映像的理想选择。实际不会保存任何更改。从rescue shell后,所有更改都将丢失!
为VM启用网络访问
如果要将文件或软件包下载到虚拟机,则可以在运行virt-rescue命令时使用--network选项:
$ virt-rescue -d centos8-uefi -i --network
或者
$ virt-rescue -a CentOS_8_Server.img -i --network
此选项启用了rescue shell的网络访问,因此您可以从Internet下载内容。
Virt-rescue有很多选择。有关更多详细信息,请参见手册页:
$ man virt-rescue