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および「Linuxの初期」パーティションの命名と一致しますが、dmraid 1.0.0-rc16-3とは異なる動作をします。 dmraidを修正するためのパッチが提出されました。[Eメール保護]。このパッチがない場合、 parted と dmraid は両方とも、/dev/mapper/foo1 と /dev/mapper/foop1 という名前の冗長パーティションデバイスを作成します。
言及されていますがdmraid
、これがおそらくこの機能が存在する理由でしょう。 fakeraid / dmraid設定で見つけることができるパーティションテーブルをサポートしたい場合があります。この場合、dmraid
パーティションデバイス自体が作成されるため、パーティションテーブルを変更したときにのみ更新するparted
必要はありません。parted
ネストされたパーティション表は実際にはあまり問題ではありませんkpartx
。parted
parted
マッピングと 。kpartx
これは独立した実装です。