LVM: 복구 실패 후 LVM 씬 풀/볼륨을 복구하는 방법은 무엇입니까?

LVM: 복구 실패 후 LVM 씬 풀/볼륨을 복구하는 방법은 무엇입니까?

손상된 LVM 씬 풀/볼륨 복구에 대한 조언을 듣고 싶습니다. LVM이 얇아지는 단계는 다음과 같습니다.

  1. 내 가상 풀 메타데이터가 꽉 찼기 때문에(99.4%) 풀이 고정되었습니다.
  2. 다음 두 명령을 사용하여 풀과 해당 메타데이터를 확장하려고 합니다. lvextend -L+50G vg/pool lvextend --poolmetadata +50m vg/pool
  3. 현재 lvs는 메타데이터가 여전히 99.4%에서 정체되어 있음을 보여줍니다.
  4. 메타데이터를 수정하기 위해 lvconvert --repair vg/pool을 사용해 보았습니다.
  5. 이제 내 풀은 비어 있는 것 같고 lvs는 풀 및 lv 데이터에 대해 0%를 표시합니다.
  6. 수정하기 전에 메타데이터로 다시 전환해 보았 lvconvert --thinpool vg/pool --poolmetadata pool-meta0 으나 여전히 데이터가 없습니다.

그래도 이 문제에서 회복할 수 있나요? 이 유선형 풀에는 저장하고 싶은 LV가 꽤 많이 있습니다.

매우 감사합니다!

답변1

내 경우에는 lvextend --poolmetadata나에게 요청하므로 변경이 허용되지 않습니다.수동 수리™. 그래서 내 경우에 어떤 효과가 있었는지 설명하겠습니다.

이 경우 모든 시스템 파티션은 씬 프로비저닝된 논리 볼륨에 있고 전체LUKS 내의 LVM 암호화물리적 분할. 암호화를 사용하지 않는 사용자는 cryptsetup2단계의 명령을 건너뛸 수 있습니다.


1.시스템 드라이브보다 저장 용량이 더 큰 추가 드라이브를 추가하고, 운영 체제 설치 미디어를 사용하여 복구 모드로 부팅하고, 파티션을 마운트하지 않고 루트 셸을 시작합니다. 복구 프로세스 중 성공 가능성을 높이려면 씬 프로비저닝을 지원하는 배포판과 최신 커널 버전용 설치 프로그램을 사용해 보십시오(예: CentOS 또는 RedHat을 통한 Fedora).

2.추가 드라이브를 식별 및 마운트하고, 전체 시스템의 백업 이미지를 수행하고, 암호화된 파티션을 마운트합니다.

$ fdisk -l                                   #Identify drives and partitions

(우리는 사용할 것이다/dev/sda시스템 드라이브의 경우,/dev/sdb추가 드라이브 및볼륨 이름이 예에서는 LUKS 볼륨 이름의 경우)

$ mount /dev/sdb1 /mnt                       #Mount the extra drive
$ cd /mnt
$ cat /dev/sda > sda.img                     #Back up the system drive
$ sha256sum /dev/sda > sda.sum
$ sed -i 's/\/dev\/sda/.\/sda.img/g' sda.sum
$ sha256sum -c sda.sum                       #Verify backup integrity
$ cryptsetup open /dev/sda2 volname          #Mount encrypted LVM

삼.이 시점에서 일부 배포판은 논리 볼륨을 자동으로 활성화하려고 시도할 수 있으며, 이로 인해 lvs명령이 vgs중단 pvs되고 논리 볼륨을 사용할 수 없게 됩니다. 이 단계에서는 프로세스가 종료되고 논리 볼륨이 올바른 상태로 전환됩니다.

$ ps aux | grep scan                         #Look for 'lvm pvscan' or similar
root     1234  0.0  0.0    64843  9472 ?    Ss   11:11   0:02 /usr/sbin/lvm pvscan -a ...

$ kill -9 1234                               #Get the PID and kill it with fire
$ pvscan                                     #Scan without activating volumes

(VG그리고풀 00볼륨 그룹 및 가상 풀 이름에 해당)

$ lvchange -an vg                            #Deactivate entire volume group
$ lvchange -pr -ay vg/pool00_tmeta           #Activate metadata in readonly mode

4.이제 메타데이터에 대한 새 논리 볼륨을 생성하고 복구할 차례입니다.

$ lvs -a --units m | grep pool00_tmeta       #Get the current metadata size
  [pool00_tmeta]                       vg ewu-ai----    128.00m
    
$ lvcreate -L 256M -n pool00R vg             #Create a larger logical volume
$ lvchange -ay vg/pool00R                   #Activate the new logical volume
$ thin_repair -i /dev/vg/pool00_tmeta -o /dev/vg/pool00R
$ thin_check /dev/vg/pool00R                 #Verify it's been repaired properly

5.마지막으로 가상 풀의 메타데이터 논리 볼륨을 교체하고 이전 볼륨을 삭제합니다.

$ lvchange -an vg                            #Deactivate all LVs again
$ lvconvert --thinpool vg/pool00 --poolmetadata vg/pool00R
$ lvs -a --units m | grep pool00_tmeta       #Verify the LVs have been swapped
  [pool00_tmeta]                       vg ewu-ai----    256.00m

$ lvremove vg/pool00R                        #Get rid of the damaged metadata

프로세스 중에 문제가 발생하는 경우 다음과 같이 추가 드라이브에서 백업을 복원할 수 있습니다.

$ cat /mnt/sda.img > /dev/sda

관련 정보