进行程序搜索

进行程序搜索

我有3个磁盘:

  1. 主操作系统 (CentOS)
  2. 使用 LUKS 加密的 HDD 数据(硬件 RAID10、LSI 逻辑卷)
  3. 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 很不错)或者在grepLinux 上(从这个 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 grepinfo 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有关信息,请参阅 的帮助。

相关内容