LVM: 다중 디스크 암호화 논리 볼륨을 복제하는 방법은 무엇입니까?

LVM: 다중 디스크 암호화 논리 볼륨을 복제하는 방법은 무엇입니까?

저는 아치 리눅스를 사용하고 있습니다. 단일 볼륨 그룹에 2개의 디스크로 암호화된 논리 볼륨(LVM의 LUKS)을 복제하고 싶습니다. 작은 문제가 있습니다. 일부 드라이브를 교체하고 싶습니다.

나는 가지고있다:

  • VG1: LV: PV(기존 드라이브 1) + PV(기존 드라이브 2)
sda (OldDrive1)
    -vg1-luks_encrypted_lv
sdb (OldDrive2)
    -vg1-luks_encrypted_lv

두 개의 다른 드라이브(NewDrive1 및 NewDrive2)가 있습니다. VG1의 복제본인 VG2를 만들고 싶습니다. 하지만 일부 드라이브를 교체하고 싶습니다. 그래서 나는 다음을 원한다:

  • VG1: LV: PV(기존 드라이브 1) + PV(새 드라이브 1)
  • VG2: LV: PV(기존 드라이브 2) + PV(새 드라이브 2)
sda (OldDrive1)
    -vg1-luks_encrypted_lv
sdb (OldDrive2)
    -vg2-cloned_luks_encrypted_lv
sdc (NewDrive1)
    -vg1-luks_encrypted_lv
sdd (NewDrive2)
    -vg2-cloned_luks_encrypted_lv

현재 계획은 각 드라이브를 복제하는 것입니다. 이전에 dd 사용을 고려했지만 좀 읽은 후에 pvmove를 사용해야 할까요? :

  • 이전 드라이브 1 -> 새 드라이브 1
  • 기존 드라이브 2 -> 새 드라이브 2

그러면 드라이브가 비트 단위로 복제되므로 LVM에서 물리적 드라이브를 교체할 수 있습니까? 제가 뭔가를 놓치고 있는 게 아닌가 걱정됩니다. 뉴스 드라이브를 LV에 병합하는 방법은 무엇입니까? 데이터를 잃고 싶지 않기 때문에 조언을 구하고 싶습니다. 감사해요.


편집하다:

@telcoM의 답변은 매우 유효합니다. 매우 감사합니다. 저는 온라인 방식을 사용합니다. 비슷한 일을 하고 싶은 사람이 있다면 주목할 만한 몇 가지 사항이 있습니다.

7단계에서:

이제 기본값은 lvconvert -mlvm 자체 미러 시스템이 아닌 raid1입니다. 자세한 내용을 읽어보세요 man lvconvert. 미러를 즉시 분할하고 싶기 때문에 lvm의 레거시 미러를 사용하고 미러 로그를 메모리에 저장하는 것이 훨씬 쉽습니다.

lvconvert --type mirror -m +1 --mirrorlog core vg1/luks_encrypted_lv OldDrive2 NewDrive2

--mirrorlog core이렇게 하면 미러 로그가 메모리에 저장된다는 점을 기억하세요 . 따라서 실행하기 전에 컴퓨터를 종료하지 마십시오. lvconvert --splitmirrors그렇지 않으면 미러 로그 파일이 손실됩니다.

9단계에서:

이 작업을 수행하기 전에 다음이 vgsplit필요합니다.파일 시스템을 마운트 해제하고 논리 볼륨을 비활성화합니다..

11단계에서:

$uuid대부분의 사람들은 아마도 이것을 알고 있을 것입니다. 그러나 실행하기 전에 UUID를 할당 해야 합니다 cryptsetup luksUUID --uuid $(uuid) /dev/mapper/VG2-LVx. 다음과 같은 것을 실행하여 시작하십시오 uuid=$(uuidgen).

답변1

“필요”는 강한 단어입니다. 원하는 것을 달성하는 방법은 여러 가지가 있습니다.

를 사용하면 pvmove암호화된 LV를 사용하면서 온라인으로 작업할 수 있습니다.

1.) pvcreate새 드라이버 1

2.)vgextend VG1 NewDrive1

3.) pvmove OldDrive2(실질적으로 의미: "가능한 경우 OldDrive2가 완전히 할당 해제되도록 LVM 할당 범위를 OldDrive2에서 VG1의 다른 드라이브로 이동합니다." 시간이 좀 걸립니다. erbose 옵션을 사용하여 세션을 screen추가 할 수 있습니다 .) .tmux-v

4.) OldDrive2를 사용하거나 pvs이제 pvdisplay OldDrive2완전히 할당되지 않았는지 확인하세요.

5.)pvcreate NewDrive2

6.)vgextend VG1 NewDrive2

7.) VG1의 각 LV에 대해: lvconvert -m +1 VG1/LVx OldDrive2 NewDrive2("VG1/LVx에서 미러를 생성하고 OldDrive2 및 NewDrive2에 미러 공간을 할당합니다"). 디스크에 미러 로그를 위한 공간이 없으면 --mirrorlog core여기에서 옵션을 사용해야 할 수도 있습니다.

