ノート:

Oracle LinuxでのRAID論理ボリュームの構成

イントロダクション

LVM RAIDは、複数の物理デバイスを使用してパフォーマンスを改善したり、デバイスの障害を許容したりする論理ボリューム(LV)を作成する方法です。LVMでは、物理デバイスは単一のボリュームグループ(VG)内の物理ボリューム(PV)です。

このチュートリアルでは、Oracle Linux Volume Managerユーティリティーと連携してRAID論理ボリュームを作成し、ディスク障害に対処します。

目的

前提条件

次の構成を持つ任意の Oracle Linux 8システム:

演習環境の設定

ノート:無料ラボ環境を使用する場合、接続およびその他の使用手順については、Oracle Linux Labの基本を参照してください。

  1. まだ接続していない場合は、端末を開き、ssh経由で前述の各インスタンスに接続します。

    ssh oracle@<ip_address_of_instance>
    
  2. ブロック・ボリュームが存在することを確認します。

    sudo lsblk
    

    空きラボ環境の出力には、既存のファイルシステムの /dev/sdaと、使用可能なディスク /dev/sdb/dev/sdc/dev/sdd、および /dev/sdeが表示されます。2つの追加のディスク(/dev/sdf/dev/sdg)もあり、あとで使用します。

物理ボリューム(PV)

  1. 使用可能なディスクを使用して物理ボリューム(PV)を作成します。

    sudo pvcreate -v /dev/sd[b-e]
    

    -vオプションを指定してコマンドを実行し、詳細情報を取得します。

  2. PV作成を確認します。

    sudo pvs
    

    出力例:

    [oracle@ol-node01 ~]$ sudo pvs
      PV         VG        Fmt  Attr PSize  PFree 
      /dev/sda3  ocivolume lvm2 a--  45.47g     0 
      /dev/sdb             lvm2 ---  50.00g 50.00g
      /dev/sdc             lvm2 ---  50.00g 50.00g
      /dev/sdd             lvm2 ---  50.00g 50.00g
      /dev/sde             lvm2 ---  50.00g 50.00g
    

ボリューム・グループ(VG)

  1. 新しく作成した物理ボリュームを使用してボリューム・グループ(VG)を作成します。

    sudo vgcreate -v foo /dev/sd[b-e]
    
  2. VGの作成を確認します。

    sudo vgs
    

    出力例:

    [oracle@ol-node01 ~]$ sudo vgs
      VG             #PV #LV #SN Attr   VSize   VFree  
      foo              4   0   0 wz--n- 199.98g 199.98g
      ocivolume        1   2   0 wz--n-  45.47g      0 
    

論理ボリューム(LV)

  1. RAID論理ボリューム(LV)を作成します。

    sudo lvcreate --type raid5 -i 3 -L 5G -n rr foo
    
    • --type: RAIDレベルを設定します。LVMは、RAIDレベル0、1、4、5、6、および10をサポートします。
    • -i: RAID 4/5/6論理ボリュームのストライプ(デバイス)の番号(n)を設定します。raid5 LVには n+1デバイスが必要です。
    • -L: RAIDアレイの合計サイズ。
    • -n: RAIDアレイの名前。

    出力例:

    [oracle@ol-node01 ~]$ sudo lvcreate --type raid5 -i 3 -L 5G -n rr foo
      Using default stripesize 64.00 KiB.
      Rounding size 5.00 GiB (1280 extents) up to stripe boundary size 5.00 GiB (1281 extents).
      Logical volume "rr" created.
    

    詳細は、lvmraid(7)マニュアル・ページを参照してください。

  2. LVの作成を確認します。

    sudo lvdisplay foo
    

    出力には、foo VG内に含まれるすべての論理ボリュームが表示されます。

    出力例:

    [oracle@ol-node01 ~]$ sudo lvdisplay foo
      --- Logical volume ---
      LV Path                /dev/foo/rr
      LV Name                rr
      VG Name                foo
      LV UUID                vghyRi-nKGM-3b9t-tB1I-biJX-10h6-UJWvm2
      LV Write Access        read/write
      LV Creation host, time ol-node01, 2022-05-19 01:23:46 +0000
      LV Status              available
      # open                 0
      LV Size                5.00 GiB
      Current LE             1281
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     1024
      Block device           252:10
    
  3. LVタイプを表示します。

    sudo lvs -o name,segtype foo/rr
    
    • lvsコマンドは、結果を絞り込むオプションとしてフルLVパスを使用できます。

    出力例:

    [oracle@ol-node01 ~]$ sudo lvs -o name,segtype /dev/foo/rr
      LV     Type 
      rr     raid5
    

