저는 아치 리눅스를 사용하고 있습니다. 단일 볼륨 그룹에 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 -m
lvm 자체 미러 시스템이 아닌 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 luksClose
VG( 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 VG2
pvchange --uuid OldDrive2
pvchange --uuid NewDrive2
vgchange -ay VG2
5.) VG를 활성화한 후 cryptsetup luksUUID --uuid=$(uuid) /dev/mapper/VG2-LVx
do를 사용하여 LUKS 컨테이너에 고유한 새 ID를 부여하고, 암호화 잠금을 해제한 후 파일 시스템별 도구를 사용하여 파일 시스템 수준에서 동일한 작업을 수행합니다. (이는 BtrFS에 특히 중요합니다. btrfstune -u /dev/mapper/VG2-LVx-crypt
)
vgscan
6.) 이제 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에게 감사드립니다!