8.) 미러가 동기화되면 VG1의 각 LV에 대해 다음을 수행합니다. lvconvert --splitmirrors 1 --name LVcopyx VG1/LVx OldDrive2 NewDrive2("OldDrive2 및/또는 NewDrive2에 있는 LVx 미러를 분할하고 이름 충돌을 피하기 위해 이름을 "LVcopyx"로 지정합니다.)

9.) vgsplit VG1 VG2 OldDrive2 NewDrive2("VG1에서 OldDrive2 및 NewDrive2를 분리하고 해당 LV를 제거한 후 결과 새 VG의 이름을 VG2로 지정합니다.")

10.) VG2의 각 LV에 대해: lvrename VG2 LVcopyx LVx원래 LV 이름을 복원합니다. 이제 복사본이 자체 VG로 분리되고 더 이상 충돌이 없습니다. 이제 8단계에서 LV 미러가 분할될 때 존재했기 때문에 VG1의 LV 복사본을 포함하는 새로운 VG2가 생겼습니다. ).

11.) 실제로 VG2를 사용하기 전에 VG1과 다른 고유한 UUID를 할당해야 하며 vgchange -ay VG2, cryptsetup luksUUID --uuid $(uuid) /dev/mapper/VG2-LVx암호화를 잠금 해제한 후에는 그 안에 있는 파일 시스템에도 새 UUID를 할당해야 합니다. BtrFS의 경우 이는 매우 중요합니다( btrfstune -u /dev/mapper/VG2-LVx-crypt). 다른 파일 시스템의 경우 이는 기본적으로 UUID 기반 설치가 작동할 수 있도록 하기 위한 편의일 뿐입니다.


VG를 오프라인으로 전환하고 디스크를 분리했다가 다시 연결할 수 있는 경우 다음을 수행할 수도 있습니다.

1.) cryptsetup luksCloseVG( vgchange -an VG1)를 제거하고 비활성화합니다. 부팅이나 핫플러그 시 불필요한 자동 활성화를 방지하려면 내보낸 것으로 표시( vgexport VG1)하세요.

2.) 계획에 따라 드라이브를 복제하십시오.

3.) 시스템이 OldDrive2 및 NewDrive2만 볼 수 있도록 드라이브를 분리합니다. 하드웨어에서 핫 스와핑을 허용하는 경우 echo 1 > /sys/block/<device name>/device/delete우아한 핫 스와핑을 사용하세요.

4.) 시스템을 부팅하거나 vgscan일반적인 핫플러그 후에 실행하십시오. 그런 다음 VG를 가져오고 이름을 바꾼 다음 을 사용 vgimport VG1하여 새 VG2에 이전 VG1과 다른 새로운 ID를 제공하고 및 을 vgrename VG1 VG2사용 하여 PV 수준에서 동일한 작업을 수행합니다 . 가져오고 이름을 바꾼 후에는 VG를 설치하거나 다른 작업을 수행하기 전에 VG를 활성화해야 한다는 점을 기억하십시오 .vgchange --uuid VG2pvchange --uuid OldDrive2pvchange --uuid NewDrive2vgchange -ay VG2

5.) VG를 활성화한 후 cryptsetup luksUUID --uuid=$(uuid) /dev/mapper/VG2-LVxdo를 사용하여 LUKS 컨테이너에 고유한 새 ID를 부여하고, 암호화 잠금을 해제한 후 파일 시스템별 도구를 사용하여 파일 시스템 수준에서 동일한 작업을 수행합니다. (이는 BtrFS에 특히 중요합니다. btrfstune -u /dev/mapper/VG2-LVx-crypt)

vgscan6.) 이제 OldDrive1 및 NewDrive1( 핫 플러그된 경우 사용됨)을 다시 연결 하고 vgimport VG1를 사용하여 "다시" 활성화할 수 있습니다 vgchange -ay VG1. 이제 필요에 따라 사용할 수 있는 완전히 독립적인 두 개의 VG가 생겼습니다.

답변2

dd clone 프로세스 중에 LUKS 컨테이너를 종료할 수 있는 경우 단계는 다음과 같습니다.

  • VG1에 NewDrive1 추가
  • "pvmove OldDrive2 NewDrive1"을 사용하십시오.
  • VG1에서 OldDrive2 제거
  • OldDrive2 + NewDrive2를 사용하여 VG2 만들기
  • VG2에서 원하는 LV를 생성하세요
  • dd VG1/LV -> VG2/LV 사용

동일한 머신에서 두 개의 복사본을 사용하려는 경우 LUKS 컨테이너와 포함된 파일 시스템의 UUID도 변경해야 합니다! 이 점을 지적해 주신 @telcoM에게 감사드립니다!

관련 정보