Назад | Перейти на главную страницу

mdadm собирает диски вместо разделов

У меня есть массив RAID 5, построенный из разделов на 5 дисках - /dev/sda1, /dev/sdb1, /dev/sdc1, /dev/sdd1, и /dev/sde1. Когда я собираю массив вручную, он работает нормально.

К сожалению, суперблоки тоже есть на /dev/sdb и /dev/sdc (возможно, что-то я напортачил на раннем этапе), и когда массив автоматически собирается при запуске, он строится с /dev/sdb вместо того /dev/sdb1 (то же самое с /dev/sdc) и не удается смонтировать (с ошибкой недопустимой файловой системы).

$ sudo mdadm --assemble --scan --force (presumably what happens on startup)
mdadm: WARNING /dev/sdb1 and /dev/sdb appear to have very similar superblocks.
      If they are really different, please --zero the superblock on one
      If they are the same or overlap, please remove one from the
      DEVICE list in mdadm.conf.

$ sudo mdadm --detail /dev/md7
/dev/md7:
        Version : 00.90
  Creation Time : Wed Apr  6 18:17:07 2011
     Raid Level : raid5
     Array Size : 7814047744 (7452.06 GiB 8001.58 GB)
  Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB)
   Raid Devices : 5
  Total Devices : 5
Preferred Minor : 7
    Persistence : Superblock is persistent

    Update Time : Sat Apr 30 13:55:50 2011
          State : clean
 Active Devices : 5
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 224009a1:e4173bf3:2490f10a:1455ce9c (local to host ravenscar)
         Events : 0.2

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       16        1      active sync   /dev/sdb
       2       8       32        2      active sync   /dev/sdc
       3       8       48        3      active sync   /dev/sdd1
       4       8       65        4      active sync   /dev/sde1

$ sudo mdadm --examine /dev/sdb
/dev/sdb:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 224009a1:e4173bf3:2490f10a:1455ce9c (local to host ravenscar)
  Creation Time : Wed Apr  6 18:17:07 2011
     Raid Level : raid5
  Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB)
     Array Size : 7814047744 (7452.06 GiB 8001.58 GB)
   Raid Devices : 5
  Total Devices : 5
Preferred Minor : 7

    Update Time : Wed Apr 27 21:15:03 2011
          State : clean
 Active Devices : 5
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 0
       Checksum : f83035d3 - correct
         Events : 2

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     1       8       17        1      active sync   /dev/sdb1

   0     0       8        1        0      active sync   /dev/sda1
   1     1       8       17        1      active sync   /dev/sdb
   2     2       8       33        2      active sync   /dev/sdc
   3     3       8       49        3      active sync   /dev/sdd1
   4     4       8       65        4      active sync   /dev/sde1

Тогда я делаю:

$ sudo mdadm --stop /dev/md7
$ sudo mdadm --assemble /dev/md7 /dev/sd[abcde]1

И тогда это работает.

Мой вопрос: Безопасно ли использовать --zero-superblock вариант удалить те ошибочные суперблоки? какие еще меры мне следует предпринять? Правильно ли я сделал выбор, построив массив с разделами вместо дисков (/dev/sda1 вместо того /dev/sda, и так далее).

Не обнуляйте суперблок. Редактировать как предложил mdadm /etc/mdadm.conf или /etc/mdadm/mdadm.conf и изменить DEVICE .... кому:

DEVICE /dev/sda1
DEVICE /dev/sdb1
DEVICE /dev/sdc1
DEVICE /dev/sdd1
DEVICE /dev/sde1

Похоже, что MD видит один и тот же суперблок с двух устройств (sdb1 - это подмножество sdb). Убийство суперблока убило бы настоящий суперблок, так что не делайте этого.

Суперблоки MD v0.90 хранятся в конце устройства в блоке, выровненном по 64 КБ. В вашем случае sdb1 - единственный раздел, а суперблок можно найти в конце как sdb, так и sdb1. Каким-то образом (похоже, это старая проблема, см. Ссылку в конце) MD запутался и начал думать, что у вас есть две копии суперблока на двух разных устройствах.

Исправить это легко, если у вас есть дополнительное пространство на этом разделе - вы можете просто стереть суперблок, а затем переразбить диск, закончив раздел 64k до конца диска; MD не увидит субблок на sdb и правильно соберет массив с помощью sdb1. Если вы не можете вынуть 64k из sdb, вам придется пересобрать массив. Если это не ваш загрузочный диск, вы также можете использовать более новую версию суперблока. v.1.1 и v.1.2 хранят суперблок где-то в начале массива, что решит эту конкретную проблему.

Я только что столкнулся с той же проблемой на raid1. Используя «fdisk -u» (использовать секторы как единицы), раздел заканчивался на секторе 143374743. Я вычел 128 из этого числа (128 512-байтовых секторов = 64 КБ) и использовал полученное число как конец раздела. Затем я мог убедиться, что MD не увидит суперблок на sda с помощью:

# mdadm --misc -E /dev/sda

Похоже, недавнее изменение поведения, связанное с использованием секторов и отказом от совместимости с DOS в инструментах разбиения, привело к тому, что последний раздел всегда оканчивался на самом конце диска (а не на границе цилиндра). Некоторые другие параметры могут быть задействованы, например, у меня есть работающая система, которая показывает дублирующиеся суперблоки при прямом запросе дисков и по-прежнему правильно монтирует свой массив.

Для получения дополнительной информации о форматах суперблока MD см .:

https://raid.wiki.kernel.org/index.php/RAID_superblock_formats#The_version-0.90_Superblock_Format

В часто задаваемых вопросах Debian (пункт 11) упоминается эта проблема:

http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=blob_plain;f=debian/FAQ;hb=HEAD

Если у вас нет данных в массиве, я бы просто стер его и начал все сначала. Если у вас есть данные, я бы сделал резервную копию, прежде чем играть с суперблоками.

Лично я бы извлек из него данные и dd несколько секторов /dev/zero в начале каждого диска, затем заново разбейте и перестройте массив. Мне было бы удобнее знать, что с самого начала все было настроено правильно.

В качестве отступления: на мой взгляд, это довольно большой массив для создания RAID-5. Следите за временем восстановления. В случае отказа одного диска у вас будет катастрофическая потеря данных, если у вас будет другая ошибка при чтении во время восстановления. Вы можете рассмотреть RAID-6.

К сожалению, я удалил RAID-Superblock при чтении следующего сообщения:

mdadm: WARNING /dev/sdb1 and /dev/sdb appear to have very similar superblocks.
      If they are really different, please --zero the superblock on one
      If they are the same or overlap, please remove one from the
      DEVICE list in mdadm.conf.

После этого мой RAID1 больше не мог запускаться.

К счастью, создание нового RAID1 с параметрами, идентичными исходному, не удалило старый: http://lists.debian.org/debian-user-french/2006/03/msg00607.html через http://kevin.deldycke.com/2007/03/how-to-recover-a-raid-array-after-having-zero-ized-superblocks/

Как частично большой палец / вводящее в заблуждение / бесполезное сообщение выше mdadm, как умный - это mdadm с отдыхом.