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

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

我是 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 个驱动器(无论他们使用什么大小)。
  2. 我有RAID 0 分区分布在这三个驱动器上:一个 500 GB,另一个 2.3 TB。这意味着我在创建 RAID 阵列时不需要使用整个磁盘,而只需使用其中的一部分。
  3. 我用了一个非默认块大小至少在我几年前设置 RAID 0 分区时,我有一个 RAID 0 分区的块大小是 4kb(每个簇 4096 字节),而我的 2.3 TB 分区的块大小是 64kb(每个簇 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 分区?

提前非常感谢您。

答案1

感谢这篇 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 || trueexec 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,我的两个动态卷都使用 128 的块大小,尽管它们是在 Windows 中使用不同的块大小创建的。我猜这意味着块大小和块大小不是同义词。命令ldmtool show diskldmtool show partition可用于显示更多信息。

答案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/title/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

每次启动时,音量都会在那里。

答案3

Ubuntu 14.04 LTS 安装由 Windows 7 创建的 raid 1,ldmtool 由新手使用。** **

我也遇到了同样的问题。使用上面的答案,我很幸运地将它安装好了

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 启动时就被挂载了

我不知道这对你是否有用!

相关内容