インターネットの指示に従って、破損した Android の暗号化 SD カードをデスクトップ Linux 上で正常にロック解除できました。
# dmsetup create crypt5 --table "0 `blockdev --getsize /dev/mmcblk0p2` crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /dev/mmcblk0p2 0"
photorec を使用して SD カードから直接復元すると、許容できないほどの時間がかかっていました。妥協案として、暗号化されたパーティションからディスク イメージ ファイルを作成して、SD カードの整合性を検証し、それを再利用して、後でイメージ ファイルからデータを復元することにしました。
# dd if=/dev/mmcblk0p2 of=/home/crash/Documents/128gb.img iflag=direct oflag=dsync
ここでの疑問は、「ディスク イメージ ファイルのロックを解除するにはどうすればいいか」です。ディスク イメージ ファイルは元のパーティションと同一であるはずなので、元のコマンドを微調整して、ブロック デバイスのサイズとディスク イメージ ファイルの場所を挿入してみました。
# blockdev --getsize /dev/mmcblk0p2
結果:
250048479
差し込んでください:
# dmsetup create crypt6 --table "0 250048479 crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /home/crash/Documents/128gb.img 0"
次のエラーが発生して失敗します。
device-mapper: reload ioctl on crypt6 failed: Invalid argument
Command failed
何が問題なのかわかりません。SD カードの消去とテストに進む前に、このディスク イメージのロックを解除できることを確認したいと思います。
答え1
dmcrypt
イメージ ファイルを処理する前に、ブロック デバイスに変換する必要があると思います。ここではloop
、デバイスを使用して、名前付きファイルへのブロック インターフェイスを提示します。
# Create a loop device and capture its name
lodev=$(losetup --show --find /home/crash/Documents/128gb.img)
echo "Using device $lodev for the image" >&2
# Map the crypto layer on to the loop block device
dmsetup create crypt6 --table "0 250048479 crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 $lodev 0"
...
# Delete the loop device when we have finished with it
losetup -d "$lodev"
実際、この構成を使用すると、定数を250048479
へのコールバックに置き換えることができます (バックティックではなく、blockdev
より現代的な を使用していることに注意してください)。$(...)
`...`
dmsetup create crypt6 --table "0 $(blockdev --getsize "$lodev") crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 $lodev 0"