使用Linux恢复Windows跨磁盘(LDM)?

时间:2011-12-08 07:02:44

标签: windows linux filesystems recovery computer-forensics

是否可以在Linux中读取Windows 2008 LDM分区?

我们有五个512GB LUN通过ISCSI导出到死Windows 2008,这个盒子不再需要它们了。 Windows认为它们现在是原始设备......所以我想用Linux读取分区。我正在使用最新的ubuntu来尝试保存至少一些数据。问题是到目前为止我发现的所有文档似乎都已过时(经常谈论w2k或XP逻辑磁盘管理器(LDM)。但我认为现在它与2008年不同。

Testdisk [0]给我以下输出

testdisk /list LUN01
TestDisk 6.11, Data Recovery Utility, April 2009
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org
Please wait...
Disk LUN01 - 536 GB / 500 GiB - CHS 65271 255 63, sector size=512

Disk LUN01 - 536 GB / 500 GiB - CHS 65271 255 63
     Partition                  Start        End    Size in sectors
 1 P MS LDM MetaData               34       2081       2048 [LDM metadata partition]
No FAT, NTFS, EXT2, JFS, Reiser, cramfs or XFS marker
 2 P MS Reserved                 2082     262177     260096 [Microsoft reserved partition]
 2 P MS Reserved                 2082     262177     260096 [Microsoft reserved partition]
 3 P MS LDM Data               262178 1048576966 1048314789 [LDM data partition]

注意:5 LUN中的每一个都具有相同的分区表。

在许多文献[1]中,他们谈论的是ldminfo,它不会返回任何有用的信息。我怀疑它现在已经过时,只是因为它很难找到:)而且因为它不起作用我猜Windows 2008使用不同的格式。

# ldminfo LUN01
Something went wrong, skipping device 'LUN01'
# losetup /dev/loop1 LUN01
# losetup -a
/dev/loop1: [fd00]:14 (/mnt/LUN01)
# ldminfo /dev/loop1 
Something went wrong, skipping device '/dev/loop1'

然后,我尝试用dmsetup连接它们但又没有运气。这就是我使用dmsetup的方式:

# losetup /dev/loop1 LUN01
# losetup /dev/loop2 LUN02
# losetup /dev/loop3 LUN03
# losetup /dev/loop4 LUN04
# losetup /dev/loop5 LUN05
# blockdev --getsize /dev/loop1
1048577000
# cat > w2008.mapping
# Offset into   Size of this    Raid type       Device          Start sector
# volume        device                                          of device
0               1048577000  linear          /dev/loop1       0
1048577000      1048577000  linear          /dev/loop2       0
2097154000      1048577000  linear          /dev/loop3       0
3145731000      1048577000  linear          /dev/loop4       0
4194308000      1048577000  linear          /dev/loop5       0
# dmsetup create myfs w2008.mapping
# mount -t ntfs /dev/mapper/myfs /mnt/final
NTFS signature is missing.
Failed to mount '/dev/loop1': Invalid argument
The device '/dev/loop1' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
# echo Poo.

所以仍然没有NTFS文件系统:)

有没有人对如何从那里提取数据或给我一些指示有任何想法?

2 个答案:

答案 0 :(得分:21)

现在ldmtool存在,这是(更容易)答案。 ldmtool读取LDM(也称为Windows动态磁盘)元数据,(以及其他内容)为相应的驱动器,分区和RAID阵列创建设备映射器条目,允许您随后访问和安装它们,就像其他块设备一样Linux操作系统。

该程序确实有一些限制,主要是因为它根本不修改LDM元数据。因此,您无法在Linux中创建LDM磁盘(请使用Windows),并且不应以读写模式安装缺少磁盘的RAID卷。 (ldmtool不会修改元数据以反映这种情况,并且下次Windows组装RAID阵列时,会出现问题,因为并非所有驱动器都会同步。)

以下是要遵循的步骤:

  1. 安装ldmtool。在Debian和Ubuntu系统上,键入apt-get install ldmtool。在大多数其他最新的Linux发行版中应该同样容易。
  2. 运行ldmtool create all
  3. 您现在应该在/ dev / mapper中有一堆新条目。找到正确的一个(在我的例子中,是一个RAID1阵列,所以/dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2),然后用mount -t ntfs /dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2之类的东西安装它。
  4. 要在启动时自动完成此操作,您可能需要在挂载ldm create all的内容之前,在启动顺序中的正确位置插入/etc/fstab的调用。打电话的好方法是:

    [ -x /usr/bin/ldmtool ] && ldmtool create all >/dev/null || true
    

    但是,如何让这个代码段在启动时的正确时间运行会有很大的不同,具体取决于您使用的分发版。对于Ubuntu 13.10,我在/etc/init/mountall.conf中插入了该行,就在脚本部分末尾的exec mountall ...调用之前。我现在可以在/etc/fstab中安装我的Windows LDM RAID1分区。享受!

答案 1 :(得分:2)

Windows动态卷5x磁盘,跨越,总计8TB。

这是我从上面的答案中得到的,并参考了[1]和[2]。

我发现在元数据分区中不仅仅包含磁盘顺序GUID信息。有一个清晰的结构,包含跨越的体积内的大小,偏移和偏移。

使用上面{2.1}和{2.2}部分的答案来确定驱动器的顺序。

我的4x磁盘从3ware 9650se控制器的单个RAID5阵列导出为4x 2tb块和1x小块。每个磁盘的格式为;

