cryptsetup을 사용하여 암호화된 파티션을 생성하는 경우
cryptsetup -q luksFormat /dev/vdb3 /tmp/pwfile
cryptsetup -d /tmp/pwfile luksOpen /dev/vdb3 pv00
그리고 /dev/mapper/pv00에 중첩된 gpt 파티션 테이블을 설정합니다.
parted=/sbin/parted
disk=/dev/mapper/pv00
${parted} -s -- "${disk}" mklabel gpt
${parted} -s -- "${disk}" mkpart root 0% "${endp1}GiB"
${parted} -s -- "${disk}" mkpart swap "${endp1}GiB" "${endp2}GiB"
${parted} -s -- "${disk}" mkpart none "${endp2}GiB" "${endp3}GiB"
${parted} -s -- "${disk}" mkpart export "${endp3}GiB" 100%
lsblk
그런 다음 새 파티션이 예상대로 나열됩니다.
root@clone:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 254:0 0 8G 0 disk
`-vda1 254:1 0 8G 0 part /
vdb 254:16 0 128G 0 disk
|-vdb1 254:17 0 126M 0 part
|-vdb2 254:18 0 897M 0 part
`-vdb3 254:19 0 120.6G 0 part
`-pv00 252:0 0 120.6G 0 crypt
|-pv00p1 252:1 0 8G 0 part
|-pv00p2 252:2 0 8G 0 part
|-pv00p3 252:3 0 8G 0 part
`-pv00p4 252:4 0 90.6G 0 part
하지만 더 이상 암호화된 파티션을 끌 수 없습니다.
root@clone:~# cryptsetup luksClose pv00
Device pv00 is still in use.
dmsetup info -C
중첩된 파티션은 사용되지 않지만 /dev/mapper/pv00은 다음과 같습니다.
# dmsetup info -C
Name Maj Min Stat Open Targ Event UUID
pv00 252 0 L--w 4 1 0 CRYPT-LUKS2-f2a811407807491b875f414fa61f854d-pv00
pv00p1 252 1 L--w 0 1 0 part1-CRYPT-LUKS2-f2a811407807491b875f414fa61f854d-pv00
pv00p2 252 2 L--w 0 1 0 part2-CRYPT-LUKS2-f2a811407807491b875f414fa61f854d-pv00
pv00p3 252 3 L--w 0 1 0 part3-CRYPT-LUKS2-f2a811407807491b875f414fa61f854d-pv00
pv00p4 252 4 L--w 0 1 0 part4-CRYPT-LUKS2-f2a811407807491b875f414fa61f854d-pv00
AFAIU 중첩 파티션은 pv00을 계속 사용하게 합니다.
중첩된 gpt 파티션 테이블 대신 lvm2를 사용하면 이러한 문제가 발생하지 않습니다. 비활성화 볼륨 그룹을 사용할 수 vgchange -an vg00
있으며 pv00이 예상대로 종료됩니다. /dev/mapper/pv00에서 중첩된 gpt 파티션 테이블을 삭제하지 않고 비활성화하는 유사한 명령이 있습니까?
답변1
당신은 그것을 사용할 수 있습니다 kpartx
. 파티션 맵을 생성 kpartx -a /dev/mapper/pv00
하고 를 사용하여 삭제하는 데 사용됩니다 kpartx -d /dev/mapper/pv00
. 그렇지 않으면 수동으로만 삭제할 수 있습니다 dmsetup remove pv00p{1,2,3,4}
.
이것이 왜 문제가 됩니까?
커널(장치 매퍼, cryptosetup/LUKS, LVM 등)은 중첩된 파티션 테이블을 전혀 지원하지 않습니다. 이론적으로 LUKS 2는 자체적으로 여러 데이터 세그먼트/파티션을 지원할 수 있지만 이는 구현되지 않았습니다. 그럼 아무런 지원도 없이 이야기는 끝이 납니다.
parted
장치 매퍼 선형 대상을 생성하여 "속임수"를 사용합니다(기술적으로 LVM이 논리 볼륨에 사용하는 것과 동일함). 이는 묻지 않고 수행되며 parted
이 동작을 제어할 수 있는 옵션을 제공하지 않습니다.
따라서 이것이 지원될 수 있는 것처럼 보이지만 커널에게는 전혀 파티션 테이블이 아닙니다. LUKS 장치를 닫았다가 다시 열어도 이러한 파티션 장치가 다시 나타나지 않습니다(일부 사용자 정의 udev 매직을 사용하지 않는 한). 다시 실행해야 하지만 그래도 다른 소프트웨어에서 처리할 것으로 예상되므로 parted
나타나지 않습니다 .parted
별도의 뉴스 파일그것을 언급했다:
- 버전 3.1(2012-03-02)의 주목할만한 변경 사항 [안정적]
[...]
장치 매퍼 장치(LVM, dmraid)는 기본 장치가 마지막 장치가 아닌 한 더 이상 기본 장치 이름과 파티션 번호 사이에 "p"를 삽입하지 않습니다. 장치 이름의 문자는 숫자입니다. 이로 인해 parted는 kpartx 및 "리눅스 초창기" 파티션 이름 지정과 일치하게 되지만 dmraid 1.0.0-rc16-3과는 다르게 작동합니다. dmraid를 수정하기 위한 패치가 제출되었습니다.[이메일 보호됨]. 이 패치가 없으면 parted와 dmraid는 모두 /dev/mapper/foo1 및 /dev/mapper/foop1이라는 이름의 중복 파티션 장치를 생성합니다.
언급되어 있는데 dmraid
, 이것이 아마도 이 기능이 존재하는 이유일 것입니다. fakeraid/dmraid 설정에서 찾을 수 있는 파티션 테이블을 지원하고 싶을 수도 있습니다. 이 경우 dmraid
파티션 장치 자체가 생성되므로 파티션 테이블을 변경할 때만 업데이트할 parted
필요가 없습니다 .parted
중첩된 분할 테이블은 실제로 별 문제가 아니며 어쨌든 이를 사용하는 경우에는 부작용으로만 수행되므로 kpartx
이를 관리하기 위해 의존해야 합니다 .parted
parted
매핑과 . kpartx
이는 독립적인 구현입니다.