如何使用Virt-rescue来营救虚拟机
本简要教程介绍了如何在Linux中使用Virt-rescue命令行实用程序来抢救虚拟机。
抢救虚拟磁盘就像抢救CD一样,但仅适用于虚拟机。
它提供了一个简单的应急shell和一些恢复工具,可以检查和纠正虚拟机或者磁盘镜像中的问题。
请注意,Virt-rescue与guestfish不同。
Guestfish是用于编辑和更改虚拟机和磁盘镜像的交互式shell。
相反,Virt-rescue特别适合于拯救启动失败的虚拟机。
如果虚拟机无法启动,则可以使用virt-rescue在虚拟机或者磁盘镜像上启动应急shell,然后尝试使用标准Linux命令对其进行修复。
我们可以在任何磁盘镜像文件或者设备上使用virt-rescue,而不仅仅是虚拟机。
例如,它可以在U盘,SD卡和硬盘上使用。
除非需要root才能打开磁盘镜像,否则不需要root权限。
Virt-rescue是libguestfs的一部分,它提供了许多命令行实用程序来访问和修改虚拟机磁盘镜像。
使用virt-rescue抢救虚拟机
确保虚拟机已关闭。
我们不得在任何活动的虚拟机或者磁盘镜像上运行救援shell。
要在有问题的虚拟机上运行应急shell,请执行以下操作:
$virt-rescue -d centos8-uefi -i
用虚拟机名称替换“ centos8-uefi”。
我们可以使用“ virsh list --all”命令找到可用VM的列表。
我们还可以在任何磁盘镜像上直接运行应急shell,如下所示:
$virt-rescue -a CentOS_8_Server.img -i
在此,-i(-inspector)标志用于自动挂载虚拟机的文件系统。
如果不使用它,则必须手动将虚拟机的文件系统挂载在名为/sysroot的空目录中。
现在,我们将进入一个交互式bash shell,可以其中使用许多普通的Linux命令来拯救虚拟机。
[...] Welcome to virt-rescue, the libguestfs rescue shell. Note: The contents of/(root) are the rescue appliance. Use 'cd /sysroot' or 'chroot /sysroot' to see guest filesystems. groups: cannot find name for group ID 0 ><rescue> The virt-rescue escape key is ‘^]’. Type ‘^] h’ for help.
从应急shell中,我们可以开始使用普通的Linux命令来修复VM。
如上所述,客户机的文件系统安装在/sysroot目录中。
我们可以使用“ ls”命令进行验证:
><rescue> ls /sysroot/ bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
首先将chroot进入/sysroot目录:
><rescue> chroot /sysroot
要从救援shell 退出,请键入exit并按Enter键或者按Ctrl + d。
以只读模式启动VM
我们不应在任何活动的VM上运行救援shell。
但是,如果出于任何原因仍然要执行此操作,请使用--ro选项在活动磁盘镜像或者VM上安全地使用“ virt-rescue”。
$virt-rescue -d centos8-uefi -i --ro
或者,
$virt-rescue -a CentOS_8_Server.img -i --ro
--ro选项将以只读模式启动VM或者磁盘镜像。
它是试验VM或者磁盘镜像的理想选择。
实际不会保存任何更改。
从shell退出后,所有更改都将丢失!
为VM启用网络访问
如果要将文件或者软件包下载到虚拟机,可以在运行virt-rescue命令时使用--network选项:
$virt-rescue -d centos8-uefi -i --network
或者,
$virt-rescue -a CentOS_8_Server.img -i --network
此选项启用了救援shell内的网络访问权限,因此我们可以从Internet下载内容。
Virt-rescue有很多选择。
有关更多详细信息,请参见手册页:
$man virt-rescue