複数のドライブにまたがる論理ボリューム(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