Мы с коллегой создали программный RAID 1 с mdadm, состоящим из двух физических дисков, с двумя разделами на виртуальном устройстве. Настройка прошла нормально, и загрузка непосредственно с одного из дисков RAID привела к следующему:

# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md127 : active raid1 sda1[0] sdb1[1]
      92094464 blocks super 1.2 [2/2] [UU]

md1 : active (auto-read-only) raid1 sda2[0] sdb2[2]
      4069376 blocks super 1.2 [2/2] [UU]

unused devices: <none>

Чтобы проверить наши настройки, мы затем выключили машину, отсоединили один из дисков и перезапустили. Система подошла нормально, естественно в ухудшенном состоянии:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md127 : active raid1 sda1[1]
      92094464 blocks super 1.2 [2/1] [_U]

md1 : active (auto-read-only) raid1 sda2[2]
      4069376 blocks super 1.2 [2/1] [_U]

unused devices: <none>

Затем мы снова выключили машину, снова подключили отключенный диск и отключили другой диск. Опять все прошло нормально, со следующим ожидаемым состоянием:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md127 : active raid1 sda1[0]
      92094464 blocks super 1.2 [2/1] [U_]

md1 : active (auto-read-only) raid1 sda2[0]
      4069376 blocks super 1.2 [2/1] [U_]

unused devices: <none>

Наконец, мы закрылись в последний раз, все переподключили, но мы получили следующее:

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md1 : active (auto-read-only) raid1 sdb2[2] sda2[0]
      4069376 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sdb1[1]
      92094464 blocks super 1.2 [2/1] [_U]

unused devices: <none>

Как видите, первый раздел (вторая запись, они почему-то поменялись местами) находится в ухудшенном состоянии (второй - нет, но это просто раздел подкачки). Мы не были особенно обеспокоены этим. В конце концов, ожидается, что эти два раздела уже не будут точно одинаковыми после смоделированного чередующегося сбоя дисков. Мы добавили отсутствующий раздел следующим образом:

# mdadm --manage /dev/md127 --add /dev/sda1
mdadm: re-added /dev/sda1

Мы ожидали, что раздел в /dev/sda синхронизирует (будет перезаписан) раздел в /dev/sdb . Вместо этого мы получили поврежденную файловую систему (многочисленные ошибки в течение нескольких секунд).


После этого я перезагрузился с третьего диска, повторно инициализировал файловую систему в /dev/md127 (с опцией -c для mkfs.ext4 для хорошей меры) и перезагрузился обратно в теперь снова работающий RAID. Затем мы снова выключились, отключили один диск, загрузились, снова выключились, снова подключили диск, и на этот раз мы также оставили другой диск подключенным и загрузились. Теперь мы получили это:

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md127 : active raid1 sda1[0]
      92094464 blocks super 1.2 [2/1] [U_]

md1 : active (auto-read-only) raid1 sdb2[2] sda2[0]
      4069376 blocks super 1.2 [2/2] [UU]

unused devices: <none>

Теперь мы боимся, что то же самое случится снова, если мы просто используем опцию --add как указано выше.

У меня есть два вопроса:

  1. Что вызвало повреждение файловой системы после симуляции чередующегося сбоя? Я предполагаю, что это как-то связано с тем, что оба диска выходят из состояния перед первым отключением, и это каким-то образом mdadm --add в том, что он не выполняет повторную синхронизацию . Какова была бы правильная последовательность команд, чтобы указать mdadm использовать смонтированное состояние как удостоверяющее и синхронизировать добавленный диск с ним?
  2. В нашей текущей ситуации (один смоделированный сбой с последующим переподключением, т. Е. Только один из дисков вышел из состояния незадолго до отсоединения), как правильно добавить недостающее устройство? Могу ли я просто использовать команду добавления, как указано выше, и она будет синхронизироваться? Почему он не синхронизируется автоматически?

Если это поможет, вот текущий вывод из mdadm --examine:

# mdadm --examine /dev/sda1
/dev/sda1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 726d9204:889a4c89:b7a1bdb9:a77d8130
           Name : testhost:0  (local to host testhost)
  Creation Time : Mon Feb  4 14:39:21 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 184188928 (87.83 GiB 94.30 GB)
     Array Size : 92094464 (87.83 GiB 94.30 GB)
    Data Offset : 131072 sectors
   Super Offset : 8 sectors
   Unused Space : before=130984 sectors, after=0 sectors
          State : clean
    Device UUID : 46077734:6a094293:96f92dc3:0a09706e

    Update Time : Tue Feb  5 13:36:59 2019
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 139d1d09 - correct
         Events : 974


   Device Role : Active device 0
   Array State : A. ('A' == active, '.' == missing, 'R' == replacing)
# mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 726d9204:889a4c89:b7a1bdb9:a77d8130
           Name : testhost:0  (local to host testhost)
  Creation Time : Mon Feb  4 14:39:21 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 184188928 (87.83 GiB 94.30 GB)
     Array Size : 92094464 (87.83 GiB 94.30 GB)
    Data Offset : 131072 sectors
   Super Offset : 8 sectors
   Unused Space : before=130984 sectors, after=0 sectors
          State : clean
    Device UUID : dcffbed3:147347dc:b64ebb8d:97ab5956

    Update Time : Tue Feb  5 10:47:41 2019
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : e774af76 - correct
         Events : 142


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

1 ответ1

0

Я узнал, что пошло не так. Я нашел это в документации mdadm:

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

(акцент мой)

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

Решением для такого случая является вызов mdadm --zero-superblock на отсутствующем устройстве перед его добавлением. Это приведет к чистой перестройке.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .