我正试图在虚拟机上恢复一个卷组,该卷组以某种方式损坏。
lv根以某种方式从VG中丢失,VG显示原始分配的空间是空闲的。
在VM上,我们无法使用vgcfgrestore
命令。然而,我们可以使用它在主机和VG恢复包括所有LV的。
但是,现在,当尝试引导VM时,会显示“卷组未找到”,并且不会启动。
pvs
显示驱动器,但是vgs
返回/run/lvm/lvmetad.socket connect failed no such file or directory
下一步是什么?
pvscan
显示
关于评论意见:
发布于 2018-02-09 10:21:44
下面是问题注释中提到的pastebin中VM的磁盘配置:
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='block' device='disk'>
<driver name='qemu' type='raw'/>
<source dev='/dev/mars_ssd/myUnivativ'/>
<target dev='hda' bus='ide'/>
<address type='drive' controller='0' bus='0' unit='0'/>
</disk>
<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' unit='0'/>
</disk>
[...non-disk devices after this point...]
VM配置中的信息表明VM磁盘/dev/sda
实际上是主机上的/dev/mars_ssd/myUnivativ
,即VG mars_ssd
、LV myUnivativ
。(是的,我知道VM配置说的是hda
而不是sda
--显然它假定VM将使用旧的IDE驱动程序。)
如果主机的mars_ssd
VG有任何问题,您应该首先在主机级别修复它们。
因为/dev/mars_ssd/myUnivativ
LV包含一个VM磁盘映像,所以它有一个分区表和它自己的LVM层。
由于VM的根文件系统似乎位于受损的VG中,因此很难在VM中修复它。如果您可以使用主机上可用的所有工具,那么修复它可能会更容易。
所以:
sudo losetup -f
以标识主机的第一个空闲/dev/loop*
设备。我叫它/dev/loopN
。sudo losetup /dev/loopN /dev/mars_ssd/myUnivativ
为VM的磁盘设置一个循环设备。现在,您可以像普通的全磁盘设备一样访问VM的磁盘映像,即使它实际上是主机上的LV。sudo kpartx -a /dev/loopN
。它将在VM的磁盘映像上为分区创建设备,并将它们作为常规分区设备访问,命名为/dev/mapper/loopNpP
,其中P是分区号。现在,您可以在主机级别在VM的磁盘映像上挂载任何分区:由于VM的PV在主机上被表示为/dev/sda5
,所以磁盘映像上至少有两个分区。您可以使用sudo fdisk -l /dev/loopN
查看分区,然后挂载任何感兴趣的分区,如sudo mount /dev/mapper/loopNp1 /mnt
。
您甚至可以运行pvscan
或vgscan
,并在主机级别获取VM的卷组--如果它们的名称与主机的名称不冲突的话。如果您找到一个功能性VG,您可以使用sudo vgchange -ay
激活它,然后将其挂载为正常。
如果您选择这样做的话,您也可以在此时使用任何文件救援工具。
在再次启动VM之前,撤消在主机级别访问VM磁盘映像所做的所有操作:
sudo vgchange -an <name of VM's VG>
从主机中禁用VM的所有卷组(如果您激活了它们)sudo kpartx -d /dev/loopN
删除分区设备sudo losetup -d /dev/loopN
的连接。我希望这能帮到你。请用你的调查结果更新你的问题,如果必要的话,我会更新我的答案。
https://serverfault.com/questions/896309
复制相似问题