LUKSコンテナをパーティションの途中から最初に移動するには?

LUKSコンテナをパーティションの途中から最初に移動するには?

tl;drの場合は、一番下までスキップしてください。

ドライブの先頭にはMac OS Xがあり、ドライブの最後には3つのGNU / Linuxパーティションを持つデュアルブート設定があります。fdiskダンプを取得できる関連マシンはありませんが、元のディスクレイアウトの概要は次のとおりです。

/dev/sda1: EFI System Partition
/dev/sda2: Macintosh HD (main OS X partition)
/dev/sda3: Recovery HD (part of OS X's recovery system)
/dev/sda4: /
/dev/sda5: /home inside a LUKS container
/dev/sda6: swapspace inside a LUKS container

このシステムにGNU / Linuxを再インストールしており、その一部として/。しかし、/bootこのパーティションを作成するには、Macintosh HDのサイズを変更し、Recovery HDをMacintosh HDの最後に戻しました。私もこの機会を利用して私のビジネスをより大きくしました/。最終結果は次のディスクです。

/dev/sda1: EFI System Partition
/dev/sda2: Macintosh HD (main OS X partition) (smaller than before)
/dev/sda3: Recovery HD (part of OS X's recovery system)
/dev/sda4: /boot
/dev/sda5: / (larger than before, and now inside a LUKS container)
/dev/sda6: /home inside a LUKS container
/dev/sda7: swapspace inside a LUKS container

長すぎます。:問題は、構成順序のためにcryptsetup中間に作成されたLUKSコンテナがあることです/dev/sda5。途中でロック解除/インストール/復元をしようと探しても何もありません。暗号化コンテナをパーティションの先頭に移動するにはどうすればよいですか?これには2つの異なるステップが含まれます(実際には発見するディスクに保存し、その情報を使用して移動します。)わかりません。 Google 検索結果がありません。

答え1

LUKSには独自のヘッダーがあり、次のことで可能なオフセットを見つけることができますgrep

# grep -a -b --only-matching 'LUKS' /dev/sda5
1832480940:LUKS
1959072314:LUKS
2019974297:LUKS

見つかった可能なオフセットごとにループデバイスを作成し、有効なLUKSデバイスであることを確認できます。

# losetup --find --show --offset 1832480940 --read-only /dev/sda5
/dev/loop3
# cryptsetup luksOpen /dev/loop3 luksloop3
...mount -o ro, ls, backup, umount...
# cryptsetup luksClose luksloop3
# losetup -d /dev/loop3

正しいオフセットが見つかったら、それをパーティションの先頭に移動できますdd。これは危険、オフセットが間違っているか、操作がキャンセルされるとデータが失われます。したがって、何が起こっても最初にバックアップする必要があります。

# dd if=/dev/sda5 of=/dev/sda5 bs=1M iflag=skip_bytes skip=1832480940

動作していることを確認してください。

# cryptsetup luksOpen /dev/sda5 luks

それ以外の場合は、バックアップから復元します。

関連情報