Привет, хабр! Ситуация до боли знакома каждому, кто регулярно арендует выделенные серверы. Вы оплачиваете счет, заходите в панель хостера, выбираете Debian, жмете «Установить» и идете пить кофе. Через 10 минут SSH-порт открыт. Вы логинитесь, вводите lsblk и… начинается лотерея.
Некоторым провайдерам не плевать на инфраструктуру. При заказе у них можно галочками выбрать: нужна разметка RAID или нет, нужен ли LVM. В идеальном мире вы получаете рабочую картину: зеркало (md) и логические тома поверх него (vg-root).

Но реальность чаще напоминает «серверный авось». Вы заходите на сервер с двумя накопителями и видите, что ОС установлена на /dev/sda, а второй диск /dev/sdb просто болтается пустым. Никакого RAID. Никакой отказоустойчивости. Умрет первый диск — ваши данные и аптайм исчезнут в небытии.
У вас два пути:
-
Идти в панель хостера и переустанавливать ОС, надеясь, что там есть чекбокс для сборки массива. Но даже если он есть, вы получите «голый» RAID 1 без преимуществ LVM.
-
Собрать всё руками.
Мы в SoftStore выбираем второй путь. Это дает 100% контроль над процессом и бесценную практику. Самое главное — нам не нужен Rescue-режим и не нужно писать тикеты в саппорт с просьбой «подключите ISO-образ». Мы соберем программный RAID и LVM прямо на работающей системе.
Часть 1. Миграция: Протокол «Деградированное зеркало»
Операционная система сейчас крутится на /dev/sda. Мы возьмем второй, пустой диск /dev/sdb, и создадим на нем деградированный RAID 1 (массив из двух дисков, где один изначально числится отсутствующим). Накатим поверх LVM, перенесем туда систему, переключим загрузчик и после перезагрузки добавим старый диск в массив.
Шаг 1. Подготовка и клонирование разметки
Используем sgdisk, чтобы клонировать таблицу разделов с sda на sdb.
sgdisk -R /dev/sdb /dev/sda
Обязательно генерируем новые UUID для sdb, иначе ядро запутается в дубликатах:
sgdisk -G /dev/sdb
Меняем тип разделов на sdb на Linux RAID (hex-код fd00), кроме раздела EFI.
sgdisk -t 2:fd00 /dev/sdbsgdisk -t 3:fd00 /dev/sdb
Шаг 2. Сборка массива «на лету»
Вместо первого диска передаем missing.
# Массив под /boot. Метаданные 1.0 (запись в конец раздела для совместимости с GRUB).mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb2 --metadata=1.0# Массив под корень. Метаданные 1.2.mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb3 --metadata=1.2
Шаг 3. Слой LVM и форматирование
Создаем логику на деградированном /dev/md1.
pvcreate /dev/md1vgcreate vg_system /dev/md1
Важный момент: никогда не отдавайте под корень всё место. Оставьте 30-40% пула свободным для снапшотов и расширения.
lvcreate -L 50G -n root_lv vg_systemlvcreate -L 8G -n swap_lv vg_system
Форматируем:
mkfs.ext4 /dev/md0mkfs.ext4 /dev/vg_system/root_lvmkswap /dev/vg_system/swap_lvmkfs.fat -F32 /dev/sdb1
Шаг 4. Live Sync: Переезд без остановки
Монтируем новую структуру во временную директорию:
mkdir /mnt/newroot && mount /dev/vg_system/root_lv /mnt/newrootmkdir /mnt/newroot/boot && mount /dev/md0 /mnt/newroot/bootmkdir /mnt/newroot/boot/efi && mount /dev/sdb1 /mnt/newroot/boot/efi

Используем rsync. Флаги -axAXH обязательны: они сохранят права, атрибуты и хардлинки, не заходя в виртуальные ФС вроде /proc.
rsync -axAXH --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/newroot/
Шаг 5. Chroot-хирургия
Теперь нужно объяснить системе, что её новый дом — LVM. Правим /mnt/newroot/etc/fstab. Заменяем старые UUID на новые пути: корень на /dev/mapper/vg_system-root_lv, а /boot на /dev/md0.
Заходим внутрь:
mount --bind /dev /mnt/newroot/devmount --bind /proc /mnt/newroot/procmount --bind /sys /mnt/newroot/syschroot /mnt/newroot
Обновляем конфиг RAID, образ initramfs (чтобы ядро увидело LVM при старте) и прошиваем GRUB:
mdadm --examine --scan > /etc/mdadm/mdadm.confupdate-initramfs -ugrub-install /dev/sdbupdate-grubexit
Шаг 6. Финализация зеркала
Уходим в reboot. Если всё сделано верно, сервер поднимется с /dev/sdb. Теперь зачищаем старый sda и добавляем его в массивы:
sgdisk -t 2:fd00 /dev/sdasgdisk -t 3:fd00 /dev/sdamdadm --manage /dev/md0 --add /dev/sda2mdadm --manage /dev/md1 --add /dev/sda3
Синхронизация пошла. Не забудьте скопировать EFI-раздел: dd if=/dev/sdb1 of=/dev/sda1.
Часть 2. Управление через LVM: Изоляция и расширение
Мы собрали эту конструкцию не только ради RAID, но и ради гибкости LVM.
Изоляция данных
Представьте, что у вас Docker или база данных. Если они забьют корень (/), сервер упадет. Правильный подход — нарезать под них отдельные логические тома.
lvcreate -L 100G -n data_lv vg_systemmkfs.xfs /dev/vg_system/data_lvmount /dev/vg_system/data_lv /var/lib/docker
Теперь, если логи Docker сожрут всё место в data_lv, система продолжит работать.
Online Resize: Расширение на лету
Место заканчивается? Если у вас есть свободное пространство в Volume Group (а мы его оставили на шаге 3), расширение занимает 5 секунд без остановки сервисов:
lvextend -L +50G /dev/vg_system/data_lvxfs_growfs /dev/vg_system/data_lv # Для XFS# или resize2fs /dev/vg_system/data_lv для ext4
Часть 3. Снапшоты: Право на ошибку
Снапшот в LVM — это моментальный слепок состояния. Это идеальная страховка перед обновлением ядра или опасным рефакторингом базы.
Создаем снапшот корня:
lvcreate -L 10G -s -n root_snapshot /dev/vg_system/root_lv
Если после обновления всё «окирпичилось», откатываемся одной командой:
lvconvert --merge /dev/vg_system/root_snapshotreboot
Система вернется в состояние до апдейта.
Часть 4. Протокол при отказе диска
Если smartctl рапортует о росте Reallocated_Sector_Ct, пора действовать.
-
Изгнание: Помечаем разделы диска как сбойные.
mdadm --manage /dev/md1 --fail /dev/sda3 --remove /dev/sda3
-
Замена: Вставляем новый диск.
-
Ребилд: Копируем разметку и возвращаем разделы в RAID.
sgdisk -R /dev/sda /dev/sdb && sgdisk -G /dev/sdamdadm --manage /dev/md1 --add /dev/sda3
Итог
Вы больше не зависите от кривых шаблонов хостера. У вас под капотом честное зеркало, гибкое управление квотами через LVM и механизм моментальных откатов через снапшоты. Это и есть профессиональная работа с инфраструктурой.
А какой сетап предпочитаете вы: «чистый» RAID или связку с LVM? Делитесь в комментариях своим опытом борьбы с хостерскими шаблонами.
ссылка на оригинал статьи https://habr.com/ru/articles/1029498/