要約: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
スペアをマークしたにもかかわらず、アレイを停止して再組み立てするまで再構築が開始されなかったことです。