/dev/sdX1 = LDM metadata partition (~1mb)
/dev/sdX2 = Reserved msoft partition (~100mb)
/dev/sdX1 = LDM data partition (~1.99TB/20GB)

来自'xxd -a -l 65535 / dev / sdd1 |更多'我得到

0002800: 5642 4c4b 0000 000c 0000 000e 0000 0001  VBLK............
0002810: 0000 4033 0000 0031 0109 0844 6973 6b31  ..@3...1...Disk1
0002820: 2d30 3100 0000 0000 0000 0000 0000 0b00  -01.............
0002830: 0000 0000 0007 de00 0000 0000 0000 0004  ................
                     ^---^ Note 07 de (offset)
0002840: fffb f000 0108 0102 0000 0000 0000 0000  ................
         ^-------^ Note fffb f000 (size)
0002850: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
0002880: 5642 4c4b 0000 000d 0000 000f 0000 0001  VBLK............
0002890: 0000 4033 0000 0031 010a 0844 6973 6b32  ..@3...1...Disk2
00028a0: 2d30 3100 0000 0000 0000 0000 0000 0b00  -01.............
00028b0: 0000 0000 0007 de00 0000 00ff fbf0 0004  ................
                     ^---^ Offset   ^--------^ Now see spanned offset
00028c0: fffb f000 0108 0103 0000 0000 0000 0000  ................
         ^-------^ note size again!
00028d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
0002900: 5642 4c4b 0000 000e 0000 0010 0000 0001  VBLK............
0002910: 0000 4033 0000 0031 010b 0844 6973 6b33  ..@3...1...Disk3
0002920: 2d30 3100 0000 0000 0000 0000 0000 0b00  -01.............
0002930: 0000 0000 0007 de00 0000 01ff f7e0 0004  ................
                     ^---^ Offset   ^--------^ Now see spanned offset
0002940: fffb f000 0108 0104 0000 0000 0000 0000  ................
         ^-------^ note size again!
0002950: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
0002980: 5642 4c4b 0000 000f 0000 0011 0000 0001  VBLK............
0002990: 0000 4033 0000 0031 010c 0844 6973 6b34  ..@3...1...Disk4
00029a0: 2d30 3100 0000 0000 0000 0000 0000 0b00  -01.............
00029b0: 0000 0000 0007 de00 0000 02ff f3d0 0004  ................
                     ^---^ Offset   ^--------^ Now see spanned offset
00029c0: fffb f000 0108 0105 0000 0000 0000 0000  ................
         ^-------^ note size again!
00029d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
0002a00: 5642 4c4b 0000 0010 0000 0012 0000 0001  VBLK............
0002a10: 0000 4033 0000 0031 010d 0844 6973 6b35  ..@3...1...Disk5
0002a20: 2d30 3100 0000 0000 0000 0000 0000 0b00  -01.............
0002a30: 0000 0000 0007 de00 0000 03ff efc0 0004  ................ 
                     ^---^ Offset   ^--------^ Now see spanned offset
0002a40: 17b7 d000 0108 0106 0000 0000 0000 0000  ................ 
         ^-------^ And my final drive is the smallest
0002a50: 0000 0000 0000 0000 0000 0000 0000 0000  ................

因此,从上面可以清楚地看到数据部分的大小,分区内的偏移量和跨越体积内的偏移量。所以,让我们做数学;

Disk1:
Size of block = fffb f000 = 4294701056
Start offset = 07 de = 2014
Partition offset = 00 0000 00 = 0

Disk2:
Size of block = fffb f000 = 4294701056
Start offset = 07 de = 2014
Partition offset = 00ff fbf0 00 = 4294701056

Disk3:
Size of block = fffb f000 = 4294701056
Start offset = 07 de = 2014
Partition offset = 01ff fbf0 00 = 8589402112

Disk4:
Size of block = fffb f000 = 4294701056
Start offset = 07 de = 2014
Partition offset = 02ff fbf0 00 = 12884103168

Disk5:
Size of block = 17b7 d000 = 397922304
Start offset = 07 de = 2014
Partition offset = 03ff fbf0 00 = 17178804224

*Note: Use Excel, hex2dec() function*

这与dmraid转换为:

# File /etc/ntfsvolume
#offset into    Size of this    Raid    Device          Start sector
# volume                        type                    in volume
0               4294701056      linear  /dev/sdd3       2014
4294701056      4294701056      linear  /dev/sdc3       2014
8589402112      4294701056      linear  /dev/sdf3       2014
12884103168     4294701056      linear  /dev/sde3       2014
17178804224     397922304       linear  /dev/sdg3       2014

然后可以通过以下方式直接安装:

$ dmsetup create myvolume /etc/ntfsvolume
$ sudo mkdir /media/volume/
$ mount -t ntfs-3g /dev/mapper/myvolume /media/volume
$ sudo mount -t ntfs-3g -o ro /dev/mapper/myvolume /media/volume (mount read-only)

需要模块:

dmraid
ntfs-3g

警告!

在安装读写之前,请务必确保所有偏移量,磁盘大小和跨度偏移正确。如果偏移量错误,则会挂载ntfs-3g,并且文件内容不正确。

一个好的双重检查是使用Windows检查磁盘并在最后的额外信息循环。注意分配单元的总数,按块大小(我的是4096)的倍数然后除以512(正常扇区大小)。这应该与Windows报告的大小相匹配。

我的分区大小报告错误了比上述元数据表指示的大小小4096字节。我假设分区大小舍入为偶数。我计算2197090816,窗口说2197090815,4096字节块..

参考