Linux - 在 LUKS 加密驱动器上不小心使用了 dd,有没有办法恢复?

cir*_*rco 5 linux partitioning dd luks partition-recovery

dd bs=4M if=image.iso of=/dev/sda oflag=sync在创建可启动驱动器而不是针对 USB 记忆棒时意外运行。

我相当肯定大多数文件都可以——iso只有~330mb,而驱动器是500gb。

问题是,那/dev/sda是在安装 manjaro 期间加密的,所以诸如此类的工具photorec无法访问这些文件。我也不确定被加密的驱动器将如何干扰被dd.

lsblk的输出显示了新的分区表:

sda      8:0    0 465.8G  0 disk 
??sda1   8:1    0   336M  0 part 
??sda2   8:2    0   2.4M  0 part
Run Code Online (Sandbox Code Playgroud)

fdisk -l 显示同样的事情:

Device     Boot Start    End Sectors  Size Id Type
/dev/sda1  *        0 688127  688128  336M  0 Empty
/dev/sda2        3820   8747    4928  2.4M ef EFI (FAT-12/16/32)
Run Code Online (Sandbox Code Playgroud)

/dev/mapper/只有control在其中,没有 luks 分区的迹象:

lubuntu@lubuntu:/dev/mapper$ ls 
control
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不确定旧的分区表是什么。我知道我在驱动器的末尾有 12gb 的交换空间,我只使用了一个分区/并且没有手动分离任何其他东西,/dev/sda3/被安装到/,我有点确定/boot默认情况下是分开的,但那是关于我所知道的一切。

我试过使用TestDisk,但深度搜索的输出似乎与我所拥有的不一致,我不想让事情变得更糟:

Disk /dev/sda - 500 GB / 465 GiB - CHS 60801 255 63
     Partition               Start        End    Size in sectors
>* FAT12                    0  60 41     0 138 54       4928 [NO NAME]
 D Linux                   38 127 26 60801  15 14  976150528
 D Linux Swap           59317 172 56 60801  80 15   23834624
Run Code Online (Sandbox Code Playgroud)

的输出head -c 1G /dev/sda | hexdump -C | grep LUKS是:

# head -c 1G /dev/sda | hexdump -C | grep LUKS
00011110  0a 4c 55 4b 53 2e 4d 4f  44 3b 31 00 50 58 24 01  |.LUKS.MOD;1.PX$.|
004346a0  64 65 6e 69 65 64 00 4c  55 4b 53 ba be 00 25 73  |denied.LUKS...%s|
00b394a0  64 65 6e 69 65 64 00 4c  55 4b 53 ba be 00 25 73  |denied.LUKS...%s|
Run Code Online (Sandbox Code Playgroud)

有没有希望恢复数据?

Max*_*min 5

如果没有 LUKS 头备份,就没有希望恢复 LUKS 容器。

坦率地说,答案包含在第一句话中,但我可以提供更多信息来解释情况。LUKS 加密解释的工作方式如下:分区的一些初始 MB(实际大小取决于 LUKS 版本和配置)分配给 LUKS 标头,而分区的其余部分 - 用于数据(根分区或主分区等) . LUKS 标头“包含”用于加密数据的“主”密码。这个主密码是由LUKS在第一次加密分区时生成的(“大”和“强”)。主密码受“钥匙槽密码”的“保护”——用户实际输入的密码来解密驱动器。简而言之,LUKS 标头包含受“用户”密码保护的主密码。所以,

关于 grep 的“LUKS.mod”输出 - 这看起来像LUKS.mod存储在 EFI 分区的 FAT 表中的 grub模块的名称。此输出显示引导分区(通常未加密)恰好位于您使用命令查询的前 1G 磁盘中head -c 1G /dev/sda | hexdump -C | grep LUKS。此信息无助于解决问题。

  • R..,看来您对 LUKS/cryptsetup 并不熟悉。可以使用特定的 cryptsetup 命令提取实际密钥。然而,知道主密钥会使 LUKS 标头无效——它的唯一目的(除了保留一些额外的技术信息)是将主密钥保密。如果知道主密钥,LUKS 加密本质上会简化为普通模式(用户密码)。关于保存主密钥 - 它可以保存为 LUKS 标头的一部分,cryptsetup 有一个选项来备份应该提前完成的标头。LUKS 的文档一开始就提到了。 (2认同)