将 RAID0 条带化转换为 RAID4

将 RAID0 条带化转换为 RAID4

我有一个三磁盘 RAID 0 阵列,并运行以下命令来添加第四个磁盘:

mdadm --manage /dev/md127 --add /dev/xvdi

每个磁盘都是 1TB EC2 卷。阵列大约需要 40 小时才能重塑。大约 1 小时后,重塑停止,卷变得无法访问。我重新启动了机器,重塑继续,然后似乎成功完成,但现在阵列级别报告为 RAID 4,可用容量没有变化。

mdadm --detail /dev/md127现报告如下:

/dev/md127:
        Version : 1.2
  Creation Time : Wed Jul  1 22:26:36 2015
     Raid Level : raid4
     Array Size : 4294965248 (4096.00 GiB 4398.04 GB)
  Used Dev Size : 1073741312 (1024.00 GiB 1099.51 GB)
   Raid Devices : 5
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Sun Oct 11 07:40:48 2015
          State : clean, degraded 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 512K

           Name : [removed]
           UUID : [removed]
         Events : 63530

    Number   Major   Minor   RaidDevice State
       0     202      160        0      active sync   /dev/xvdk
       1     202      144        1      active sync   /dev/xvdj
       2     202       80        2      active sync   /dev/xvdf
       4     202      128        3      active sync   /dev/xvdi
       4       0        0        4      removed

我的目标是拥有一个 4TB 的 RAID 0 阵列。我不需要冗余,因为我通过在 AWS 中拍摄卷快照进行备份。我正在运行 Ubuntu Server 14.04.3。

考虑到状态,如何切换到 RAID 0,而不丢失任何数据clean, degraded

答案1

您可以使用 将当前配置直接更改为 RAID mdadm -G -l 0 /dev/md127。由于只有 5 个成员中的 4 个的 RAID 4 本质上是没有奇偶校验条带的 RAID 0,因此转换将立即发生。如果有奇偶校验成员,它将被删除,但由于它已被列为“已移除”,它将被删除,Raid 设备减少到 4,状态应为“干净”。

从上面打印的 mdadm 查询中,您可以看到成员大小为 1TB,卷大小为 4TB,因此即使没有奇偶校验成员,该卷也应该可以使用。然后您需要使用 parting 增加分区并按照惯例执行文件系统调整大小操作。

答案2

我知道这已经过时了,但是这些步骤可能会对大家有帮助。

如何将磁盘添加到 RAID-0?

环境:

  1. centos 7(内核:3.10.0-327.22.2.el7.x86_64)
  2. mdadm 版本 v3.4 - 2016 年 1 月 28 日
  3. 前 3 个磁盘,每个 10GB
  4. 第四个磁盘也是10GB

初始设置:

