是否可以在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文件系统:)
有没有人对如何从那里提取数据或给我一些指示有任何想法?
答案 0 :(得分:21)
现在ldmtool
存在,这是(更容易)答案。 ldmtool
读取LDM(也称为Windows动态磁盘)元数据,(以及其他内容)为相应的驱动器,分区和RAID阵列创建设备映射器条目,允许您随后访问和安装它们,就像其他块设备一样Linux操作系统。
该程序确实有一些限制,主要是因为它根本不修改LDM元数据。因此,您无法在Linux中创建LDM磁盘(请使用Windows),并且不应以读写模式安装缺少磁盘的RAID卷。 (ldmtool
不会修改元数据以反映这种情况,并且下次Windows组装RAID阵列时,会出现问题,因为并非所有驱动器都会同步。)
以下是要遵循的步骤:
ldmtool
。在Debian和Ubuntu系统上,键入apt-get install ldmtool
。在大多数其他最新的Linux发行版中应该同样容易。ldmtool create all
。/dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2
),然后用mount -t ntfs /dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2
之类的东西安装它。要在启动时自动完成此操作,您可能需要在挂载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)
这是我从上面的答案中得到的,并参考了[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字节块..