Мне удалось успешно разблокировать поврежденную зашифрованную SD-карту Android на настольном Linux, используя инструкции из Интернета.
# dmsetup create crypt5 --table "0 `blockdev --getsize /dev/mmcblk0p2` crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /dev/mmcblk0p2 0"
Восстановление напрямую с SD-карты с помощью photorec заняло неприемлемое количество времени. В качестве компромисса я решил начать с создания файла образа диска из зашифрованного раздела, чтобы я мог проверить целостность 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"