У меня есть три диска, на которых раньше был массив MD RAID5. С тех пор я удалил (или я так думал) этот массив и создал разделы для btrfs и пространства подкачки. При перезагрузке машины MD по-прежнему связывает устройства, которые использовались для хранения старого массива, в результате чего новая файловая система не может монтироваться.
Мне было предложено оставить старые суперблоки массивов рейдов, что заставит MD думать, что это настоящий массив, и, таким образом, привязать диски. Предлагаемое решение заключалось в использовании mdadm --zero-superblock для очистки суперблока на затронутых дисках. Однако я действительно не знаю, что это делает с диском. Поскольку на этом диске есть разделы, я не хочу вслепую обнулять его части.
Итак, какую процедуру мне следует выполнить, чтобы безопасно очистить суперблоки MD, не повредив другие разделы и файловые системы на дисках?
Этот вопрос, по сути, задает то же самое, но нет четкого ответа на вопрос, действительно ли выполнение mdadm --zero-superblock на перераспределенном устройстве безопасно: mdadm суперблок скрывает / затеняет раздел
https://raid.wiki.kernel.org/index.php/RAID_superblock_formats
Суперблок имеет длину 4 КБ и записывается в выровненный блок размером 64 КБ, который начинается на расстоянии не менее 64 КБ и менее 128 КБ от конца устройства (т. Е. Чтобы получить адрес суперблока, округляя размер устройства до кратного 64 КБ и затем вычтите 64К). Доступный размер каждого устройства - это объем пространства перед суперблоком, поэтому от 64 до 128 КБ теряется, когда устройство включается в массив MD.
Итак, уже слишком поздно и может быть небезопасно использовать --zero-superblock
, потому что мы не знаем, есть ли данные или нет - вы должны изменить размер / уменьшить текущий раздел до -128K
с конца раздела x-RAID, затем сотрите эту часть и снова увеличьте раздел.
Другой вариант 1: записывать большие файлы для заполнения всего диска, суперблоки RAID будут перезаписаны, и mdadm не сможет их распознать.
Другой вариант 2: аналогично 1: https://unix.stackexchange.com/questions/44234/clear-unused-space-with-zeros-ext3-ext4
wipefs --all /dev/sd[4ppropr14t3][123]
(конечно, настройте глобус для ваших дисков / разделов!)
Вот как я это понял (это может быть довольно специфичным для моего случая, но я постараюсь, чтобы он оставался общим, где могу).
(Когда я говорю об устройствах, я имею в виду устройства, из которых состоит том рейда, а не сам массив рейдов)
я использовал mdadm -E $DEVICE
чтобы выяснить, какой формат метаданных использовал массив. Затем я пошел к [0], чтобы найти некоторую информацию о формате суперблока. В моем случае это была версия 0.90.
В этом формате суперблок сохраняется ближе к концу устройства. Вот тут-то и возникает моя ситуация. Мой старый массив был создан прямо на дисках, без разбиения на разделы. Из-за этого я знал, что суперблок должен быть в самом конце устройства. Мой новый раздел включал раздел подкачки в конце. Следовательно, там, где располагался суперблок, терять было не так много данных.
Я немного почитал, и пришел к выводу, что mdadm --zero-superblock
обнуляет только сам суперблок, поэтому в моем случае он должен быть безопасным. Я пошел дальше и удалил суперблоки на всех трех устройствах:
mdadm --stop $ONE_OF_THE_DEVICES
При необходимости повторите эту строку
mdadm --zero-superblock $DEVICE
Некоторые дополнительные комментарии / предположения:
Как правило, если пространство необходимо для новых разделов / файловых систем, оно уже должно быть перезаписано. Таким образом, если суперблок все еще существует, его обнуление не должно повредить разделение / файловые системы. Однако я не уверен, как MD обрабатывает случай, когда суперблок уже был перезаписан на одном или многих устройствах, но не на всех. На странице руководства сказано, что -f необходим для обнуления суперблока, если он недействителен, но имейте это в виду.
0: https://raid.wiki.kernel.org/index.php/RAID_superblock_formats