Почему mdadm считает мой raid1 «неудачным, поэтому использование –add не может работать»?

TLDR: попытка добавить пустой раздел к деградированному RAID1 с mdadm 3.3.2 (Debian Jessie) терпит неудачу, заявив, что массив (отлично работает!) Имеет «сбой» и «-add не может работать». Это говорит мне о реальной опасности здесь, или я просто ударил какую-то странную ошибку?

Подробная версия

Ночью у меня был диск. На коробке находятся массивы 5 mdraid; один из них (RAID10) перестроен, как ожидается, используя запасной. RAID6 остается деградированным до тех пор, пока на следующий день не появится сменный диск. То же самое с 5-дисковым зеркалом для / boot. Для обмена используются два массива RAID1; у них есть горячий запас. Горячий запасник был прикреплен к тому, который не испытывал сбоя, но они оба находятся в одной и той же запасной группе, поэтому mdadm --monitor попытался переместить запасной, но он не удался. Не допустил ошибку, насколько я могу судить, просто потерял запасной.

  • Принудительный клиент dhcp, чтобы получить новую аренду
  • Как измерить на Linux пиковая память приложения после того, как закончилась
  • mdadm: ПРОГРАММА всегда запускается пользователем root?
  • Как настроить прозрачный брандмауэр с помощью ArchLinux
  • FreeBSD не Unix. Но его Unix-подобный Unix. Где же тогда основной Unix читает исходный код?
  • Запуск программы при запуске (Fedora 22/2015)
  • Сегодня утром ухудшенное зеркало выглядит так:

     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 на неудавшемся диске – или в худшем случае – его просто swap-recreate массив).

    Я пошел вперед и прекратил использовать этот массив (он использовался для обмена). swapoff выполнил ввод / вывод в массив без ошибок, поэтому он не выглядит неудачным.

    Не кажется слишком маленьким устройством:

     # 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. 

  • Результат «fdisk -l»: что такое тип метки диска »и« Идентификатор диска »,
  • Как ограничить доступ к Интернету для определенного пользователя на LAN с помощью iptables в Linux
  • Есть ли дистрибутив linux, который использует звуковой сервер Jack все время?
  • Как получить адрес IPV4 для интерфейса из / proc
  • Лучше ли использовать cat, dd, pv или другую процедуру для копирования CD / DVD?
  • Может ли ИД потока быть 0?
  • One Solution collect form web for “Почему mdadm считает мой raid1 «неудачным, поэтому использование –add не может работать»?”

    Трассировка через mdadm с помощью gdb привела меня к циклу, который пытался просканировать массив, ища все синхронизируемые устройства. За исключением того, что он остановился раньше, прежде чем он нашел рабочий sdc2. С ошибкой строки кода в руке:

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

    было довольно легко найти, что это было зафиксировано в mdadm git:

     commit d180d2aa2a1770af1ab8520d6362ba331400512f Author: NeilBrown <neilb@suse.de> 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 <neilb@suse.de> diff --git a/Manage.cb/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 показал запасной подарок, он не начинал восстановление до тех пор, пока я не остановил и не собрал массив.

    Linux и Unix - лучшая ОС в мире.