如何安全地将丢失的分区添加到现有的 RAID-1 设置中?

use*_*914 0 linux raid centos raid1

我的服务器设置了 RAID-1,几天前一个驱动器出现故障。我替换了它并将其添加回数组。问题是 3TB 驱动器有 2 个分区:

root@s01 [~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_server01-LogVol01
                      2.7T  419G  2.2T  17% /
tmpfs                 7.8G     0  7.8G   0% /dev/shm
/dev/md0              477M  149M  303M  33% /boot
/dev/md2               32G  6.5G   24G  22% /mysql
/usr/tmpDSK           4.0G  223M  3.6G   6% /tmp
root@s01 [~]#
Run Code Online (Sandbox Code Playgroud)

所以基本上 2.7TB for /,7.8GB fortmpfs和 477MB for boot.

因此,无论md0并且md1是相同的驱动器上。然后将故障驱动器重新添加为mdadm --manage /dev/md1 --add /dev/sdc2

正如您所看到的,现在的问题md1是已同步但md0被遗漏了:

root@s01 [~]# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdd1[1]
      511988 blocks super 1.0 [2/1] [_U]

md2 : active raid1 sda1[0] sdb1[1]
      33558657 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdc1[2] sdd2[1]
      2929751932 blocks super 1.1 [2/2] [UU]
      bitmap: 6/22 pages [24KB], 65536KB chunk

unused devices: <none>
root@s01 [~]#
Run Code Online (Sandbox Code Playgroud)

有没有办法安全地重新添加md0而无需重新格式化所有内容?

md0 现在看起来像:

root@s01 [~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.0
  Creation Time : Sat Jul  7 18:23:23 2012
     Raid Level : raid1
     Array Size : 511988 (499.99 MiB 524.28 MB)
  Used Dev Size : 511988 (499.99 MiB 524.28 MB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Thu Jul  7 00:59:54 2016
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : server01.domain.com:0
           UUID : 2ca3a4dc:db3ef0ca:b3d37d49:b43e826f
         Events : 726

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       49        1      active sync   /dev/sdd1
root@s01 [~]#
Run Code Online (Sandbox Code Playgroud)

md1看起来像:

root@s01 [~]# mdadm --detail /dev/md1
/dev/md1:
        Version : 1.1
  Creation Time : Sat Jul  7 18:23:24 2012
     Raid Level : raid1
     Array Size : 2929751932 (2794.03 GiB 3000.07 GB)
  Used Dev Size : 2929751932 (2794.03 GiB 3000.07 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Thu Jul  7 20:33:31 2016
          State : active 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : server01.domain.com:1
           UUID : 58600fc5:5348d92c:a7d25465:20d42940
         Events : 2359606

    Number   Major   Minor   RaidDevice State
       2       8       33        0      active sync   /dev/sdc1
       1       8       50        1      active sync   /dev/sdd2
root@s01 [~]#
Run Code Online (Sandbox Code Playgroud)

Mic*_*ski 5

所以 md0 和 md1 都在同一个驱动器上。然后使用 mdadm --manage /dev/md1 --add /dev/sdc2 重新添加故障驱动器

正如您所看到的,现在的问题是 md1 已同步但 md0 被排除在外:

这是因为您只读取了丢失的驱动器/dev/md1,您需要对/dev/md0,例如 mdadm --manage /dev/md0 --add /dev/sdcX

sdcX - 您现在需要使用哪个分区,我们无法知道。

有没有办法安全地重新添加 md0 而无需重新格式化所有内容?

您可以使用parted, 并找出未使用的分区和分区。Mdadm对此非常安全,它不允许您添加当前正在使用的设备。

我敢打赌你没有在那个新驱动器上创建第二个分区。Mdadm允许您读取不同大小的分区(在您的情况下更大)。您应该创建与 on 相同的分区布局/dev/sdd。Parted 也会帮助你解决这个问题。您可以/dev/sdd像这样检查布局:parted /dev/sdd unit MiB print,然后将其与/dev/sdc.

确保正确对齐分区,parted这也将帮助您,在新磁盘上创建第一个分区后,您应该注意到它从 2048 扇区,第 1 个 MiB 开始。未对齐通常对磁盘性能不利。

在进行分区之前,您还需要:

mdadm --manage /dev/mdX --fail /dev/sdX - 将磁盘标记为失败(非破坏性)

mdadm --manage /dev/mdX --remove /dev/sdX - 从阵列中移除磁盘(非破坏性)

相应地对磁盘进行分区(在某些方面具有破坏性)并再次读取它(非破坏性,当然不是为了添加磁盘/分区到阵列)。