我刚刚不小心用新的 LVM 标头覆盖了我的卷的 LUKS 元数据。我有原始 LUKS 标头的副本,但找不到它。为了以防万一,我在拇指驱动器上制作了现在已损坏的卷的前 10MB 的 dd 映像。
我的问题是:是否仍然可以恢复 LUKS 标头?特别是,如果我使用相同的密码、密钥长度等运行“cryptsetup luksFormat”,我会看到旧数据吗?是否涉及任何加盐,我也可以指定盐吗?
我猜如果 sizeof(lvm2 header) < position_of_salt_in_LUKS_header,我可能能够修复问题。有人能告诉我相关的标题吗?
我是否彻底信服了,或者还有一丝希望……?
答案1
LUKS2 有一个备份头,但是 LUKS1(您可能正在使用它,因为 LUKS2 很新并且很少有发行版支持它)没有。
如果你自己没有备份标题,你就完蛋了。去备份吧。
如果你做过备份标头,然后恢复块设备的前 2MB,因为这是 LUKS1 标头长度,您可能有机会。
dd bs=2M count=1 if=/home/zonko/backup_luks_header.bin of=/dev/block_device
正如 Sven 在评论中指出的那样,您还可以使用cryptsetup luksHeaderRestore
,其实际上做了同样的事情。
答案2
对于未来被搜索引擎引导到这里的惊慌失措的人们:你不是第一个也不是最后一个自摆乌龙的人。善待自己吧。
另外,如果你也遇到类似的事情,而且你没有备份,也没有 header-backup,那么首先确保你已经覆盖了 LUKS header,而不是只是想你有。
具体来说,如果您使用加密分区,LUKS 标头(正如您所猜测的)位于分区的开始位置,而不是设备的开始位置。因此,如果您只是覆盖了块设备的开始位置并擦除了分区表(可能是由于 dd 故障?问我我怎么知道的......),您的分区可能不会显示出来,但它仍然在那里,只要您没有写入分区(第一个分区通常位于 1MB=1024KB)。如果是这种情况,只需重新创建分区表即可。
与往常一样,当灾难来临时 - 首先制作磁盘映像并对其进行实验,这样就不会让糟糕的情况变得更糟。
要检查标头是否仍然存在,请在十六进制编辑器中打开块设备,然后查找主 LUKS 标头和/或辅助 LUKS 标头
#define MAGIC_1ST "LUKS\xba\xbe"
#define MAGIC_2ND "SKUL\xba\xbe"
如果有的话,那你就非常幸运了。
有些人建议恢复分区表testdisk
,但就我的情况而言,cfdisk
重建分区表并消除损坏就足够了。幸运的是,我只覆盖了驱动器的前 30k,并且 LUKS 安装在第一个(也是唯一一个)分区上。这也使得重建分区表变得容易。
另外,如果你正在读这篇文章——请备份你的 LUKS 头文件现在和
sudo cryptsetup luksHeaderBackup --header-backup-file BACKUP_FILENAME DEVICE