如何恢复 LVM-RAID 卷的冗余

如何恢复 LVM-RAID 卷的冗余

我有一个逻辑卷 (home64),它跨越多个驱动器,并使用 lvconvert 将其转换为 RAID1。

这很好,当驱动器出现故障时,它会继续运行。现在我正在尝试更换驱动器,但我似乎已经让它进入​​了某种状态。

我在新驱动器上创建了一个 PV,并使用 vgextend 将其添加到 VG 中。

我一直无法让 LV 使用额外的空间并“降级”它。

我尝试修复它,但似乎需要故障驱动器才能运行。 (不幸的是,我没有这些命令的输出)

# /dev/sda is the new disk.
sudo lvconvert --repair /dev/mapper/prole-home64 /dev/sda

编辑)我重新运行命令。发生故障的驱动器为 8TB,我已将其替换为另一个 8TB 驱动器,并且其他卷上剩余一些额外空间,应覆盖“8TB”中的舍入错误。

当我开始实施后备计划(位于底部)时,此命令显示的空间更少。

sudo lvconvert --repair /dev/mapper/prole-home64
  WARNING: Disabling lvmetad cache for repair command.
  WARNING: Not using lvmetad because of repair.
Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
  Insufficient free space: 5240758 extents needed, but only 1560 available
  Failed to replace faulty devices in prole/home64.

/编辑

我尝试更换故障驱动器,但不确定如何引用不存在的驱动器:

# Mc2wIK-... is the PV id as mentioned in /etc/lvm/backup/prole
sudo lvconvert --replace Mc2wIK-qrme-cjBN-LArd-S4je-x2p0-p7qke1 /dev/mapper/prole-home64 /dev/sda

# pv1 is the label of the group in /etc/lvm/backup/prole
sudo lvconvert --replace pv1 /dev/mapper/prole-home64 /dev/sda

这些似乎都没有任何效果。

lvconvert确实建议我也许想尝试vgreduce --removemissing

所以我做了。由于活动卷而失败。由于驱动器已经出现故障,我强制删除:

sudo vgreduce --removemissing prole
sudo vgreduce --removemissing prole --force

然后我了解到lvchange --syncaction。我在也受到驱动器故障影响的较小卷上运行它,发现问题并修复它们:

lvchange --syncaction check /dev/mapper/prole-root

# Monitor progress by repeatedly running this:
lvs -a -o name,raid_sync_action,sync_percent

# Get the result with this:
lvs -o name,raid_mismatch_count

# Actually repair the volume
lvchange --syncaction repair /dev/prole/root

曾是成功的。

然而,当我尝试在大卷上执行此操作时,它会立即“完成”,而不会记录任何错误。

如果我尝试获取卷的运行状况:

sudo lvs -o name,lv_health_status
  LV     Health
  home
  home64 refresh needed
  root
  var

如果我尝试刷新音量:

sudo lvchange --refresh /dev/prole/home64
  Failed to remove temporary SubLVs from prole/home64

这说明了一些问题:

sudo lvs -a -o name,segtype,devices
  LV                Type   Devices
  home              linear /dev/sda(0)
  home              linear /dev/sde(0)
  home              linear /dev/sdb(1793)
  home64            raid1  home64_rimage_0(0),home64_rimage_1(0)
  [home64_rimage_0] error
  [home64_rimage_1] linear /dev/sdg(1)
  [home64_rimage_1] linear /dev/sdh(0)
  [home64_rimage_1] linear /dev/sdf(3330)
  [home64_rimage_1] linear /dev/sdf(1428550)
  [home64_rimage_1] linear /dev/sdd(1335820)
  [home64_rmeta_0]  error
  [home64_rmeta_1]  linear /dev/sdg(0)
  root              raid1  root_rimage_0(0),root_rimage_1(0)
  [root_rimage_0]   linear /dev/sdd(1810605)
  [root_rimage_1]   linear /dev/sdf(1)
  [root_rmeta_0]    linear /dev/sdd(856646)
  [root_rmeta_1]    linear /dev/sdf(0)
  var               raid1  var_rimage_0(0),var_rimage_1(0)
  [var_rimage_0]    linear /dev/sdb(1)
  [var_rimage_1]    linear /dev/sdf(2050)
  [var_rimage_1]    linear /dev/sdf(949475)
  [var_rmeta_0]     linear /dev/sdb(0)
  [var_rmeta_1]     linear /dev/sdf(2049)

如何恢复卷的冗余?

(我的后备计划是创建另一个卷,将 home64 卷的内容复制到其中,删除 home64 卷,然后将新卷转换为 RAID1,但一定有更好的方法!)

答案1

pvmove我意识到我可以通过调用要移动的 PV 和 2 来减少 home64 卷所分布的 PV,从而腾出更多可用空间。这个,再加上我可用的另外 6TB 空间,再加上替换磁盘上的 8TB 空间,给我留下了足够的空间来修复 LV lvchange --syncaction repair /dev/prole/home

现在看起来是这样的:

sudo lvs -a -o name,segtype,devices
  WARNING: Not using lvmetad because a repair command was run.
  LV                Type   Devices
  home64            raid1  home64_rimage_0(0),home64_rimage_1(0)
  [home64_rimage_0] linear /dev/sdf(1)
  [home64_rimage_0] linear /dev/sda(0)
  [home64_rimage_0] linear /dev/sdc2(0)
  [home64_rimage_1] linear /dev/sdg(1)
  [home64_rimage_1] linear /dev/sdi(0)
  [home64_rimage_1] linear /dev/sdb(3842)
  [home64_rimage_1] linear /dev/sdd(1335820)
  [home64_rmeta_0]  linear /dev/sdf(0)
  [home64_rmeta_1]  linear /dev/sdg(0)
  root              raid1  root_rimage_0(0),root_rimage_1(0)
  [root_rimage_0]   linear /dev/sdd(1810605)
  [root_rimage_1]   linear /dev/sdb(1)
  [root_rmeta_0]    linear /dev/sdd(856646)
  [root_rmeta_1]    linear /dev/sdb(0)
  var               raid1  var_rimage_0(0),var_rimage_1(0)
  [var_rimage_0]    linear /dev/sdd(0)
  [var_rimage_1]    linear /dev/sdb(2050)
  [var_rmeta_0]     linear /dev/sdd(1812653)
  [var_rmeta_1]     linear /dev/sdb(2049)

健康状况:

sudo lvs -o name,lv_health_status
  WARNING: Not using lvmetad because a repair command was run.
  LV     Health
  home64
  root
  var

相关内容