詳細バージョン

詳細バージョン

要約:mdadm 3.3.2(Debian Jessie)を使用して劣化したRAID1に空のパーティションを追加しようとすると失敗し(うまくいきます!)、配列が「失敗しました」と「--addが機能しませんでした」。ここに本当の危険があるという意味ですか?それとも、ちょっと変なバグを見つけたのでしょうか?

詳細バージョン

一晩でディスクが死んだ。ボックスには5つのmdraidアレイがあり、そのうちの1つ(RAID10)は予想どおりに予備に再構築されました。今夜交換ディスクが到着するまで、RAID6はまだパフォーマンスが低下しています。 /bootの5つのディスクイメージと同じです。移行に使用される 2 つの RAID1 アレイがあり、それらはホットスペアを共有します。ホットスタンバイは生き残ったスタンバイに接続されていましたが、同じスタンバイグループに属していたため、mdadm --monitorスタンバイを移動しようとすると失敗しました。私が知っている限り、エラーは発生せず、スペアパーツがありません。

今朝の性能が低下したミラーは次のようになりました。

md124 : active raid1 sda2[0](F) sdc2[2]
      9767448 blocks super 1.2 [2/1] [_U]
      bitmap: 0/150 pages [0KB], 32KB chunk

置換を手動で追加しようとしましたが、次のようになりました。

# mdadm -a /dev/md124 /dev/sdj2 
mdadm: /dev/md124 has failed so using --add cannot work and might destroy
mdadm: data on /dev/sdj2.  You should stop the array and re-assemble it.

/dev/sdj2そこに別のミラーのスーパーブロックがあり(対応するミラーのバックアップとして)試み続けましたが、mdadm --zero-superblock /dev/sdj2それ以降も同じエラーのため追加が失敗しました。私はこれを行うことができると確信しています(--forceたとえば、障害mdadm -rが発生したディスクから、または最悪の場合はアレイをスワップ再生成する場合は試していません)。

私はしばらくアレイの使用をやめました(交換用です)。swapoffアレイに対してI / Oを実行するとエラーがないため、失敗しているようには見えません。

小さすぎるデバイスのようには見えません。

# blockdev --getsize64 /dev/sda2 /dev/sdj2 
10001940480
10001940480

それで、他の人がこのエラーが何を意味するのかを知ってほしい。

重要な場合は、mdadm 3.3.2(Debian Jessie)です。

mdadm-D

# mdadm -D /dev/md124 
/dev/md124:
        Version : 1.2
  Creation Time : Thu Mar 11 20:34:00 2010
     Raid Level : raid1
     Array Size : 9767448 (9.31 GiB 10.00 GB)
  Used Dev Size : 9767448 (9.31 GiB 10.00 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Mon Oct 12 12:35:13 2015
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0

           Name : Einstein:swap_a  (local to host Einstein)
           UUID : 3d7da9d2:5ea17db5:3b122196:11968e91
         Events : 2044

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       2       8       34        1      active sync   /dev/sdc2

       0       8        2        -      faulty   /dev/sda2

mdadm-E

# mdadm -E /dev/sdc2
/dev/sdc2:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 3d7da9d2:5ea17db5:3b122196:11968e91
           Name : Einstein:swap_a  (local to host Einstein)
  Creation Time : Thu Mar 11 20:34:00 2010
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 19534897 (9.31 GiB 10.00 GB)
     Array Size : 9767448 (9.31 GiB 10.00 GB)
  Used Dev Size : 19534896 (9.31 GiB 10.00 GB)
    Data Offset : 144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 95e09398:1c155ebd:323371cf:a3acc3ad

Internal Bitmap : 8 sectors from superblock
    Update Time : Mon Oct 12 12:35:13 2015
       Checksum : 132239e4 - correct
         Events : 2044


   Device Role : Active device 1
   Array State : .A ('A' == active, '.' == missing, 'R' == replacing)

# mdadm -E /dev/sdj2 
mdadm: No md superblock detected on /dev/sdj2.

ベストアンサー1

を追跡するmdadmと、gdbアレイをスキャンして同期されたすべてのデバイスを見つけるループが発生します。動作するsdc2を見つける前に早く停止します。無効なコード行:

for (d = 0; d < MAX_DISKS && found < array->active_disks; d++) {

mdadm gitでこの問題が解決されたことを簡単に確認できます。

commit d180d2aa2a1770af1ab8520d6362ba331400512f
Author: NeilBrown <[email protected]>
Date:   Wed May 6 15:03:50 2015 +1000

    Manage: fix test for 'is array failed'.

    We 'active_disks' does not count spares, so if array is rebuilding,
    this will not necessarily find all devices, so may report an array
    as failed when it isn't.

    Counting up to nr_disks is better.

    Signed-off-by: NeilBrown <[email protected]>

diff --git a/Manage.c b/Manage.c
index d3cfb55..225af81 100644
--- a/Manage.c
+++ b/Manage.c
@@ -827,7 +827,7 @@ int Manage_add(int fd, int tfd, struct mddev_dev *dv,
                        int d;
                        int found = 0;

-                       for (d = 0; d < MAX_DISKS && found < array->active_disks; d++) {
+                       for (d = 0; d < MAX_DISKS && found < array->nr_disks; d++) {
                                disc.number = d;
                                if (ioctl(fd, GET_DISK_INFO, &disc))
                                        continue;

mdadmにパッチを適用すると問題が解決します。しかし、奇妙なことは、ディスクを追加して/proc/mdstatスペアをマークしたにもかかわらず、アレイを停止して再組み立てするまで再構築が開始されなかったことです。

おすすめ記事