首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >恢复丢失的LVM VG

恢复丢失的LVM VG
EN

Server Fault用户
提问于 2018-02-08 12:41:49
回答 1查看 546关注 0票数 0

我正试图在虚拟机上恢复一个卷组,该卷组以某种方式损坏。

lv根以某种方式从VG中丢失,VG显示原始分配的空间是空闲的。

在VM上,我们无法使用vgcfgrestore命令。然而,我们可以使用它在主机和VG恢复包括所有LV的。

但是,现在,当尝试引导VM时,会显示“卷组未找到”,并且不会启动。

pvs显示驱动器,但是vgs返回/run/lvm/lvmetad.socket connect failed no such file or directory

下一步是什么?

pvscan显示

关于评论意见:

EN

回答 1

Server Fault用户

发布于 2018-02-09 10:21:44

下面是问题注释中提到的pastebin中VM的磁盘配置:

代码语言:javascript
运行
复制
<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中修复它。如果您可以使用主机上可用的所有工具,那么修复它可能会更容易。

所以:

"Diskception"

  • 关闭VM。
  • 在主机上运行sudo losetup -f以标识主机的第一个空闲/dev/loop*设备。我叫它/dev/loopN
  • 使用sudo losetup /dev/loopN /dev/mars_ssd/myUnivativ为VM的磁盘设置一个循环设备。现在,您可以像普通的全磁盘设备一样访问VM的磁盘映像,即使它实际上是主机上的LV。
  • 若要访问VM磁盘映像上的各个分区,请使用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

您甚至可以运行pvscanvgscan,并在主机级别获取VM的卷组--如果它们的名称与主机的名称不冲突的话。如果您找到一个功能性VG,您可以使用sudo vgchange -ay激活它,然后将其挂载为正常。

如果您选择这样做的话,您也可以在此时使用任何文件救援工具。

在再次启动VM之前,撤消在主机级别访问VM磁盘映像所做的所有操作:

  • 从主机卸载所有VM的文件系统。
  • 使用sudo vgchange -an <name of VM's VG>从主机中禁用VM的所有卷组(如果您激活了它们)
  • 使用sudo kpartx -d /dev/loopN删除分区设备
  • 断开循环设备与sudo losetup -d /dev/loopN的连接。

我希望这能帮到你。请用你的调查结果更新你的问题,如果必要的话,我会更新我的答案。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/896309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档