我有3个磁盘:
- 主操作系统 (CentOS)
- 使用 LUKS 加密的 HDD 数据(硬件 RAID10、LSI 逻辑卷)
- Windows 10(最近安装用于测试)
我的问题是,当我安装 Windows 10 时,它通过在我的 LUKS 磁盘上创建引导加载程序破坏了我的磁盘......现在我无法解密我的磁盘,但我真的需要我的数据。
我可以使用 Gparted 或其他工具恢复该过程吗?我希望我的数据不会被该引导加载程序破坏……
我真的需要帮助!
编辑1 增加了一些信息
fdisk -l
Disk /dev/sda: 12000.0 GB, 11999999164416 bytes, 23437498368 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x385dcf68
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 7 HPFS/NTFS/exFAT
在 Xen2050 回答之后,我的结果如下:
LANG=C grep -obUaP "\x4C\x55\x4B\x53\xBA\xBE" /dev/sda
164822601573:LUKS��
然后希望又回来了!
我使用 1 字节的块大小添加标题
dd if=/dev/sda of=luks_header bs=1 skip=164822601573 count=2097152
现在我有了我的 luks 标头,我可以用 vi 确认它以 LUKS 启动
LUKSº¾^@squashfs^@sqsh^@hsqs^@lvm2pv^@LVM2 001^@btrfs^@
现在下一步是重写我的 luks 标头......
编辑2 新增开发
来自这个unix.stackexchange: https://unix.stackexchange.com/questions/177831/recovering-a-luks-partition
我找到了我的标题的开头
hexdump -s 164822601573 -C /dev/sda | grep LUKS
2660314f65 4c 55 4b 53 ba be 00 73 71 75 61 73 68 66 73 00 |LUKS...squashfs.|
设置循环设备
losetup -o 0x2660314f65 -r -f /dev/sda
losetup -a
cryptsetup luksOpen /dev/loop0 luksrecover
但是我收到此错误消息:
Unsupported LUKS version 115.
我认为我的标题已损坏...这是我的开头:
|LUKS...squashfs.|
|sqsh.hsqs.lvm2pv|
|.LVM2 001.btrfs.|
|_BHRfS_M.f2fs.. |
|...<device.</dev|
|ice>.PRI.TIME.DE|
|VNO.%s-XXXXXX.w.|
| PRI="%d".>%s</d|
|evice>.. %s="%s"|
|.%s.old.1.42.9.2|
|8-Dec-2013......|
|................|
*
|...............d|
|.... n;.0.&.A.v.|
|QkkXa.M<q.P ...D|
|.........a...d..|
|...x............|
|.............T..|
|..........@.....|
|.i@<device DEVNO|
|="0x%04lx" TIME=|
|"%ld"...........|
这是一个功能性标题
|LUKS....aes.....|
|................|
|........xts-plai|
|n64.............|
|........sha1....|
|................|
|............... |
|2x.l...r0....8|.|
|...'..[!D..J..tp|
|....?J...~.x"s.=|
|.?.....]981be66e|
|-a0b0-4daa-8a2c-|
|5a6e5d8ed3ae....|
|..q....ZG..}#..,|
|...w..!|..3..>.?|
|.;.&...-........|
|................|
|................|
答案1
确实,您需要的是 LUKS 标头的备份。但是,也许它实际上没有被覆盖,只有磁盘分区表被弄乱了,您无法找到 LUKS 设备的启动。
LUKS 标头实际上以字符开头,LUKS
然后是两个非 ASCII 字符 0xba 和 0xbe,因此您可以搜索整个磁盘以查找该字符串。全部以十六进制表示,它是
4C 55 4B 53 BA BE
进行程序搜索
相簿应该能够找到LUKS 标头/文件它位于 Debian 和 Ubuntu 源中,并且也适用于 Windows,告诉它搜索你的整个驱动器。
或者尝试测试磁盘同样(来自同一作者),它可以尝试搜索丢失的分区并且可能找到 LUKS 分区。
搜索“你自己”
或者,你可以用你最喜欢的十六进制编辑器(Bless 很不错)或者在grep
Linux 上(从这个 Q):
LANG=C grep -obUaP "\x4C\x55\x4B\x53\xBA\xBE" /dev/your-hard-drive-device
如果没有初始LANG=C
设置,它对我来说不起作用,我通常的“语言”显然是 UTF-8,这些选项是--only-matching --byte-offset --binary --text --perl-regexp参见man grep
或info grep
)
如果找到 LUKS 标头,它应该输出该标头的起始字节。然后,您可以使用dd
它将 LUKS 容器复制到安全的地方,或者使用该信息创建一个从正确位置开始的分区,尽管先制作备份副本是最安全的,但您不想错误地覆盖标头。
例如:
$ LANG=C grep -obUaP "\x4C\x55\x4B\x53\xBA\xBE" file 5242880:LUKS��
这里,文件大小为 5,242,880 字节(在 Linux 中,一切都是文件,例如整个硬盘也是如此
/dev/sdb
)。
现在是进行标题备份的好时机,它们长 1M 或 2M,因此使用 复制接下来的 2M dd
。
dd
需要一点数学知识来确定一个好的块大小(-bs), it tends to read extremely slow with a low block size, the default 512 bytes is probably too slow for more than a few megabytes on a hard drive, 1M (1048576 bytes,
dd` 知道 M、G、K 等)应该没问题。
在上面的例子中,它恰好距离开始位置正好是 5M(5242880 / 1048576 = 5),因此该命令将从 5M 复制到文件/设备的末尾,并写入文件
outfile
(在当前目录中):dd if=file of=outfile bs=1M skip=5
对于仅有标题的备份,您可以使用count=N
在 N 个块之后停止复制,只需确定您选择的块bs=
有多少个以 2 兆字节为单位,高于这个数字就只有 2 个。dd
有关信息,请参阅 的帮助。