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

関連情報