주:

Oracle Linux에서 RAID 논리적 볼륨 구성

소개

LVM RAID는 여러 물리적 장치를 사용하여 성능을 향상시키거나 장치 오류를 허용하는 논리 볼륨(LV)을 만드는 방법입니다. LVM에서 물리적 장치는 VG(단일 볼륨 그룹)의 PV(물리적 볼륨)입니다.

이 자습서에서는 Oracle Linux Volume Manager 유틸리티와 함께 RAID 논리 볼륨을 만든 다음 디스크 오류를 처리합니다.

목표

필요 조건

다음 구성을 사용하는 모든 Oracle Linux 8 시스템:

랩 환경 설정

주: 무료 실습 환경을 사용하는 경우 Oracle Linux Lab Basics에서 연결 및 기타 사용 지침을 참조하십시오.

  1. 아직 연결되지 않은 경우 터미널을 열고 위에서 언급한 각 instance에 ssh를 통해 연결합니다.

    ssh oracle@<ip_address_of_instance>
    
  2. 블록 볼륨이 존재하는지 확인합니다.

    sudo lsblk
    

    무료 랩 환경의 출력에는 기존 파일 시스템에 대한 /dev/sda과 사용 가능한 디스크 /dev/sdb, /dev/sdc, /dev/sdd/dev/sde가 표시되어야 합니다. 또한 나중에 사용할 두 개의 추가 디스크(/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
    ...
    

    pvdisplay 명령을 -m 옵션과 함께 사용하면 물리적 확장 영역을 논리적 볼륨 및 논리적 확장에 매핑할 수 있습니다. 출력 예의 PV /dev/sdb은 RAID LV와 연관된 물리적 범위를 보여줍니다. /dev/sdc, /dev/sdd/dev/sde에도 동일하게 나타나야 합니다.

  3. VG에 다른 PV를 추가합니다.

    기존 RAID LV가 기존의 모든 물리적 볼륨을 사용하므로 PV 푸에 /dev/sdf를 추가합니다.

    sudo vgextend foo /dev/sdf
    

    출력에는 vgextend 명령이 VG foo에 추가하기 전에 /dev/sdf를 PV로 변환하는 내용이 표시됩니다.

  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를 새로 고칩니다.
    • 60초 후에 자동으로 종료하려면 timeout 60 watch -n 5 sudo lvs foo/rr를 실행합니다.
  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 명령을 사용하여 한 번에 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 devices in foo/rr while it is not in-sync" 메시지가 포함된 경우 watch sudo lvs foo/rr를 실행하고 Cpy%Sync가 100%인지 확인하여 RAID-LV가 동기화 상태인지 확인합니다. lvconvert 명령을 다시 시도하십시오.

  5. VG에 /dev/sdg 장치를 추가합니다.

    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를 참조하십시오.