ファイルシステムの作成

  1. RAID LVにXFSファイル・システムを作成します。

    sudo mkfs.xfs -f /dev/foo/rr
    
    • -f:既存のファイル・システムを上書きします。

    出力例:

    [oracle@ol-node01 ~]$ sudo mkfs.xfs -f /dev/foo/rr
    meta-data=/dev/foo/rr            isize=512    agcount=8, agsize=163952 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=1, sparse=1, rmapbt=0
             =                       reflink=1
    data     =                       bsize=4096   blocks=1311616, imaxpct=25
             =                       sunit=16     swidth=48 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=4096  sunit=1 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    

    ノート: XFSファイル・システムは、作成後にサイズを減らすことはできません。ただし、xfs_growfsコマンドでは拡大できます。

RAID LVのマウント

  1. ファイルシステムをマウントします。

    sudo mkdir -p /u01
    sudo mount /dev/foo/rr /u01
    
  2. ファイル・システムのディスク使用量をレポートします。

    df -h
    

    出力例:

    [oracle@ol-node01 ~]$ df -h
    Filesystem                         Size  Used Avail Use% Mounted on
    ...
    /dev/mapper/foo-rr                 5.0G   69M  5.0G   2% /u01
    

RAID LVのサイズ変更

RAID LVのサイズを変更するには、いくつかの方法があります。

重要: LVの縮小は危険であるため、データが失われる可能性があります。LVでXFSファイルシステムを実行するときは、XFSがファイルシステムのサイズを減らさないため、LVの縮小を回避してください。

RAID LV容量を増やす

  1. VGで使用可能な空き領域を使用して、RAID LVサイズを10Gに増やします。

    sudo lvresize -L 10G foo/rr
    

    サイズを10G増やすには、かわりにオプション-L +10Gを使用します。

  2. LVが10Gに増加したことを確認します。

    sudo lvs foo/rr
    

    LSizeに10gが表示されます。

  3. ファイルシステムを拡張します。

    sudo xfs_growfs /u01
    
  4. 更新されたファイルシステムのディスク使用状況を報告します。

    df -h
    
  5. 続行する前に、RAID同期のステータスを確認します。

    警告:次のステップへ迅速に進みすぎると、foo/rrが同期していないためにエラーが発生する可能性があります。

    このエラーは、前述のRAID LVのサイズ変更後に同期が完了しなかった場合に発生します。

    watch sudo lvs foo/rrでRAID LVをチェックし、Cpy%Syncフィールドが100%に達するまで待ちます。Cpy%Syncが100%に達したら、ctrl-cを使用してwatchコマンドを終了します。

詳細は、lvresize(8)lvextend(8)、および lvreduce(8)のマニュアルページを参照してください。

RAID LVでのストライプの増加

