LVM,使用备份磁盘映像替换 LV 磁盘

LVM,使用备份磁盘映像替换 LV 磁盘

因此,我最近继承了一台在 LVM 存储池中运行多个 LV(逻辑卷)的服务器,其磁盘由 Virsh KVM 使用。

问题是其中一个磁盘最近已损坏,从那时起我一直在使用备份映像来托管,但我希望将该映像返回到 LVM 存储池并按原来的方式重新托管,因为有自动备份正在运行。

我想找到一种方法来获取作为现有 LV 输出的原始文件。但不知道该怎么做。

我已附上 LV 存储的图片和我希望转回 LV 磁盘的图像,但我不知道如何去做。

LV信息

驱动器映射器信息

原始图像替换 LV 磁盘

答案1

当您说“其中一个磁盘最近已损坏”时,您是指 VM 的虚拟磁盘还是托管 LV 的物理磁盘?如果物理磁盘已损坏,则它可能无法可靠地继续使用,并且可能应该更换 - 是否已完成此操作?如果您想这样做,请参见下文。

从文件的大小来看,你的/backup/rdnsrv2似乎是整个LV的完整镜像。

要将其写回实际 LV,您可以执行以下操作:

dd if=/backup/rdnsrv2 of=/dev/VG-sda/rdnsrv2 bs=1024k

甚至:

cat /backup/rdnsrv2 > /dev/VG-sda/rdnsrv2

VG 的命名表明它与/dev/sda物理磁盘相关联。这是一个不必要的限制 - VG 甚至其中的 LV 可以跨越多个物理磁盘。您甚至可以在使用 LV 时将 LVM 数据从一个磁盘移动到另一磁盘。例如,如果您想/dev/sda用另一个磁盘替换当前的磁盘(假设是/dev/sdX),您可以这样做:

  • 首先,对新的分区/dev/sdX进行匹配sda。由于它显然是主机系统的当前启动磁盘,因此您需要创建三个分区。

  • 初始化引导文件系统并复制内容 - 您可以执行此操作,因为/boot/efi/boot仅在系统实际引导时或在安装内核/引导加载程序更新时使用。在非启动磁盘上,您可以跳过此步骤。

    mkfs.vfat -F 32 /dev/sdX1
    mount /dev/sdX1 /mnt
    cp -a /boot/efi/* /mnt/
    umount /mnt
    umount /boot/efi
    mkfs.<appropriate type> /dev/sdX2
    mount /dev/sdX2 /mnt
    cp -a /boot/* /mnt/
    umount /mnt
    umount /boot
    lsblk -o +uuid /dev/sdX # note the UUIDs of sdX1 and sdX2
    <exit /etc/fstab to update the UUIDs of /boot/efi and /boot>
    systemctl daemon-reload
    mount /boot
    mount /boot/efi
    <verify that sdX1 is now at /boot/efi and sdX2 at /boot>
    grub-install /dev/sdX # ensures GRUB is up to date and EFI boot variable points to the correct disk
  • 迁移 LVM 数据(即使 LV 正在使用中):
    pvcreate /dev/sdX3 
    vgextend VG-sda /dev/sdX3
    pvmove /dev/sda3 

pvmove /dev/sda3会将所有 LVM 数据迁移出/dev/sda3同一 VG 中的不同 PV(= 迁移到,/dev/sdX3因为没有其他替代方案)。如果它不能移动所有东西,它就会移动它能移动的所有东西,然后停止。

  • 拆下并移除/dev/sda
    vgreduce VG-sda /dev/sda3 
    # this will harmlessly fail if there is still LV data on sda3

    lsblk /dev/sda   
    # verify no mounted filesystems and no LVs in use

    echo 1 > /sys/block/sda/device/delete   
    # /dev/sda* device nodes will vanish!
    # /dev/sda is now ready for hot-unplugging

相关内容