LUKSパーティションを同じコンテンツを含むext4パーティションに置き換える

LUKSパーティションを同じコンテンツを含むext4パーティションに置き換える

ルクス(Linux統合キー設定)rootfsを含むパーティション。同じrootfsを含む暗号化されていないext4パーティションに置き換えたいと思います。広範囲にわたって検索した結果、このプロセスに役立つツールはありません。私が逃したものは何ですか?

そうでなければ、解決策は何ですか? LUKSパーティションの削除を使用しpartedてext4パーティションを作成したら、ここにrootfsをコピーしますか?

答え1

これは高い危険な作業なので、極度の注意を払って行う必要があります。

最も簡単なレベルには、次のユーティリティがあります。cryptsetup - 再暗号化この操作は許可されます。マニュアルページには次のように明確に記載されています。

   WARNING: The cryptsetup-reencrypt program is not resistant to
   hardware or kernel failures during reencryption (you can lose your
   data in this case).

   ALWAYS BE SURE YOU HAVE RELIABLE BACKUP BEFORE USING THIS TOOL.
   The reencryption can be temporarily suspended (by TERM signal or by
   using ctrl+c) but you need to retain temporary files named
   LUKS-<uuid>.[log|org|new].  LUKS device is unavailable until
   reencryption is finished though.

マニュアルページの「例」セクションによると:

   Remove LUKS encryption completely

          cryptsetup-reencrypt /dev/sdb1 --decrypt

これは、「リアルタイム」環境で実行する必要があるかもしれません(以下に示すように完全に実行される一時的なLinux環境を意味します)。Fedora シーンまたはUbuntuライブ

このワークフローの代わりに、データをバックアップしてパーティションを削除して再作成して、より明示的なアプローチをとることもできます。 Arch Linuxは、このワークフローと追加のトラブルシューティング手順に関する優れたドキュメントを提供しています。

https://wiki.archlinux.org/index.php/Removing_System_Encryption

もう一度申し上げますが、これは単なる作業ではなく、致命的なエラーが発生した場合はすべてのデータをバックアップすることが重要です。

答え2

@BrianRedbeardが言ったように、これにはツールがあります(cryptsetup-reencrypt)。関連文書をよくお読みください。これは危険な仕事です。 (内部データ変換の場合は常にそうです。1ステップだけ間違えると、すべてが失われます。)

楽しみのために手動プロセスを実行します。

実際にはとても簡単です(そして動作しません。別の方向に! )。実際には、次のようにコピーできます。

pv < /dev/mapper/cryptsdx1 > /dev/sdx1

ただし、同じ物理デバイスで読み書きするため、ddブロックサイズを使用する方が高速です(十分なRAMがある場合)。 HDDでは、視聴回数が少なく、視聴速度が遅いため、速度が速くなることがあります。

dd status=progress bs=1G iflag=fullblock if=/dev/mapper/cryptsdx1 of=/dev/sdx1

ただし、まずLUKSヘッダーをバックアップする必要があります。 LUKSヘッダーはこのプロセス中に最初に上書きされ、必要に応じて復元できないためです。

cryptsetup luksHeaderBackup /dev/sdx1 --header-backup-file myluksheader.backup

そして、バックアップがLiveCD環境のRAMにのみ保存されず、安全であることを確認してください。

LUKS デバイスは基本的に次のようになります。

| LUKS HEADER | ENCRYPTED DATA |

pv/dd 以降は次のようになります。

| DECRYPTED DATA | FREE SPACE |

したがって、LUKSヘッダはデバイスの先頭にあり、サイズは約2MiBです(以前は1MiBにいくつかのセクタを加えたサイズ)。削除することで、デバイスの端に空き容量があり、ファイルシステムを2MiB増やすことができます。あや!

したがって、データ自体はオフセット(通常2MiB、OK cryptsetup luksDump)にあります。ここでこのオフセットは重要です。これは、データを復号化するだけでなく移動する必要があることを意味します。復号化の開始は、LUKS ヘッダーが元々格納されている場所で発生します。

これはまた、プロセス全体にわたって復号化および暗号化の形で重なる領域があることを意味する。これは、マシンがクラッシュしてリカバリポイントを見つける必要がある場合に便利です。


それでは、交通事故に遭ったらどうすればいいですか?

まず、バックアップを使用して暗号化されたデバイスを再作成する必要があります。

cryptsetup --header myluksheader.backup luksOpen /dev/sdx1 cryptsdx1

次に、重なり合う点を見つけます。

skip=0 # or skip=X if you're sure at least X bytes were copied
step=$((1024*1024)) # 1MiB, use 512KiB for old 1MiB headers (offset / 2)
while ! cmp --bytes=$step /dev/sdx1 /dev/mapper/cryptsdx1 $skip $skip
do
    skip=$(($skip+$step))
done

cmp --bytes=$step /dev/sdx1 /dev/mapper/cryptsdx1 $skip $skip && echo $skip || echo fail

最後に続けてください。

dd status=progress bs=1G iflag=fullblock,skip_bytes oflag=seek_bytes \
   skip=$skip seek=$skip if=/dev/mapper/cryptsdx1 of=/dev/sdx1

実際のファイルシステムで2つの方法のいずれかを使用する前に、関係のないパーティション(またはループデバイス)で練習を実行して、まだ機能していることを確認することをお勧めします。

たとえば、ここでは基本形式で同じように機能しますが(4MiBヘッダー)、複数のデータセグメントなどの奇妙な項目をサポートする新しいLUKS2形式を考慮しません。したがって、そのような機能を使用する場合は少し複雑です(cryptsetup-reencryptまだ扱っていないようです)。

関連情報