RAID LVのストライプ数を変更すると、全体的な容量が増加し、RAID4/5/6/10で使用できます。追加の各ストライプには、ボリュームグループ内の割り当てられていない物理ボリューム(デバイス)の数が等しい必要があります。

  1. VG fooに存在する物理ボリューム(PV)を確認します。

    sudo pvs
    

    出力 /dev/sdb/dev/sdc/dev/sdd、および /dev/sdeはすべてVG fooに関連付けられています。

  2. 未使用の物理ボリュームがあるかどうかを確認します。

    sudo pvdisplay -m /dev/sd[b-e]
    

    出力例:

      --- Physical volume ---
      PV Name               /dev/sdb
      VG Name               foo
      PV Size               50.00 GiB / not usable 4.00 MiB
      Allocatable           yes 
      PE Size               4.00 MiB
      Total PE              12799
      Free PE               11944
      Allocated PE          855
      PV UUID               Q1uEMC-0zL1-dgrA-9rIT-1xrA-Vnfr-2E8tJT
       
      --- Physical Segments ---
      Physical extent 0 to 0:
        Logical volume	/dev/foo/rr_rmeta_0
        Logical extents	0 to 0
      Physical extent 1 to 854:
        Logical volume	/dev/foo/rr_rimage_0
        Logical extents	0 to 853
      Physical extent 855 to 12798:
        FREE
    ...
    

    -mオプションを指定した pvdisplayコマンドは、論理ボリュームおよび論理エクステントへの物理エクステントのマッピングを示しています。この出力例のPV /dev/sdbは、RAID LVに関連付けられた物理エクステントを示しています。/dev/sdc/dev/sdd、および /dev/sdeでも同じように表示されます。

  3. VGに別のPVを追加します。

    既存のRAID LVが既存のすべての物理ボリュームを使用するため、PV fooに /dev/sdfを追加します。

    sudo vgextend foo /dev/sdf
    

    この出力は、vgextendコマンドが /dev/sdfをPVに変換してからVG fooに追加することを示しています。

  4. RAID LVにストライプを追加します。

    sudo lvconvert --stripes 4 foo/rr
    

    プロンプトにyで応答します。

    出力例:

    [oracle@ol-node01 ~]$ sudo lvconvert --stripes 4 foo/rr
      Using default stripesize 64.00 KiB.
      WARNING: Adding stripes to active and open logical volume foo/rr will grow it from 2562 to 3416 extents!
      Run "lvresize -l2562 foo/rr" to shrink it or use the additional capacity.
    Are you sure you want to add 1 images to raid5 LV foo/rr? [y/n]: y
      Logical volume foo/rr successfully converted.
    
  5. LVの新しいサイズを確認します。

    sudo lvs foo/rr
    

    出力例:

    [oracle@ol-node01 ~]$ sudo lvs foo/rr
      LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      rr   foo rwi-aor--- 13.34g                                    2.24          
    

    容量(LSize)は 3.34gによって成長し、同期(Cpy%Sync)が開始します。同期とは、RAID LV内のすべてのデバイスを相互に一貫させるプロセスであり、RAID LV内のデバイスを変更または交換するときに完全同期が必要となります。

  6. 同期のステータスを確認します。

    進捗が100%になるまでチェックを実行します。

    watch sudo lvs foo/rr
    

    Cpy%Syncが100%に達したら、ctrl-cを使用してwatchコマンドを終了します。

    watchコマンドを使用するその他の方法は次のとおりです。

    • watch -n 5 sudo lvs foo/rrを実行して、デフォルトの2ではなく5秒ごとにリフレッシュします。
    • timeout 60 watch -n 5 sudo lvs foo/rrを実行して、60秒後に自動的に終了します。
  7. /dev/sdfが含まれる新しいセグメント範囲とPVを表示します。

    sudo lvs -a -o lv_name,attr,segtype,seg_pe_ranges,dataoffset foo
    

LVで障害が発生したRAIDデバイスを回復する

RAIDアレイは、障害が発生したデバイスで引き続き実行できます。RAID1以外のRAIDタイプのデバイスを削除すると、下位レベルのRAID (この場合はRAID5からRAID0)に変換されます。

