web-dev-qa-db-ja.com

dm-crypt / LVMボリューム内でext4ファイルシステムを拡張するにはどうすればよいですか?

私はこのフォーマットのディスクを持っています:

_sdc                          8:32   0   1,8T  0 disk  
└─sdc1                       8:33   0   1,8T  0 part  
  ├─vg-lv1 (dm-0)          254:0    0   900G  0 lvm   /media/lv1
  └─vg-lv2 (dm-1)          254:1    0   923G  0 lvm   
    └─lv2 (dm-9)           254:9    0   923G  0 crypt /media/lv2
_

_lv2_はext4ファイルシステムですが、その下のブロックデバイス(論理ボリューム_vg-lv2_)は_dm-crypt_で暗号化されています。

このファイルシステムを安全に拡張するための手順は何ですか?

私はすでに論理ボリュームを拡大しており、_resize2fs_を実行する必要があることはわかっていますが、_dm-crypt_レイヤーで何かを実行する必要があると思います。

私は最初にこのファイルシステムを2つのステップ(疑似シェルスクリプト)で作成しました:

  • ブロックデバイスを消毒します

    1. _lvcreate vg-lv2_
    2. $randompassword = $(pwgen)
    3. _cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 /dev/mapper/vg-lv2_、キーとして_$randompassword_。
    4. _cryptsetup luksOpen /dev/mapper/vg-lv2 sanitize_
    5. _Nice -20 ionice -c 3 dd if=/dev/zero of=/dev/mapper/sanitize bs=1M_
    6. _cryptsetup remove sanitize_

  • 実稼働用のブロックデバイスを準備します

    1. パスフレーズを選ぶ
    2. _cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 /dev/mapper/vg-lv2_、新しいキーを使用。
    3. _cryptsetup luksOpen /dev/mapper/vg-lv2 lv2_
    4. _mke2fs /dev/mapper/vg-lv2_(引数は覚えていませんが、おそらくありませんでした)

本番環境で使用する準備ができたら、暗号化されていないブロックデバイスをゼロにしました(暗号化されたデバイスに疑似ランダムデータを効果的に書き込みます)。

さて、ファイルシステムを拡張したいので、最初のステップを実行して、使用する前にサニタイズする必要があります。これは私がする方法ではないことです:

  1. サイズ変更関数を呼び出すだけで、最終的にはスペース全体を使用しますが、このアイデアには満足できません。
  2. 論理ボリュームを以前のサイズに縮小し、新しいものを作成し、その中でそれらの手順を実行してから削除し、LVを再度拡張して、以前にサニタイズされた論理ボリュームのスペースを占めることを期待できます(「希望」)このアプローチが気に入らない理由です)
  3. 間違いなく、_/dev/mapper/vg-lv2_と_dd if=/dev/zero of=/dev/mapper/vg-lv2 bs=1M skip=$SKIPBLOCKS_のオフセットが何であるかを知る必要があります。 notこの_$SKIPBLOCKS_変数を間違える可能性があるので、実際に知る必要があるのは、その後の最初の空のブロックである既存のファイルシステムを前提として、どのように知ることができるかです。そのスペース以降をランダム化できます。

Dmcryptボリュームのサイズはresizeで変更できます。

cryptsetup --help|grep -i resize
    resize <name> - resize active device

それが完了したら、resize2fsできます。

ランダムデータについてコメントする場合は、ファイルシステム内からコメントすることもできます。したがって、サイズを変更してマウントし、最後のすべてのバイトをランダムファイルで埋めます。

dd if=/dev/urandom of=/deleteme bs=1M

そして、ファイルを削除します。

(最良の結果を得るには、tune2fsを使用して予約済みブロック数を0%(一時的)に設定します)

3
Halfgaar