Главная » Диски и файловые системы » Диски после RAID: как удалить старый массив и создать новые разделы

Диски после RAID: как удалить старый массив и создать новые разделы

Типичная ситуация: на сервере стояли два или больше дисков в программном RAID (mdadm). Вы ставите систему заново, а установщик вместо двух чистых дисков видит один старый массив /dev/md127, «чужой» том LVM или устройство /dev/mapper/.... Разметить диски по-новому не получается, или установщик падает с ошибкой.

Причина почти всегда одна: на дисках остались метаданные старого массива. Это суперблок mdadm, метки RAID от BIOS (Intel RST, Promise и т. п.), подписи LVM или файловых систем, резервная копия GPT в конце диска. Установщик честно находит их и собирает массив обратно.

Самое частое решение: загрузиться в оболочку установщика или в live-систему, остановить массив mdadm --stop, стереть суперблоки mdadm --zero-superblock, затем очистить подписи wipefs -a и таблицу разделов sgdisk --zap-all. После этого диски для любого установщика выглядят пустыми. Все команды ниже уничтожают данные: перед ними убедитесь, что на дисках нет ничего нужного.

Почему установщик видит старый массив

Linux ищет метаданные RAID на каждом блочном устройстве при загрузке. Правила udev вызывают mdadm --incremental, и если на дисках есть суперблок md, массив собирается автоматически, ещё до запуска мастера разметки. Так ведут себя установщик Debian, Subiquity в Ubuntu и Anaconda в AlmaLinux / Rocky Linux.

Где лежат метаданные:

  • Суперблок mdadm 1.2 (формат по умолчанию) — в начале раздела или диска, со смещением 4 КиБ.
  • Суперблок 0.90 и 1.0 — в конце устройства. Его не убирает удаление таблицы разделов: создали раздел на весь диск заново, и массив «воскрес».
  • Метаданные fake-RAID (Intel Matrix/RST — формат IMSM, DDF, старые Promise и NVIDIA) — тоже в конце диска. Современные системы собирают такие массивы через mdadm, раньше это делал dmraid. Именно такой случай был в исходной заметке: CentOS видела устройство /dev/mapper/pdc_..., то есть метки контроллера Promise.
  • Подписи LVM, ZFS, файловых систем — внутри разделов. ZFS хранит метки и в начале, и в конце устройства.
  • Резервная GPT — в последнем секторе диска. Некоторые утилиты восстанавливают по ней «удалённую» таблицу разделов.

Отсюда правило: удалить разделы мало. Метаданные нужно стирать на каждом уровне: сначала массивы и тома, потом разделы, потом сам диск.

Шаг 1. Получить консоль

Удобнее всего работать из live-системы (Debian Live, Ubuntu Desktop, rescue-образ хостера). Там есть все нужные утилиты. Если под рукой только установщик:

  • Debian 12/13 (debian-installer): на любом шаге Ctrl+Alt+F2 (или Alt+F2 в текстовом режиме), Enter — откроется оболочка BusyBox. Возврат — Ctrl+Alt+F1 (графический режим — F5).
  • Ubuntu 24.04 Server (Subiquity): меню Help → Enter shell или Ctrl+Alt+F2.
  • AlmaLinux / Rocky Linux 9 и 10 (Anaconda): Ctrl+Alt+F2, там tmux с оболочкой root. Возврат в графику — Ctrl+Alt+F6 (в 9.x), в разных релизах номер может отличаться.

Автор исходной статьи в 2017 году действовал так же: запускал установщик CentOS, переходил на вторую консоль и всё делал руками. Подход не устарел.

Шаг 2. Посмотреть, что осталось на дисках

cat /proc/mdstat
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
blkid

Примерно так выглядит диск со старым зеркалом:

Personalities : [raid1]
md127 : active (auto-read-only) raid1 sdb2[1] sda2[0]
      976630464 blocks super 1.2 [2/2] [UU]

NAME      SIZE TYPE  FSTYPE            MOUNTPOINTS
sda     931.5G disk
├─sda1    512M part  vfat
└─sda2    931G part  linux_raid_member
  └─md127 931G raid1 LVM2_member
sdb     931.5G disk
├─sdb1    512M part  vfat
└─sdb2    931G part  linux_raid_member
  └─md127 931G raid1 LVM2_member

Подробности о суперблоке на конкретном разделе:

mdadm --examine /dev/sda2
mdadm --detail --scan

Если FSTYPE показывает isw_raid_member или ddf_raid_member — это метаданные fake-RAID контроллера, они стираются через wipefs (шаг 5).

Шаг 3. Отключить LVM поверх массива

Если на массиве был LVM, том держит устройство занятым, и mdadm --stop вернёт ошибку «Device or resource busy». Сначала деактивируйте группу томов:

vgs
vgchange -an имя_группы

Если что-то смонтировано (live-система любит монтировать найденные разделы сама), отмонтируйте: umount /dev/md127p1 или umount -R /mnt/.... Swap на массиве отключается командой swapoff -a.

