为什么 mdadm 的 RAID-1 尽管有位图,也要从头开始重新同步?

为什么 mdadm 的 RAID-1 尽管有位图,也要从头开始重新同步?
# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 nbd0[3] sda10[0]
      53246315 blocks super 1.2 [3/1] [U__]
      [>....................]  recovery =  1.0% (537088/53246315) finish=203.0min speed=4326K/sec
      bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

# nbd-client -d /dev/nbd0
Disconnecting: que, disconnect, sock, done

# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 nbd0[3](F) sda10[0]
      53246315 blocks super 1.2 [3/1] [U__]
      bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

# mdadm /dev/md/raidy --remove /dev/nbd0
mdadm: hot removed /dev/nbd0 from /dev/md/raidy

# nbd-client 10.99.99.250 7777 /dev/nbd0
Negotiation: ..size = 53247411KB
bs=1024, sz=53247411

# mdadm --incremental --run /dev/nbd0
mdadm: /dev/nbd0 attached to /dev/md/raidy which is already active.

# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 nbd0[3] sda10[0]
      53246315 blocks super 1.2 [3/1] [U__]
      [>....................]  recovery =  0.0% (31616/53246315) finish=196.2min speed=4516K/sec
      bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

# uname -a
Linux vi-notebook 2.6.35-zen2-08220-g2c56b9e #14 ZEN PREEMPT Thu Oct 21 02:48:18 EEST 2010 i686 GNU/Linux

# mdadm --version
mdadm - v3.1.4 - 31

如何正确断开并重新连接设备到 RAID-1 以利用写入意图位图?

再次实验:

Personalities : [raid1] 
md0 : active raid1 nbd0[3] sda10[0]
      53246315 blocks super 1.2 [3/2] [UU_]
      bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

    /dev/md/raidy:
        Version : 1.2
  Creation Time : Tue Mar 30 05:42:53 2010
     Raid Level : raid1
     Array Size : 53246315 (50.78 GiB 54.52 GB)
  Used Dev Size : 53246315 (50.78 GiB 54.52 GB)
   Raid Devices : 3
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Mon Jan 31 18:18:03 2011
          State : active, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : vi-notebook:0  (local to host vi-notebook)
           UUID : bc325b24:fa0a4957:47820c56:fc818fa3
         Events : 2661551

    Number   Major   Minor   RaidDevice State
       0       8       10        0      active sync   /dev/sda10
       3      43        0        1      active sync   /dev/nbd0
       2       0        0        2      removed

现在移除其中一个设备:

# mdadm /dev/md/raidy --fail /dev/nbd0 
mdadm: set /dev/nbd0 faulty in /dev/md/raidy
# mdadm /dev/md/raidy --remove /dev/nbd0 
mdadm: hot removed /dev/nbd0 from /dev/md/raidy

现在重新添加它:

mdadm --incremental --run /dev/nbd0

它从头开始重新同步:

Personalities : [raid1] 
md0 : active raid1 nbd0[3] sda10[0]
      53246315 blocks super 1.2 [3/1] [U__]
      [>....................]  recovery =  0.4% (244480/53246315) finish=289.5min speed=3050K/sec
      bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>


/dev/md/raidy:
        Version : 1.2
  Creation Time : Tue Mar 30 05:42:53 2010
     Raid Level : raid1
     Array Size : 53246315 (50.78 GiB 54.52 GB)
  Used Dev Size : 53246315 (50.78 GiB 54.52 GB)
   Raid Devices : 3
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Mon Jan 31 18:22:07 2011
          State : active, degraded, recovering
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1

 Rebuild Status : 0% complete

           Name : vi-notebook:0  (local to host vi-notebook)
           UUID : bc325b24:fa0a4957:47820c56:fc818fa3
         Events : 2661666

    Number   Major   Minor   RaidDevice State
       0       8       10        0      active sync   /dev/sda10
       3      43        0        1      spare rebuilding   /dev/nbd0
       2       0        0        2      removed

答案1

嗯。从上面的输出来看,一开始并不清楚您是否有多个同步的磁盘。看起来有一个正在同步的故障磁盘,它被移除,然后重新添加,然后再次重新同步。我从来没有看到过显示 2 个磁盘完全同步的显示。

我会确保两个磁盘都处于活动状态,让它们完全同步,并且只有在验证之后我才会尝试移除磁盘并重新添加它。

请注意,写意图位图仅用于帮助快速重新同步两个已几乎同步的磁盘(即系统崩溃后或短时间移除磁盘时)。它不适用于长期移除或尚未完全同步的磁盘。

答案2

您应该使用“--re-add”将删除的磁盘添加回来,如下所示:

# mdadm /dev/md0 --re-add /dev/sdf2

我刚刚尝试过,它成功了,无需重建 - 如果磁盘已经预先使用“--remove”删除,就像你做的那样。

请注意,这一点很重要 - 必须使用“--remove”删除磁盘。如果你只是硬拔出磁盘,将其重新插入并尝试“--re-add”它,你将得到

mdadm: --re-add for /dev/sdf2 to /dev/md0 is not possible

为什么会这样?http://linux.die.net/man/8/mdadm, “--re-add” 部分:

如果 [...] 它使用的插槽仍然空闲,那么该设备将被添加回阵列中的相同位置。

如果你刚刚将磁盘拔出,则插槽仍将被故障磁盘占用(在 /proc/mdstat 中标记为 F):

$ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 loop0[0] loop3[2](F)
      1047552 blocks super 1.2 [2/1] [U_]
      bitmap: 1/1 pages [4KB], 65536KB chunk

移除故障磁盘后“--re-add”将会起作用,利用位图。

答案3

我不确定这是否有帮助 - 但我认为你的问题似乎是 nbd-device。

如果你想通过 IP 网络实现 RAID1 - 为什么不使用驱动

相关内容