$ sudo mdadm --create --verbose /dev/md0 --level=0 --name=DB_RAID2 --raid-devices=3 /dev/xvdh /dev/xvdi /dev/xvdj
$ sudo mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Sep  5 14:25:10 2017
     Raid Level : raid0
     Array Size : 31432704 (29.98 GiB 32.19 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Tue Sep  5 14:25:10 2017
          State : clean 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 512K

           Name : temp:DB_RAID2  (local to host temp)
           UUID : e8780813:5adbe875:ffb0ab8a:05f1352d
         Events : 0

    Number   Major   Minor   RaidDevice State
       0     202      112        0      active sync   /dev/xvdh
       1     202      128        1      active sync   /dev/xvdi
       2     202      144        2      active sync   /dev/xvdj

$ sudo mkfs -t ext4 /dev/md0
$ sudo mount /dev/md0 /mnt/test

一步将磁盘添加到 RAID-0(不起作用):

$ sudo mdadm --grow /dev/md0 --raid-devices=4 --add /dev/xvdk
mdadm: level of /dev/md0 changed to raid4
mdadm: added /dev/xvdk
mdadm: Failed to initiate reshape!

这可能是因为这个漏洞

步骤 1:转换为 RAID-4:

$ sudo mdadm --grow --level 4 /dev/md0
mdadm: level of /dev/md0 changed to raid4
$ cat /proc/mdstat 
Personalities : [raid0] [raid6] [raid5] [raid4] 
md0 : active raid4 xvdj[2] xvdi[1] xvdh[0]
      31432704 blocks super 1.2 level 4, 512k chunk, algorithm 5 [4/3] [UUU_]

unused devices: <none>

步骤 2:添加磁盘:

$ sudo mdadm --manage /dev/md0 --add /dev/xvdk
mdadm: added /dev/xvdk

等待恢复:

$ cat /proc/mdstat 
Personalities : [raid0] [raid6] [raid5] [raid4] 
md0 : active raid4 xvdk[4] xvdj[2] xvdi[1] xvdh[0]
      31432704 blocks super 1.2 level 4, 512k chunk, algorithm 5 [4/3] [UUU_]
      [=>...................]  recovery =  8.5% (893572/10477568) finish=3.5min speed=44678K/sec

$ cat /proc/mdstat 
Personalities : [raid0] [raid6] [raid5] [raid4] 
md0 : active raid4 xvdk[4] xvdj[2] xvdi[1] xvdh[0]
      31432704 blocks super 1.2 level 4, 512k chunk, algorithm 5 [4/4] [UUUU]

unused devices: <none>

步骤 3:转换回 RAID-0:

$ sudo mdadm --grow --level 0 --raid-devices=4 /dev/md0
$

等到它重塑:

$ cat /proc/mdstat 
Personalities : [raid0] [raid6] [raid5] [raid4] 
md0 : active raid4 xvdk[4] xvdj[2] xvdi[1] xvdh[0]
      31432704 blocks super 1.2 level 4, 512k chunk, algorithm 5 [5/4] [UUUU_]
      [===>.................]  reshape = 16.2% (1702156/10477568) finish=6.1min speed=23912K/sec

$ cat /proc/mdstat
Personalities : [raid0] [raid6] [raid5] [raid4] 
md0 : active raid0 xvdk[4] xvdj[2] xvdi[1] xvdh[0]
      41910272 blocks super 1.2 512k chunks

步骤 4:调整文件系统大小:

$ sudo mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Sep  5 14:25:10 2017
     Raid Level : raid0
     Array Size : 41910272 (39.97 GiB 42.92 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Tue Sep  5 14:55:46 2017
          State : clean 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 512K

           Name : temp:DB_RAID2  (local to host temp)
           UUID : e8780813:5adbe875:ffb0ab8a:05f1352d
         Events : 107

    Number   Major   Minor   RaidDevice State
       0     202      112        0      active sync   /dev/xvdh
       1     202      128        1      active sync   /dev/xvdi
       2     202      144        2      active sync   /dev/xvdj
       4     202      160        3      active sync   /dev/xvdk
$ df -h
/dev/md0         30G   45M   28G   1% /mnt/test

实际调整大小和调整后大小:

$ sudo resize2fs /dev/md0
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/md0 is mounted on /mnt/test; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 5
The filesystem on /dev/md0 is now 10477568 blocks long.

$ df -h /dev/md0
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0         40G   48M   38G   1% /mnt/test

答案3

有一种情况会导致我最终得到一个降级的 FAILED 阵列。它就像这样:

  • 创建 RAID0 条带阵列
  • 将其转换为 RAID4
  • 向 RAID4 阵列添加奇偶校验磁盘
  • 使阵列中其他磁盘之一发生故障并将其移除
  • 将 RAID4 阵列转换为 RAID0

在最后一步中,奇偶校验磁盘被丢弃,然后它发现无法将阵列转换为 RAID0。但是,它本来可以提前知道这一点(显然它要求所有非奇偶校验磁盘都处于联机状态)。结果是阵列处于干净的降级状态。

将 RAID0 条带化转换为 RAID4

mdadm --grow /dev/md/vg_docker --level=4 mdadm --detail /dev/md/vg_docker

添加奇偶校验磁盘

mdadm --manage /dev/md/vg_docker --add /dev/sdm mdadm --detail /dev/md/vg_docker

等待重建完成

RAID0 阵列中的一个原始磁盘发生故障

mdadm --manage /dev/md/vg_docker --fail /dev/sde mdadm --detail /dev/md/vg_docker

从数组中删除它

mdadm --管理/dev/md/vg_docker --删除/dev/sde mdadm --detail /dev/md/vg_docker

将其转换回 RAID0 条带

mdadm --grow /dev/md/vg_docker --level=stripe

给出输出:mdadm:/dev/md/vg_docker:无法将级别设置为 raid0

mdadm --detail /dev/md/vg_docker

状态现在干净,失败,并且所有数据丢失。

如果 mdadm 可以在将阵列转换为 RAID0 条带之前检查该操作是否可以完成,那就太好了。

背景:RAID0 条带化对于在云设置中提高性能非常有用。底层存储已经具有高可用性,因此 RAID 仅用于提高性能。以上内容来自一些实验,尝试通过添加新磁盘(奇偶校验)然后删除我们要删除的磁盘,用另一个磁盘替换 RAID0 阵列中的磁盘。然后转换回 RAID0 应该会得到所需的结果,其中一个磁盘被替换。

相关内容