Шаг 4. Остановить массив и стереть суперблоки

mdadm --stop /dev/md127
mdadm --zero-superblock /dev/sda2 /dev/sdb2

--zero-superblock выполняется для каждого члена массива — раздела или целого диска, смотря из чего массив собирали. Если массивов несколько (например, отдельно /boot и корень), повторите для всех. Проверка:

mdadm --examine /dev/sda2

Ожидаемый ответ — No md superblock detected on /dev/sda2.

Шаг 5. Стереть подписи и таблицу разделов

wipefs из util-linux знает подписи файловых систем, LVM, md, fake-RAID и таблиц разделов. Сначала очищаем разделы, потом сам диск:

wipefs -a /dev/sda2 /dev/sda1
wipefs -a /dev/sdb2 /dev/sdb1
wipefs -a /dev/sda /dev/sdb

Без ключа -a команда только покажет, что нашла. Это удобно для проверки до удаления.

Затем удаляем основную и резервную GPT и MBR:

sgdisk --zap-all /dev/sda
sgdisk --zap-all /dev/sdb

sgdisk входит в пакет gdisk (Debian, Ubuntu, AlmaLinux). Если его нет в установщике, достаточно wipefs -a по диску: он стирает и основную, и резервную GPT.

Для упрямых случаев (ZFS, неизвестные метаданные в конце диска) можно обнулить начало и конец диска. Пример для последних 10 МиБ:

dd if=/dev/zero of=/dev/sda bs=1M count=10
dd if=/dev/zero of=/dev/sda bs=1M count=10 seek=$(( $(blockdev --getsz /dev/sda) / 2048 - 10 ))

Для SSD и NVMe есть blkdiscard /dev/nvme0n1 — он помечает всё содержимое как свободное. Это быстро и полностью уничтожает данные.

Шаг 6. Перечитать таблицу и проверить

partprobe /dev/sda /dev/sdb
lsblk -o NAME,SIZE,TYPE,FSTYPE
blkid /dev/sda /dev/sdb
cat /proc/mdstat

Правильный результат: у дисков нет дочерних устройств, FSTYPE пустой, blkid ничего не выводит, в /proc/mdstat нет активных массивов. Если ядро держит старую разметку, проще всего перезагрузиться и запустить установщик заново.

Шаг 7. Создать новые разделы

Дальше два пути: разметить диски в мастере установщика (обычно удобнее) или руками. Ручной вариант нужен, когда установщик не умеет нужную схему или вы ставите систему через debootstrap.

parted: GPT, UEFI и раздел под RAID

parted -s /dev/sda mklabel gpt
parted -s /dev/sda mkpart ESP fat32 1MiB 513MiB
parted -s /dev/sda set 1 esp on
parted -s /dev/sda mkpart raid 513MiB 100%
parted -s /dev/sda set 2 raid on

Для загрузки в режиме BIOS (Legacy) с GPT вместо ESP нужен маленький раздел BIOS boot размером 1–2 МиБ с флагом bios_grub.

sgdisk: то же одной командой и копия на второй диск

sgdisk -n 1:0:+512M -t 1:EF00 -n 2:0:0 -t 2:FD00 /dev/sda
sgdisk -R /dev/sdb /dev/sda
sgdisk -G /dev/sdb

EF00 — EFI System, FD00 — Linux RAID. -R копирует разметку с sda на sdb, -G даёт второму диску новые GUID. Порядок аргументов в -R легко перепутать: сначала цель, потом источник.

fdisk: интерактивно

В исходной статье разделы создавались в fdisk с MBR и типом fd. Сегодня для новых серверов берите GPT:

fdisk /dev/sda
g        # новая таблица GPT
n        # новый раздел, размеры по умолчанию или +512M
t        # тип раздела: alias "uefi" или "raid"
w        # записать

Номера типов в списке fdisk зависят от версии util-linux, поэтому надёжнее вводить алиасы uefi, raid, linux или смотреть список командой L.

Новый массив вручную

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
watch cat /proc/mdstat

На больших дисках начальная синхронизация идёт часами. Автор исходной статьи всегда держал открытым watch cat /proc/mdstat, чтобы видеть прогресс и не гадать, не завис ли процесс. Устанавливать систему на массив можно, не дожидаясь конца синхронизации.

Установщики Debian, Ubuntu и AlmaLinux

УстановщикГде создаётся RAIDОсобенности
Debian 12/13 (debian-installer)Разметка «Вручную» → «Настроить программный RAID»Разделы под массив создаются с назначением «физический том для RAID». Старые массивы показываются в списке, их можно удалить там же. Метаданные fake-RAID иногда мешают — тогда шаги 4–5 из консоли.
Ubuntu 24.04 Server (Subiquity)Custom storage layout → Create software RAID (md)Для каждого диска нужен свой раздел ESP («Use as boot device» на обоих). Найденные старые md-массивы показываются отдельно, их нужно удалить перед разметкой.
AlmaLinux / Rocky 9 и 10 (Anaconda)Installation Destination → Custom или Blivet-GUIДля автоматической установки в kickstart есть zerombr и clearpart --all --initlabel. Опция загрузки inst.nodmraid была в 9.x и удалена в 10: fake-RAID теперь обслуживает mdadm.

