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


12

我是全新安装的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. 我有3个 1 TB驱动器,而不是2个驱动器(无论使用什么大小)。
  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 

来自的相关输出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

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.

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

提前非常感谢您。

Answers:


16

我终于有了这项工作,这要归功于以下Stack Overflow帖子:使用Linux恢复Windows跨磁盘(LDM)?

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

解决方案:

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

sudo apt-get install ldmtool
sudo ldmtool create all

第一个命令安装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"
  ]
}

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


5岁的解决方案仍可在Ubuntu 18中使用。谢谢。
克里斯

2

ldmtool 由newby 使用Windows 7创建的Ubuntu 14.04 LTS挂载RAID 1 。** **

我有同样的问题。使用上面的答案,我很幸运,并与

gksu gedit /etc/init/mountall.conf 

通过改变线

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

/bin/ldmtool create all >/dev/null || true

然后添加

/bin/mount /dev/mapper/ldm_vol_NAME-Dg0_volume1 /media/WHEREVER

我的mountall.conf现在看起来像这样

     **fi
/usr/bin/ldmtool create all >/dev/null || true
/bin/mount -o rw /dev/mapper/ldm_vol_OCTO-CORE-Dg0_Volume1 /media/m
    exec mountall --daemon $force_fsck $fsck_fix $debug_arg
end script**

以前我有一个脚本可以对两行进行相同的处理

/usr/bin/ldmtool create all >/dev/null || true

/bin/mount -o rw /dev/mapper/ldm_vol_OCTO-CORE-Dg0_Volume1 /media/m

并添加

sh /home/ron/mirror to the end of /etc/rc.local 

现在它是在Ubuntu启动时挂载的

我不知道这对您有用!


2

其他答案在Mint 18.3中仅部分起作用。

自动安装Raid0驱动器更具挑战性,因为编辑/etc/init/mountall.conf从未在我的系统中进行过,我希望能够使用中的定义来装载跨区卷/etc/fstab,而不要使用中的脚本/etc/rc.local

所以这就是我所做的:

sudo apt-get install ldmtool

检查是否可以识别该卷,并可以通过以下方式正确安装该卷:

sudo ldmtool create all

知道我的系统可以看到并写入驱动器。我创建了一个服务(按照此站点的指示进行:( https://wiki.archlinux.org/index.php/Dynamic_Disks

创建一个文件etc/systemd/system/名为ldmtool.service与服务的描述:

[Unit]
Description=Windows Dynamic Disk Mount
Before=local-fs-pre.target
DefaultDependencies=no
[Service]
Type=simple
User=root
ExecStart=/usr/bin/ldmtool create all
[Install]
WantedBy=local-fs-pre.target

要在启动时启用服务:

sudo systemctl is-enabled ldmtool

查找所用卷的UUID:

sudo blkid

这给了我以下信息: /dev/mapper/ldm_vol_XXX-Dg0_Volume1: LABEL="6TB_Raid" UUID="0A281FC6281FAFA5" TYPE="ntfs"

所以我在其中创建了一行/etc/fstab

UUID=0A281FC6281FAFA5 /media/6TB_Raid ntfs-3g  auto,users,uid=1000,gid=100,dmask=027,fmask=137,utf8  0  0

每次启动时都存在该卷。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.