Собрал программный RAID, перезагрузил, а хранилища нет: массив не собирается при загрузке

Диски целы и данные на месте, но хранилища нет. Не хватает не того, что на дисках: не хватает записи, которая велит системе собрать массив при загрузке.

AtlasPVE ·

Эта статья отвечает на

  • proxmox программный raid mdadm
  • proxmox массив raid не собирается при загрузке
  • proxmox хранилище пропало после перезагрузки
  • поддерживается ли mdadm в proxmox
  • proxmox raid или zfs

Вы объединили диски, массив поднялся, хранилище появилось, вы записали на него данные. Всё работало.

Потом вы перезагрузили машину, и хранилища нет.

Диски целы. Данные на месте. Не хватает чего-то другого.

Массив находится не на дисках, а в указании о сборке

Показывать несколько дисков как одно хранилище это не свойство, лежащее на дисках. При каждой загрузке система обязана найти эти диски и снова собрать их вместе.

Есть запись, которая говорит ей, как это делать. Без этой записи массив может не собраться. А если и соберётся, то может подняться под другим именем, что сводится к тому же: ваше хранилище указывает на старое имя, а там ничего нет.

Значит, проблема не в том, что «данные пропали», а в том, что «путь к данным не был построен при загрузке». Звучит менее страшно, но в момент испуга оба ощущаются одинаково.

Позиция самого Proxmox

Это стоит сказать честно: встроенный и поддерживаемый путь в Proxmox это ZFS. Попросите зеркалирование дисков при установке, и вы получите именно его.

Классический программный RAID работает, но это не тот путь, который установщик настраивает за вас. То есть, выбирая его, вы сами отвечаете за то, чтобы шаги сборки при загрузке были выполнены правильно.

И всё же есть случаи, когда это оправдано: у вас уже есть массив и вы его переносите, компоновка вашего контроллера не та, которую ждёт ZFS, или памяти машины для ZFS маловато. Это настоящие причины. Выбирать без причины значит создавать себе работу на потом.

Правило: массив, не переживший перезагрузку, массивом не считается

Это самая практичная фраза статьи.

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

То же самое мы писали в статье об оповещениях этой вики: непроверенная тревога это не механизм, а надежда. Для массива всё так же. Массив, не переживший перезагрузку, это массив, о котором вы думаете, что он работает.

Ловушка смены имени

Вторая частая ловушка: массив собирается, но под другим именем, чем в прошлый раз.

Ваше описание хранилища указывает на старое имя, поэтому хранилище снова невидимо. На этот раз массив поднят, но никто на него не смотрит.

Решение состоит в том, чтобы привязывать хранилище по идентификатору, а не по имени. Имена меняются, идентификаторы нет.

Что делает Atlas

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

Предупреждение было верным. Но какое-то время оно само себя опровергало.

Для создания записи вызывался системный инструмент. Это измерили, и вот что выяснилось: когда массива нет вовсе, тот инструмент завершается с кодом ноль и ничего не печатает. То есть говорит «успех» и не даёт вам ничего.

Итог: ничего не записывалось, но шаг отмечался как успешный. Ровно то, что предупреждение только что описало, происходило с пользователем, а на экране всё выглядело благополучно.

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

Общий вывод

Фраза, которая здесь важна, такова: «команда выполнилась успешно» и «работа сделана» это не одно и то же.

Код возврата говорит, запустился ли инструмент. Он не говорит, наступил ли результат. Если весь смысл шага в том, чтобы произвести действие, проверять надо не состояние инструмента, а само действие.

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

Все три это лица одной и той же неисправности: программа утверждает то, чего не проверила.

Источники

Собственная документация Proxmox. На английском, и последнее слово в этом вопросе за ней.

Похожие статьи

Как это выглядит внутри Atlas?

Перейти на страницу продукта