После установки проверьте конфигурацию массива в новой системе. В Debian и Ubuntu файл /etc/mdadm/mdadm.conf, в AlmaLinux — /etc/mdadm.conf. Если массив собирался вручную, допишите его и пересоберите initramfs:

# Debian / Ubuntu
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u

# AlmaLinux / Rocky
mdadm --detail --scan >> /etc/mdadm.conf
dracut -f

Без этого массив может получить имя md127 вместо md0, а в худшем случае корень не найдётся при загрузке.

Ошибка «Only RAID0 arrays can contain growable members»

Архивная заметка автора: при установке Fedora 17 на шаге создания программного RAID1 Anaconda выдавала Only RAID0 arrays can contain growable members. Опытным путём выяснилось, что ошибка появлялась только с опцией «Use all available disk space» («Занять всё доступное пространство»). Если задать размеры разделов вручную, проблема пропадала.

Смысл ошибки: член зеркала не может быть «растущим» разделом, который заполняет остаток диска, потому что размеры половинок должны совпадать. В актуальных версиях Anaconda эта ситуация обрабатывается по-другому. Если похожее сообщение всё же встретится, решение то же: фиксированный размер разделов под RAID или ручная разметка из консоли по шагам выше.

Симптом → причина → решение

СимптомПричинаРешение
Установщик видит md127 вместо двух дисковСуперблок mdadm на разделахmdadm --stop, --zero-superblock, wipefs -a
Устройство /dev/mapper/pdc_*, isw_* или массив с метаданными imsmМетки fake-RAID контроллера в BIOSВыключить RAID в BIOS (режим AHCI), wipefs -a по диску
mdadm --stop: Device or resource busyАктивный LVM, swap или смонтированная ФС на массивеvgchange -an, swapoff -a, umount
Массив вернулся после удаления разделовСуперблок 0.90/1.0 в конце устройстваПересоздать раздел, mdadm --zero-superblock, затем wipefs -a
Разметка «возвращается» после перезагрузкиРезервная GPT в конце дискаsgdisk --zap-all
После установки массив называется md127Нет записи в mdadm.conf внутри initramfsmdadm --detail --scan, update-initramfs -u или dracut -f
Only RAID0 arrays can contain growable membersРаздел RAID1 с опцией «занять всё место» (Fedora 17)Задать размеры разделов вручную

Если диски достались от старого сервера, перед новой установкой стоит проверить их состояние через SMART. Как это сделать, разобрано в статье Проверка и восстановление дисков в Linux. Если на сервер ставится гипервизор, тот же порядок очистки нужен и для установки Proxmox VE: его установщик с ZFS тоже спотыкается о старые метки md и LVM.

Справка по ключам — в официальной документации: Linux RAID wiki и man-страницы mdadm(8), wipefs(8), sgdisk(8).

Частые вопросы

Можно ли просто удалить разделы в установщике и не трогать суперблоки?

Иногда получается, но не гарантированно. Суперблоки формата 0.90 и 1.0, метки fake-RAID и резервная GPT лежат в конце диска. Удаление разделов их не трогает, и при следующей загрузке массив соберётся снова. Надёжнее один раз пройти шаги со --zero-superblock и wipefs -a.

Нужно ли заполнять весь диск нулями?

Нет. Метаданные занимают несколько мегабайт в начале и в конце устройства. wipefs -a и sgdisk --zap-all убирают всё, что видит установщик. Полная перезапись нужна только при передаче дисков другому владельцу, и для SSD она всё равно не гарантирует удаления данных — там используют secure erase или blkdiscard.

Как сохранить данные со старого массива перед переустановкой?

Соберите массив из live-системы командой mdadm --assemble --scan, смонтируйте его только для чтения и скопируйте данные на другой носитель. Зеркало RAID1 можно собрать и из одного диска: mdadm --assemble --run /dev/md0 /dev/sda2. Стирать метаданные — только после проверки копии.

Что делать с RAID в BIOS (Intel RST)?

Для Linux-сервера лучше переключить контроллер SATA в режим AHCI и использовать обычный mdadm. Метки старого массива удалите в утилите контроллера или через wipefs -a по каждому диску. Fake-RAID усложняет замену дисков и перенос между платформами, а выигрыша в скорости не даёт.

Почему после установки массив называется md127, а не md0?

Массив не описан в mdadm.conf, который попал в initramfs. Система собирает его как «чужой» и даёт первый свободный номер с конца. Добавьте вывод mdadm --detail --scan в конфиг и пересоберите initramfs: update-initramfs -u в Debian и Ubuntu, dracut -f в AlmaLinux. Монтировать по UUID это не мешает, но имена лучше привести в порядок.