如何使用 mdadm 在 Linux 中挂载 Windows 创建的软件 RAID1(镜像)?

如何使用 mdadm 在 Linux 中挂载 Windows 创建的软件 RAID1(镜像)?

我正在将我的 Windows 服务器切换到 Ubuntu,并尝试让我在 Windows 中创建的软件 RAID1(镜像)显示在 Ubuntu 中。我读到这是可能的这里使用 mdadm,但是我遇到了麻烦。

这是我正在尝试的:

Script started on Thu 12 Jan 2012 12:22:33 GMT
graeme@MediaCentre:~/Desktop$ cat /proc/partitions

major minor  #blocks  name

   8        0  120060864 sda
   8        1  117974016 sda1
   8        2          1 sda2
   8        5    2083840 sda5
   8       16 1465138584 sdb
   8       17 1465136128 sdb1
   8       32 1465138584 sdc
   8       33 1465136128 sdc1
graeme@MediaCentre:~/Desktop$ sudo mdadm --build /dev/md0 --chunk=128 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
[sudo] password for graeme:
mdadm: array /dev/md0 built and started.
graeme@MediaCentre:~/Desktop$ sudo mkdir /media/WinMirror/
mkdir: cannot create directory `/media/WinMirror/': File exists
graeme@MediaCentre:~/Desktop$ sudo mount -t ntfs /dev/md0 /media/WinMirror
Failed to read last sector (5860544511): Invalid argument
HINTS: Either the volume is a RAID/LDM but it wasn't setup yet,
   or it was not setup correctly (e.g. by not using mdadm --build ...),
   or a wrong device is tried to be mounted,
   or the partition table is corrupt (partition is smaller than NTFS),
   or the NTFS boot sector is corrupt (NTFS size is not valid).
Failed to mount '/dev/md0': Invalid argument
The device '/dev/md0' 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?
graeme@MediaCentre:~/Desktop$ exit
exit

Script done on Thu 12 Jan 2012 12:23:23 GMT

当我尝试 64 个块并且以其他顺序列出磁盘时,我会得到同样的结果。

有人知道我在这里做错了什么吗?

编辑:我按照 Paul 的要求添加了 fdisk -l 的结果:

graeme@MediaCentre:~$ sudo fdisk -l /dev/sdb
[sudo] password for graeme:

Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders, total 2930277168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x181bfef8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63  2930275119  1465137528+  42  SFS
graeme@MediaCentre:~$ sudo fdisk -l /dev/sdc

Disk /dev/sdc: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders, total 2930277168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x181bfef8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1              63  2930275119  1465137528+  42  SFS
graeme@MediaCentre:~$ sudo mdadm --build /dev/md0 --level=1 --raid-devices=2 /dev/sdb     /dev/sdc
mdadm: array /dev/md0 built and started.
graeme@MediaCentre:~$ sudo fdisk -l /dev/md0

Disk /dev/md0: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders, total 2930277168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x181bfef8

    Device Boot      Start         End      Blocks   Id  System
/dev/md0p1              63  2930275119  1465137528+  42  SFS

我想我刚刚发现无法“构建” RAID1,并且“构建”是查看 Windows 软件 RAID 的唯一方法。有人能帮我确认一下吗?

这是我设法从 mdadm 中得到的结果:

graeme@MediaCentre:~$ sudo mdadm --build --help
Usage:  mdadm --build device -chunk=X --level=Y --raid-devices=Z devices

 This usage is similar to --create.  The difference is that it creates
 a legacy array without a superblock.  With these arrays there is no
 difference between initially creating the array and subsequently
 assembling the array, except that hopefully there is useful data
 there in the second case.

 The level may only be 0, raid0, or linear.
 All devices must be listed and the array will be started once complete.
 Options that are valid with --build (-B) are:
  --bitmap=          : file to store/find bitmap information in.
  --chunk=      -c   : chunk size of kibibytes
  --rounding=        : rounding factor for linear array (==chunk size)
  --level=      -l   : 0, raid0, or linear
  --raid-devices= -n : number of active devices in array
  --bitmap-chunk=    : bitmap chunksize in Kilobytes.
  --delay=      -d   : bitmap update delay in seconds.

答案1

我完全可以确认您可以使用mdadm和几个简单的命令来完成此操作:

mdadm --build /dev/md0 --level=0 --raid-devices=2 /dev/sdc1 /dev/sdb1
mount /dev/md0 /mount/raid

更多细节:

  • 当然,您必须先安装 mdadm(终端命令:)sudo apt-get install mdadm
  • “md0” 只是我为 raid 起的名字,用于 Linux;你可以随便叫它什么。
  • “--level=0”部分很可能指的是 RAID 的类型,在我的情况下是 RAID 0。
  • “--raid-devices=2”部分很可能是 RAID 中的 HDD 数量。
  • 您必须首先创建文件夹“/mount/raid”(或您想要挂载或调用它的任何位置)
  • 在我的例子中,我在 Windows 7/8 中创建了一个软件 RAID 0,位于两个 2TB 硬盘上(此处sdc1sdb1)。此处,sdc1在命令中放在第一位,因为它包含 RAID 信息;如果您收到一些错误,提示没有 RAID 信息,您可以尝试在它们之间切换,应该没问题。

注意:如果您已经在 Windows 中制作了软件 RAID,请不要使用mdadm --create该命令,因为我认为它可能会覆盖 RAID 信息,最终您将会丢失您的 RAID 及其上的数据。

答案2

我非常确定这是不可能的。我尝试了所有方法,但都无济于事,最后我意识到我搞砸了,Windows 甚至无法再安装它。不得不使用一些高级恢复工具。大错特错!感觉自己像个十足的白痴,依赖没有备份的 raid,在没有备份的情况下搞乱 raid!哦,好吧。吸取教训。

答案3

这:

sudo mount -t ntfs /dev/md0 /media/WinMirror

尝试将 raid 阵列作为一个整体挂载,而 fdisk 显示您已对其进行分区:

    Device Boot      Start         End      Blocks   Id  System
/dev/md0p1              63  2930275119  1465137528+  42  SFS

要挂载分区,您应该使用:

sudo mount -t ntfs /dev/md0p1 /media/WinMirror

相关内容