LVMでは、障害が発生したデバイスに対して lvconvert --repairコマンドを使用して、障害が発生したドライブを取り外して交換を行うのではなく、1つの手順でRAIDボリューム内の障害が発生したデバイスを交換できます。

  1. 現在のRAID LVレイアウトを確認します。

    sudo lvs --all --options name,copy_percent,devices foo
    
  2. /dev/sddの障害をシミュレートします。

    echo 1 | sudo tee /sys/block/sdd/device/delete
    
  3. 失敗したら、RAID LVレイアウトを再チェックします。

    sudo lvs --all --options name,copy_percent,devices foo
    

    [unknown]デバイスに注意してください。

    出力例:

    [oracle@ol-node01 ~]$ sudo lvs --all --options name,copy_percent,devices foo
      WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc.
      WARNING: VG foo is missing PV o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc (last written to /dev/sdd).
      LV            Cpy%Sync Devices                                                                   
      rr            100.00   rr_rimage_0(0),rr_rimage_1(0),rr_rimage_2(0),rr_rimage_3(0),rr_rimage_4(0)
      [rr_rimage_0]          /dev/sdb(855)                                                             
      [rr_rimage_0]          /dev/sdb(1)                                                               
      [rr_rimage_1]          /dev/sdc(855)                                                             
      [rr_rimage_1]          /dev/sdc(1)                                                               
      [rr_rimage_2]          [unknown](855)                                                            
      [rr_rimage_2]          [unknown](1)                                                              
      [rr_rimage_3]          /dev/sde(855)                                                             
      [rr_rimage_3]          /dev/sde(1)                                                               
      [rr_rimage_4]          /dev/sdf(855)                                                             
      [rr_rimage_4]          /dev/sdf(1)                                                               
      [rr_rmeta_0]           /dev/sdb(0)                                                               
      [rr_rmeta_1]           /dev/sdc(0)                                                               
      [rr_rmeta_2]           [unknown](0)                                                              
      [rr_rmeta_3]           /dev/sde(0)                                                               
      [rr_rmeta_4]           /dev/sdf(0)        
    
  4. 障害が発生したデバイスを交換します。

    sudo lvconvert --repair foo/rr
    

    プロンプトにyで応答します。

    このコマンドは、VGで使用する使用可能な領域またはデバイスを見つけることができません。

    出力例:

    [oracle@ol-node01 ~]$ sudo lvconvert --repair foo/rr
      WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc.
      WARNING: VG foo is missing PV o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc (last written to /dev/sdd).
      WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc.
    Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
      Insufficient free space: 856 extents needed, but only 0 available
      Failed to replace faulty devices in foo/rr.
    

    警告:エラーに "Unable to replace device in foo/rr while it is in-sync"メッセージが含まれている場合は、watch sudo lvs foo/rrを実行してRAID-LVが同期中であり、Cpy%Syncが100%であることを確認します。その後、lvconvertコマンドを再試行します。

  5. デバイス /dev/sdgをVGに追加します

    sudo vgextend foo /dev/sdg
    

    出力内の WARNINGメッセージは、まだドライブに障害が発生していないことが原因です。

  6. 障害が発生したドライブの交換を再試行します。

    sudo lvconvert --repair foo/rr
    

    yでプロンプトに再度応答します。

    出力には、見つからないドライブに関する WARNINGメッセージが再度表示されますが、コマンドはVG内の障害のあるデバイスを正常に交換しました。

  7. レイアウトを確認します。

    sudo lvs --all --options name,copy_percent,devices foo
    

    /dev/sdgは、すべての [unknown]デバイスエントリを置き換えたことに注意してください。

  8. 障害が発生したデバイスをVGから取り外します。

    LVMユーティリティーは、LVMがVGから取り外すまで、障害が発生したデバイスを検出できないことを報告し続けます。

    sudo vgreduce --removemissing foo
    

    出力内の WARNINGメッセージは、まだドライブに障害が発生していないことが原因です。

  9. 続行する前に、RAID同期のステータスを確認します。

    警告:次のセクションにすばやく続行すると、次のエラー・メッセージが表示される場合があります:

    出力例:

    [oracle@ol-node01 ~]$ sudo lvchange --syncaction check foo/rr
      foo/rr state is currently "recover".  Unable to switch to "check".
    

    このエラーは、RAID LVにストライプを追加したあとで同期が完了しなかった場合に発生します。

    watch sudo lvs foo/rrでRAID LVをチェックし、Cpy%Syncフィールドが100%に達するまで待ちます。

RAID LVでのデータ整合性のチェック(スクラブ)

LVMは、アレイ内のすべてのデータとパリティーブロックを読み取り、一貫性をチェックするRAID LVのスクラビング機能を提供します。

  1. チェックモードでスクラブを開始します。

    sudo lvchange --syncaction check foo/rr
    
  2. スクラブ・アクションのステータスを表示します。

    watch sudo lvs -a -o name,raid_sync_action,sync_percent foo/rr
    

    出力例:

    [oracle@ol-node01 ~]$ sudo lvs -a -o name,raid_sync_action,sync_percent foo/rr
      LV   SyncAction Cpy%Sync
      rr   check      30.08   
    
  3. スクラブ(同期)が完了したら、見つかった矛盾するブロックの数を表示します。

    sudo lvs -o +raid_sync_action,raid_mismatch_count foo/rr
    

    raid_sync_actionオプションは、次のいずれかの値を含む SyncActionフィールドを表示します。

    • idle:すべてのアクションが完了しました。
    • resync:システム障害後の初期化またはリカバリ。
    • recover:配列内のデバイスの置換。
    • check:違いを探しています。
    • repair:差異を見つけて修復します。

    出力例:

    [oracle@ol-node01 ~]$ lvs -o +raid_sync_action,raid_mismatch_count foo/rr
      LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert SyncAction Mismatches
      rr   foo rwi-aor--- 13.34g                                    44.42            check               0
    

    出力には、0個の不一致(不一致)が表示されます。

  4. (オプション)配列の違いを修正します。

    このサンプル配列には差異が存在しない可能性があるため、このステップはオプションです。

    sudo lvchange --syncaction repair foo/rr
    
  5. (オプション)修復のステータスを確認します。

    sudo lvs -o +raid_sync_action,raid_mismatch_count foo/rr
    

    SyncActionフィールドが repairに変更されたことを確認します。

詳細は、lvchange(8)および lvmraid(7)のマニュアルページを参照してください。

詳細情報:

その他の学習リソース

他のラボをdocs.oracle.com/learnで探すか、Oracle Learning YouTubeチャネルでより無料の学習コンテンツにアクセスします。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品のドキュメントは、Oracle Help Centerを参照してください。