Восстановить раздел LUKS после перезаписи первых байтов контейнера LUKS? Система по-прежнему!

У меня есть раздел данных объемом 1,5 Тбайт, из которых я случайно перезаписал несколько байтов в начале, из-за такой опечатки, как:

ssh somewhere command | dd of=/dev/sda3 // should have used quotes here, dd was executed locally by mistake! 

/ dev / sda3 содержит контейнер LUKS для раздела ext4 объемом 1,5 ТБ с важными данными.

Когда я заметил проблему, которую я приостановил и убил dd; он должен был перезаписать менее 4K.

Есть ли способ восстановить данные? С тех пор компьютер не перезагружается, поэтому любые потерянные данные все еще могут быть в ОЗУ? В чем состоит первый (скажем) 4k контейнера LUKS?

Раздел все еще установлен, но показывает ошибки, такие как

 [1157706.786897] EXT4-fs error (device dm-4): htree_dirblock_to_tree:896: inode #2: block 9249: comm ls: bad entry in directory: rec_len % 4 != 0 - offset=0(0), inode=2791782547, rec_len=44529, name_len=90 

при попытке получить к нему доступ.

Пожалуйста помоги!

Благодаря!

PS: Я сделал еще несколько тестов, и кажется, что больше данных было переписано, чем просто 4K 🙁 Но все же очень небольшой процент данных с 1,5 ТБ! Могу ли я все же выгрузить данные из незагрязненного региона – возможно, поиск с помощью инструмента восстановления ext4 (если существует хороший) в дампе / dev / mapper / cr_sda3 – будет ли это работать?

Во-первых: запустите dmsetup table --showkeys . Сохраните вывод этого безопасного места – большая длинная шестнадцатеричная строка, которую он показывает, – это фактический ключ шифрования (мастер-ключ), используемый для защиты ваших данных. LUKS работает (упрощаясь здесь), зашифровывая этот ключ с вашей фразой (фразами), поэтому имейте в виду, что компромисс в этом ключе означает, что игра над изменением парольной фразы не поможет. Вы должны стереть и воссоздать раздел LUKS. Однако это же свойство означает, что даже с полностью уничтоженным заголовком LUKS вы можете использовать эту «таблицу» (включая ключ) для чтения ваших данных.

Строка, которую вы ищете (и может быть много строк, LVM также использует Device Mapper) выглядит так. За исключением вместо пучка 0, у вас будут случайные шестнадцатеричные цифры (0 – это то, что вы получаете без –showkey):

 Zia-swap_crypt: 0 11714560 crypt aes-xts-plain64 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 253:1 0 

(Вы делаете это сначала, потому что это быстро. Если питание отключается, машина выходит из строя и т. Д., Вы можете использовать ее для восстановления ваших данных. Без нее ваши данные будут невосстановимы.)

Вы хотите сохранить всю линию. Еще лучше, вся продукция. Вы можете dmsetup эту строку обратно в dmsetup чтобы восстановить таблицу, и, следовательно, ваш доступ к данным, даже без заголовка LUKS).

Затем скопируйте изображение расшифрованного устройства где-нибудь. Расшифрованное устройство – это имя, которое вы видите в выводе dmsetup выше; в моем случае /dev/mapper/Zia-swap_crypt . Это то же самое, что вы положили в /etc/fstab или перешли к mount .

Теперь вы можете скопировать данные из работающей системы (например, с помощью tar ) или, если это не удается, fsck восстановить файловую систему. (Затем скопируйте данные).

Вы можете использовать этот ключ для создания нового заголовка LUKS, и это должно работать, или просто повторно инициализировать его и начать заново.

В будущем, пожалуйста, используйте cryptsetup luksHeaderBackup .