答案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