17.13. LVM RAID 문제 해결

LVM RAID 장치의 다양한 문제를 해결하여 데이터 오류를 수정하고 장치를 복구하거나 실패한 장치를 교체할 수 있습니다.

17.13.1. RAID 논리 볼륨에서 데이터 일관성 확인

LVM은 RAID 논리 볼륨에 대한 스크럽을 지원합니다. RAID 스크럽은 배열의 모든 데이터 및 패리티 블록을 읽고 일관성이 있는지 확인하는 프로세스입니다. lvchange --syncaction repair 명령은 배열에서 백그라운드 동기화 작업을 시작합니다. 다음 속성은 데이터 일관성에 대한 세부 정보를 제공합니다.

  • raid_sync_action 필드에는 RAID 논리 볼륨이 수행하는 현재 동기화 작업이 표시됩니다. 다음 값 중 하나일 수 있습니다.

    idle
    모든 동기화 작업을 완료했습니다(없음).
    resync
    정리되지 않은 시스템 종료 후 배열을 초기화하거나 재동기화합니다.
    recover
    배열에서 장치를 교체합니다.
    check
    배열 불일치를 찾습니다.
    repair
    불일치를 찾고 복구합니다.
  • raid_mismatch_count 필드에는 검사 작업 중에 발견된 불일치 수가 표시됩니다.
  • Cpy%Sync 필드는 동기화 작업의 진행 상황을 표시합니다.
  • lv_attr 필드는 추가 지표를 제공합니다. 이 필드의 비트 9는 논리 볼륨의 상태를 표시하며 다음과 같은 지표를 지원합니다.

    m 또는 mismatches
    RAID 논리 볼륨에 불일치가 있음을 나타냅니다. 스크러블링 작업이 RAID의 일부를 감지한 후 이 문자를 볼 수 있습니다. 이 문자는 일관성이 없습니다.
    R 또는 refresh
    LVM에서 장치 레이블을 읽고 장치가 작동하는 것으로 간주하더라도 RAID 배열에서 실패한 장치를 나타냅니다. 논리 볼륨을 새로고침하여 커널에 장치를 사용할 수 있음을 알리거나 실패한 것으로 의심되는 경우 장치를 교체합니다.

절차

  1. 선택 사항: 스크럽 프로세스에서 사용하는 I/O 대역폭을 제한합니다. RAID 스크러블링 작업을 수행할 때 동기화 작업에 필요한 백그라운드 I/O는 볼륨 그룹 메타데이터 업데이트 등 LVM 장치에 대한 다른 I/O의 충돌을 줄일 수 있습니다. 이로 인해 다른 LVM 작업이 느려질 수 있습니다.

    복구 제한을 구현하여 스크럽 작업 속도를 제어할 수 있습니다. lvchange --syncaction 명령과 함께 --maxrecoveryrate Rate[bBsSkKmMgG] 또는 --minrecoveryrate Rate[bBsSkKmMgG] 를 사용하여 복구 속도를 설정할 수 있습니다. 자세한 내용은 최소 및 최대 I/O 속도 옵션을 참조하십시오.

    Rate 값을 배열의 각 장치에 대한 초당 양으로 지정합니다. 접미사를 지정하지 않으면 옵션은 장치당 초당 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 수준의 경우 장치를 제거하면 RAID6에서 RAID5로 또는 RAID4 또는 RAID0으로의 낮은 RAID 수준으로의 변환을 의미합니다.

실패한 장치를 제거하고 교체를 LVM으로 할당하는 대신 lvconvert 명령의 --repair 인수를 사용하여 RAID 논리 볼륨에서 물리 볼륨으로 사용되는 실패한 장치를 교체할 수 있습니다.

사전 요구 사항

  • 볼륨 그룹에는 오류가 발생한 장치를 교체하기에 충분한 여유 용량을 제공하는 물리 볼륨이 포함되어 있습니다.

    볼륨 그룹에서 사용 가능한 확장 영역이 충분한 물리 볼륨이 없는 경우 Cryostatextend 유틸리티를 사용하여 충분히 큰 물리 볼륨을 추가합니다.

절차

  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 유틸리티는 여전히 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) 및 Cryo statreduce(8) 도움말 페이지