在 Ubuntu 上使用 mdadm 创建 RAID1 分区

Jon*_*nik 6 linux raid software-raid mdadm ubuntu

我正在尝试在我的 Ubuntu 9.10 工作站上设置一个 RAID1 分区。

在这个双引导系统上,Ubuntu 从一个单独的驱动器运行(/dev/sdc- 一个非常小的 SSD,这就是我需要更多磁盘空间的原因)。除此之外,还有两个传统的 500 GB 硬盘驱动器,它们安装了 Windows 7(我想保持 Windows 安装完整),并且大约有一半的空间未分配。这个空间是我想为 Linux 设置单个大型 RAID1 分区的地方。

(据我所知,这将是软件 RAID,而 Windows 分区在硬件 RAID 上-我希望这不是问题...编辑:请参阅 Peter 的评论。我想这应该不是问题,因为我看到了两个驱动器分别在 Linux 上。)

在两个磁盘,/dev/sda而且/dev/sdb,我创建,用fdisk,类型为“Linux RAID自动检测”相同新的分区来填补未分配空间。

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1          10       80293+  de  Dell Utility
/dev/sda2   *          11         106      768000    7  HPFS/NTFS
Partition 2 does not end on cylinder boundary.
/dev/sda3             106       30787   246439936    7  HPFS/NTFS
/dev/sda4           30787       60801   241095200+  fd  Linux raid autodetect
Run Code Online (Sandbox Code Playgroud)

所以,我想从 /dev/sda4 和 /dev/sdb4使用mdadm. 但我似乎没有得到它的工作:

$ sudo mdadm -Cv /dev/md0 -l1 -n2 /dev/sd{a,b}4
mdadm: Cannot open /dev/sda4: Device or resource busy
mdadm: Cannot open /dev/sdb4: Device or resource busy
mdadm: create aborted
Run Code Online (Sandbox Code Playgroud)

启动机器后,相同的命令产生:

$ sudo mdadm -Cv /dev/md0 -l1 -n2 /dev/sda4 /dev/sdb4
mdadm: Cannot open /dev/sda4: No such file or directory
mdadm: Cannot open /dev/sdb4: No such file or directory
Run Code Online (Sandbox Code Playgroud)

所以现在似乎在启动时没有自动检测到这些设备......尽管使用 fdisksda并且sdb看起来仍然正确。

编辑:再次重启后,设备又回来了:

$ ls /dev/sd*
/dev/sda   /dev/sda2  /dev/sda4  /dev/sdb1  /dev/sdb3  /dev/sdc   /dev/sdc2
/dev/sda1  /dev/sda3  /dev/sdb   /dev/sdb2  /dev/sdb4  /dev/sdc1  /dev/sdc5
Run Code Online (Sandbox Code Playgroud)

但在尝试创建 RAID 阵列时,“设备或资源繁忙”也是如此。很奇怪。任何帮助,将不胜感激!

更新设备映射器可能与此有关吗?如何/dev/mapperdmraid涉及到所有这些mdadm东西呢?两者都提供软件 RAID,但是.. 不同?很抱歉我在这里的无知。

/dev/mapper/有一些设备文件,我认为,以某种方式(通过SD {A,B} 3 SD {A,B} 1)匹配3个款Windows RAID分区。我不知道为什么有四个这样的数组。

$ ls /dev/mapper/
control               isw_dgjjcdcegc_ARRAY1  isw_dgjjcdcegc_ARRAY3
isw_dgjjcdcegc_ARRAY  isw_dgjjcdcegc_ARRAY2  
Run Code Online (Sandbox Code Playgroud)

解决方案:正是mdadm 维基百科文章将我推向了正确的方向。我发布了有关如何在此答案中使所有内容正常工作的详细信息。

Jon*_*nik 5

终于有进步了!

dmraid正如mdadm 的维基百科条目所建议的那样,确实是罪魁祸首。我尝试删除 dmraid包(并运行,update-initramfs但我不确定这是否相关)。

之后,重新启动,下面的设备/dev/mapper消失了(这很好 - 我不需要访问 Linux 上的 Windows NTFS 分区):

$ ls /dev/mapper/
control
Run Code Online (Sandbox Code Playgroud)

而且,最重要的是,mdadm --create有效!

$ sudo mdadm -Cv -l1 -n2  /dev/md0 /dev/sda4 /dev/sdb4
mdadm: size set to 241095104K
mdadm: array /dev/md0 started.
Run Code Online (Sandbox Code Playgroud)

我检查了/proc/mdstat并且mdadm --detail /dev/md0两者都表明新创建的数组一切正常。

$ cat /proc/mdstat
[..] 
md0 : active raid1 sdb4[1] sda4[0]
      241095104 blocks [2/2] [UU]
      [==========>..........]  resync = 53.1% (128205632/241095104) 
        finish=251.2min speed=7488K/sec      
Run Code Online (Sandbox Code Playgroud)

然后我在新分区上创建了一个文件系统:

$ sudo mkfs.ext4 /dev/md0 
Run Code Online (Sandbox Code Playgroud)

最后只是在/opt(& updated /etc/fstab)下安装了这个东西。(我当然也可以在这里使用 LVM,但坦率地说,在这种情况下,我没有看到任何意义,而且我已经浪费了足够的时间来尝试使其工作......)

所以现在 RAID 分区可以使用了,我有足够的磁盘空间。:-)

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdc5              70G   52G   15G  79% /
/dev/md0              227G  188M  215G   1% /opt
Run Code Online (Sandbox Code Playgroud)

更新:我的这个 RAID 设备仍然存在一些问题。重新启动后,即使我在 fstab 中有它,它也无法挂载,有时(重新启动后)它似乎处于非活动状态,甚至无法手动挂载。请参阅我发布的后续问题