Red Hat Training

A Red Hat training course is available for RHEL 8

17.13. LVM RAID のトラブルシューティング

LVM RAID デバイスのさまざまな問題のトラブルシューティングを実行して、データエラーの修正、デバイスの復旧、障害が発生したデバイスの置き換えを行うことができます。

17.13.1. RAID 論理ボリュームでのデータ整合性の確認

LVM は、RAID 論理ボリュームのスクラビングに対応します。RAID スクラビングは、アレイ内のデータおよびパリティーブロックをすべて読み込み、それが一貫しているかどうかを確認するプロセスです。lvchange --syncactionrepair コマンドは、アレイでバックグラウンドの同期アクションを開始します。次の属性は、データの整合性に関する詳細を提供します。

  • raid_sync_action フィールドには、RAID 論理ボリュームが実行している現在の同期アクションが表示されます。値は次のいずれかです。

    idle
    すべての sync アクションが完了しました (何も実行していません)。
    resync
    マシンの不完全なシャットダウン後にアレイを初期化または再同期しています。
    recover
    アレイ内のデバイスを交換しています。
    check
    アレイの不一致を検索しています。
    repair
    不一致を検索して修復しています。
  • raid_mismatch_count フィールドには、check アクション中に検出された不一致の数が表示されます。
  • Cpy%Sync フィールドには、sync アクションの進行状況が表示されます。
  • lv_attr フィールドは、追加のインジケーターを提供します。このフィールドのビット 9 は、論理ボリュームの正常性を示し、以下のインジケーターに対応しています。

    m または mismatches
    RAID 論理ボリュームに不一致があることを示します。この文字は、スクラビング操作によって RAID の一貫性のない部分が検出された後に表示されます。
    r または refresh
    LVM がデバイスラベルを読み取ることができ、デバイスが動作しているとみなされる場合でも、RAID アレイ内に障害が発生したデバイスがあることを示します。デバイスが利用可能になったことをカーネルに通知するように論理ボリュームを更新するか、デバイスに障害が発生したと思われる場合はデバイスを交換します。

手順

  1. オプション: スクラビングプロセスが使用する I/O 帯域幅を制限します。RAID スクラビング操作を実行すると、sync アクションに必要なバックグラウンド I/O が、LVM デバイスへの他の I/O (ボリュームグループメタデータの更新など) よりも優先される可能性があります。これにより、他の LVM 操作が遅くなる可能性があります。

    リカバリースロットルを実装してスクラビング操作のレートを制御できます。lvchange --syncaction コマンドで --maxrecoveryrate Rate[bBsSkKmMgG] または --minrecoveryrate Rate[bBsSkKmMgG] を使用して復旧速度を設定できます。詳細は、最小/最大 I/O レートオプション を参照してください。

    Rate 値は、アレイ内の各デバイスに対する 1 秒あたりのデータ通信量を指定します。接尾辞を指定しないと、オプションはデバイスごとの 1 秒あたらりの kiB を想定します。

  2. アレイ内の不一致数を修復せずに、アレイ内の不一致の数を表示します。

    # lvchange --syncaction check my_vg/my_lv

    このコマンドは、アレイでバックグラウンドの同期アクションを開始します。

  3. オプション: var/log/syslog ファイルでカーネルメッセージを確認します。
  4. アレイ内の不一致を修正します。

    # lvchange --syncaction repair my_vg/my_lv

    このコマンドは、RAID 論理ボリューム内の障害が発生したデバイスを修復または交換します。このコマンドを実行したら、var/log/syslog ファイルでカーネルメッセージを確認できます。

検証

  1. スクラビング操作に関する情報を表示します。

    # lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv
    LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert SyncAction Mismatches
    my_lv my_vg rwi-a-r--- 500.00m                                    100.00           idle        0

関連情報

17.13.2. 論理ボリュームに障害が発生した RAID デバイスの交換

RAID は従来の LVM ミラーリングとは異なります。LVM ミラーリングの場合は、障害が発生したデバイスを削除します。そうしないと、障害が発生したデバイスで RAID アレイが動作し続ける間、ミラーリングされた論理ボリュームがハングします。RAID1 以外の RAID レベルの場合、デバイスを削除すると、デバイスはより低いレベルの RAID に変換されます (たとえば、RAID6 から RAID5 へ、または RAID4 または RAID5 から RAID0 への変換)。

LVM では、障害が発生したデバイスを取り外して代替デバイスを割り当てる代わりに、lvconvert コマンドの --repair 引数を使用して、RAID 論理ボリューム内で物理ボリュームとして機能する障害が発生したデバイスを交換できます。

前提条件

  • ボリュームグループには、障害が発生したデバイスを置き換えるのに十分な空き容量を提供する物理ボリュームが含まれています。

    ボリュームグループに十分な空きエクステントがある物理ボリュームがない場合は、vgextend ユーティリティーを使用して、十分なサイズの物理ボリュームを新たに追加します。

手順

  1. RAID 論理ボリュームを表示します。

    # lvs --all --options name,copy_percent,devices my_vg
      LV               Cpy%Sync Devices
      my_lv            100.00   my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          /dev/sdc1(1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           /dev/sdc1(0)
      [my_lv_rmeta_2]           /dev/sdd1(0)
  2. /dev/sdc デバイスに障害が発生したら、RAID 論理ボリュームを表示します。

    # lvs --all --options name,copy_percent,devices my_vg
      /dev/sdc: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices.
      LV               Cpy%Sync Devices
      my_lv            100.00   my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          [unknown](1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           [unknown](0)
      [my_lv_rmeta_2]           /dev/sdd1(0)
  3. 障害が発生したデバイスを交換します。

    # lvconvert --repair my_vg/my_lv
      /dev/sdc: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices.
      WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices.
    Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
    Faulty devices in my_vg/my_lv successfully replaced.
  4. オプション: 障害が発生したデバイスを置き換える物理ボリュームを手動で指定します。

    # lvconvert --repair my_vg/my_lv replacement_pv
  5. 代替の論理ボリュームを調べます。

    # lvs --all --options name,copy_percent,devices my_vg
    
      /dev/sdc: open failed: No such device or address
      /dev/sdc1: open failed: No such device or address
      Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee.
      LV               Cpy%Sync Devices
      my_lv            43.79    my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          /dev/sdb1(1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           /dev/sdb1(0)
      [my_lv_rmeta_2]           /dev/sdd1(0)

    障害が発生したデバイスをボリュームグループから削除するまで、LVM ユーティリティーは、障害が発生したデバイスが見つけられないことを示しています。

  6. 障害が発生したデバイスをボリュームグループから削除します。

    # vgreduce --removemissing my_vg

検証

  1. 障害が発生したデバイスを取り外した後、利用可能な物理ボリュームを表示します。

    # pvscan
    PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free]
    PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
    PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
    PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
  2. 障害が発生したデバイスを交換した後、論理ボリュームを調べます。

    # lvs --all --options name,copy_percent,devices my_vg
    my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0)
      [my_lv_rimage_0]          /dev/sde1(1)
      [my_lv_rimage_1]          /dev/sdb1(1)
      [my_lv_rimage_2]          /dev/sdd1(1)
      [my_lv_rmeta_0]           /dev/sde1(0)
      [my_lv_rmeta_1]           /dev/sdb1(0)
      [my_lv_rmeta_2]           /dev/sdd1(0)

関連情報

  • lvconvert(8) および vgreduce(8) man ページ