如何正确访问 Windows 软件 RAID 0?

Dan*_*Dan 14 partitioning dual-boot mount raid

我是一个全新安装的 Ubuntu 新用户,我很想开始使用它。然而,我所有的重要数据都在 Windows 软件 RAID 0 阵列上,我需要它留在那里,因为我也是双启动 Windows。我需要在 Ubuntu 上访问这些数据,并且在获得访问权限之前无法真正完成任何事情。

我已经尽我所能研究了这个主题,我设法找到了一个非常有用的帖子:

这篇文章描述了如何让 Ubuntu 看到一个由两个驱动器组成的 Windows RAID 0 阵列。使用的主要命令是sudo mdadm --build /dev/md0 --chunk=64 --level=0 --raid-devices=2 /dev/sdd2 /dev/sdc2. 根据该用户和线程中的其他海报,它确实有效。那太棒了。

我还没有尝试遵循这些说明。为什么?该帖子包含一个警告,说明如果您输入错误的块大小,则不得写入;可以理解这会导致问题。我担心的是我的设置与他们的示例不同,我不确定输入的命令是否应该与我的设置完全相同。我害怕因为做错而破坏它,因此希望得到更有经验的人的建议。

这就是我的设置与他们的示例的不同之处:

  1. 我有三个1 TB 驱动器,而不是两个驱动器(无论他们使用什么大小)。
  2. 我有两个RAID 0 分区分布在这三个驱动器上:一个 500 GB 和 2.3 TB。这意味着在创建 RAID 阵列时我不需要使用完整的磁盘,而是只使用其中的一部分。
  3. 几年前设置时,我对至少一个 RAID 0 分区使用了非默认块大小。我不知道这个块大小是否与他们提到的块大小相同。我的 500 GB 分区的块大小为 4 kb(每个集群 4096 字节),我的 2.3 TB 分区的块大小为 64 kb(每个集群 65536 字节)。

来自sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL(仅针对这三个 RAID0 驱动器)的相关输出是:

NAME   FSTYPE   SIZE MOUNTPOINT            LABEL
sdb           931.5G            
??sdb1            1M            
??sdb2          127M            
??sdb3        931.4G            
sdc           931.5G            
??sdc1            1M            
??sdc2          127M            
??sdc3        931.4G            
sdd           931.5G            
??sdd1        166.7G            
??sdd2        764.7G 
Run Code Online (Sandbox Code Playgroud)

来自cat /proc/partitions(仅针对这三个 RAID0 驱动器)的相关输出是:

8       16  976762584 sdb
8       17       1024 sdb1
8       18     130048 sdb2
8       19  976631478 sdb3
8       32  976762584 sdc
8       33       1024 sdc1
8       34     130048 sdc2
8       35  976631478 sdc3
8       48  976762584 sdd
8       49  174763008 sdd1
8       50  801865728 sdd2
Run Code Online (Sandbox Code Playgroud)

Ubuntu 中的“磁盘”程序显示我的驱动器的以下分区:

/dev/sdb:   GUID Partition Table .
/dev/sdb1:  1.0 MB, Microsoft LDM metadata.
/dev/sdb2:  133 MB, Microsoft Reserved.
/dev/sdb3:  1.0 TB, Microsoft LDM data.
/dev/sdc:   GUID Partition Table partitioning.
/dev/sdc1:  1.0 MB, Microsoft LDM metadata.
/dev/sdc2:  133 MB, Microsoft Reserved.
/dev/sdc3:  1.0 TB, Microsoft LDM data.
/dev/sdd:   Master Boot Record partitioning.
/dev/sdd1:  179 GB, Unknown.
/dev/sdd2:  821 GB, Unknown.
/dev/sdd:   136 MB, Unallocated space.
Run Code Online (Sandbox Code Playgroud)

我希望我在这里提供了足够的信息。所以现在,我的问题是:我在设置中输入的正确命令是什么,以便我可以从 Ubuntu 访问我的两个 Windows RAID 0 分区?

非常感谢您提前。

Dan*_*Dan 20

感谢这篇 Stack Overflow 帖子:Windows Spanned Disks (LDM) restore with Linux?

发现这些难以捉摸的信息是极其困难的。花了几天的时间搜索,我想我没有找到它,因为帖子没有提到 RAID,所以它没有出现在我的搜索结果中。不过,它绝对适用于我的 Windows 软件 RAID 0。

解决方案:

解决方法其实很简单。有一个专门为此目的而构建的出色工具,称为ldmtool. 它能够读取和使用使用 LDM(逻辑磁盘管理器)的 Windows 动态磁盘。它不是默认安装的,但包含在 Ubuntu 存储库中。我所要做的就是执行两个命令:

sudo apt-get install ldmtool
sudo ldmtool create all
Run Code Online (Sandbox Code Playgroud)

第一个命令安装ldmtool,第二个命令自动为所有连接的 Windows 动态磁盘创建设备映射。这些映射位于/dev/mapper/并且可以手动挂载mount -t ntfs /dev/mapper/mapfilename,但我不需要这样做 - 在我运行上述两个命令后,Ubuntu 会自动为我挂载它们。这就是我所要做的,我可以立即从文件浏览器访问它们!

链接的帖子包括每次启动时自动执行此操作的建议。只需打开文件/etc/init/mountall.conf并在文件末尾附近的行[ -x /usr/bin/ldmtool ] && ldmtool create all >/dev/null || true之前添加该行exec mountall ...

这个解决方案的全部功劳归功于 Christian Hudon,他在 Stack Overflow 上发布了它作为答案。谢谢!

为了对此添加更多信息,我使用了一些其他ldmtool命令来查询我的卷以获取信息:

sudo ldmtool scan /dev/sdd
[
  "e856a65f-e558-11e1-ae19-bc5ff435f790"
]

sudo ldmtool show diskgroup e856a65f-e558-11e1-ae19-bc5ff435f790
{
  "name" : "Dan-PC-Dg0",
  "guid" : "e856a65f-e558-11e1-ae19-bc5ff435f790",
  "volumes" : [
    "Volume1",
    "Volume2"
  ],
  "disks" : [
    "Disk1",
    "Disk2",
    "Disk3"
  ]
}

sudo ldmtool show volume e856a65f-e558-11e1-ae19-bc5ff435f790 Volume1
{
  "name" : "Volume1",
  "type" : "striped",
  "size" : 1048578048,
  "chunk-size" : 128,
  "hint" : "D:",
  "partitions" : [
    "Disk1-01",
    "Disk2-01",
    "Disk3-01"
  ]
}

sudo ldmtool show volume e856a65f-e558-11e1-ae19-bc5ff435f790 Volume2
{
  "name" : "Volume2",
  "type" : "striped",
  "size" : 4811194368,
  "chunk-size" : 128,
  "hint" : "E:",
  "partitions" : [
    "Disk1-02",
    "Disk2-02",
    "Disk3-02"
  ]
}
Run Code Online (Sandbox Code Playgroud)

没有必要运行上述命令,ldmtool create all创建映射的所有必要工作也是如此。我只是将它们包含在内,因为我已经在问题中包含了有关我的设置的信息,因此这些信息可能对以后看到这篇文章的任何人都有帮助。特别是,我们可以看到ldmtool,尽管在 Windows 中创建的块大小不同,但我的两个动态卷都使用了 128 的块大小。我想这意味着块大小和块大小不是同义词。命令ldmtool show diskldmtool show partition可用于显示更多信息。

  • 5 年前的解决方案仍在 Ubuntu 18 中工作。谢谢。 (2认同)