入れ子になったパーティションテーブルを持つ暗号化されたパーティションを閉じる方法は?

入れ子になったパーティションテーブルを持つ暗号化されたパーティションを閉じる方法は?

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マジックを使用しない限り)。もう一度実行する必要がありますが、それでも他のソフトウェアで処理されると予想されるため、表示されませんpartedparted

別のニュースファイルそれを言及した:

  • バージョン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

ネストされたパーティション表は実際にはあまり問題ではありませんkpartxparted

partedマッピングと 。kpartxこれは独立した実装です。

関連情報