一个有 2 个分区的驱动器 - 第一个分区是纯 ext4,第二个分区是加密的 LUKS。分区表已被覆盖。我找到了需要恢复的第二个分区的开头,如下所示:
#hexdump -s 400000m -C /dev/sdc | grep LUKS
61d3dec850 79 c8 81 6d e5 4c 55 4b 53 40 49 aa 29 df de d7 |y..m.LUKS@I.)...|
然后:
#losetup -o 0x61d3dec850 -r -f /dev/sdc
#losetup -a
/dev/loop0: [0005]:477209 (/dev/sdc), offset 420166420560
到目前为止还不错,然后出现了这个问题:
#cryptsetup luksOpen /dev/loop0 luksrecover
Device /dev/loop0 is not a valid LUKS device.
请指教如何继续。偏移量错误吗?我是否应该按照此处的建议寻找标识 ext4 的魔法数字 0xEF53https://unix.stackexchange.com/questions/103919/how-do-i-find-the-offset-of-an-ext4-filesystem?
请注意,这是一个 1TB 的驱动器,因此我需要一个建议,如果可能的话,不要强制再次扫描整个驱动器(数小时和数小时),例如 testdisk 似乎没有选项从指定的偏移量开始以节省扫描时间。
PS:虽然很接近,但还不完全正确:https://unix.stackexchange.com/questions/177070/lvm-encrypted-partition-without-partition-table
答案1
第一个明显的问题是你找错了地方。那不是 LUKS 标头。
这LUKS 分区头以六个字节开头,定义为L
、U
、K
、S
,后跟 0xBA、0xBE。您可以清楚地看到,这六个字节中有两个不存在。
您正在寻找的内容非常明显:
00000000 4c 55 4b 53 ba be 00 01 61 65 73 00 00 00 00 00 |LUKS....aes.....|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 78 74 73 2d 70 6c 61 69 |........xts-plai|
00000030 6e 36 34 00 00 00 00 00 00 00 00 00 00 00 00 00 |n64.............|
00000040 00 00 00 00 00 00 00 00 73 68 61 31 00 00 00 00 |........sha1....|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000060 00 00 00 00 00 00 00 00 00 00 10 00 00 00 00 20 |............... |
您需要查看磁盘上的其他位置。也许您需要后退一点?或者前进。或者让 testdisk 自行处理;如果磁盘上的任何地方都有有效的 LUKS 标头,它最终应该会找到它。