Перевод дисков после инсталляции Proxmox VE в RAID1 (mirror)

Автор: | 05.06.2010

В повседневной работе появилась привычка резервировать данные. Обязательно RAID 1 (зеркало), резервное копирование. После установки Proxmox VE в дефолтном режиме, но с двумя дисками — было обнаружено что система разметила и использует только один диск, что неприемлемо. Ниже приведёно краткое руководство по переводу разделов диска в режим RAID 1. Итак, приступим (данное руководство делалось для версии 1.5 со стандартным ядром).

Установить Proxmox только на один первый диск (/dev/sda).

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

aptitude install mdadm initramfs-tools parted screen

Загрузить модуль raid1:

modprobe raid1

Разметить второй диск (/dev/sdb) примерно так:

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          52      417658+  fd  Linux raid autodetect
/dev/sdb2              53      121601   976342342+  fd  Linux raid autodetect

Т. е. первый раздел под /boot — 400-500 Mb, остальное под второй раздел для LVM (данный раздел не должен быть меньше используемого на первом диске).

Далее создаются RAID-разделы с использованием пока только второго диска:

mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-devices=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2
mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Создать резервную копию и пересоздать initrd:

cp -f /boot/initrd.img-`uname -r` /boot/initrd.img-`uname -r`~
mkinitramfs -o /boot/initrd.img-`uname -r` -r /dev/mapper/pve-root

Теперь нужно создать LVM-раздел на втором диске, добавить его в группу pve, переместить данные с LVM-раздела первого диска, на RAID-LVM-раздел второго диска, убрать из LVM первый диск (pvmove занимает длительное время, следующий набор операций лучше запускать в screen, чтобы процесс не прервался, если вы подключены к серверу удалённо):

pvcreate /dev/md1
vgextend pve /dev/md1
pvmove /dev/sda2 /dev/md1
vgreduce pve /dev/sda2

Теперь нужно подготовить RAID-раздел второго диска, скопировать на него /boot:

mkfs.ext3 /dev/md0
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
cp -ax /boot/* /mnt/md0
umount /mnt/md0
rmdir /mnt/md0

Исправить /etc/fstab, поменять запись о /boot так, чтобы она указывала на RAID-раздел:

/dev/md0 /boot ext3 defaults 0 1

Можно перемонтировать /boot:

umount /boot
mount /boot

Переразметить первый диск в соответствии со вторым (предварительно нужно удалить все разделы с /dev/sda):

parted /dev/sda rm 2
parted /dev/sda rm 1
sfdisk -d /dev/sdb | sfdisk /dev/sda

Теперь можно добавлять в RAID-массивы разделы первого диска:

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2

Нужно подождать пока RAID синхронизируется, контролировать процесс можно при помощи такой команды (на больших разделах данный процесс может занять много времени):

watch -n 1 "cat /proc/mdstat"

Теперь нужно переинсталировать загрузчик (GRUB) на обоих дисках (для grub, с grub2 данныяй метод не работает, смотри ниже):

grub
> find /grub/stage1
find /grub/stage1
(hd0,0)
(hd1,0)
> root (hd0,0)
> setup (hd0)
> root (hd1,0)
> setup (hd1)
> quit

Для grub2:

grub-install /dev/sda
grub-install /dev/sdb

Всё, система работает на RAID1 (зеркале).

Ссылки:

Facebooktwittergoogle_plusredditpinterestlinkedintumblr

Comments

comments

Перевод дисков после инсталляции Proxmox VE в RAID1 (mirror): 25 комментариев

  1. CGen

    Спасибо, товарищ!

    Очень понятно и очень помогло.

  2. BlackCap

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

  3. ras Автор записи

    Читал, но пока всё работает, причём вылет диска уже один был, но всё работает. А вот с аппаратным RAID уже был печальный опыт, когда диски целые, а раз в три месяца крошился массив с пересборкой. Причём не в фоне, когда система работает, а в своём биосе. Перевели на Linux софт-рэйд, и как рукой, и уже сколько лет :).

  4. азино

    Proxmox VE штука наверное хорошая, ещё не пробовал, но явными минусами есть отсутствие возможности установки из ISO-образа, записаного на USB-flash и автоматическая установка на указаный диск без возможности изменения размеров разделов и томов LVM, установки на программный рейд.

  5. ras Автор записи

    Возмоность установки с USB-Flash всё-таки есть, я 2 сервера таким образом установил :). Метод конечно не из прямейших, но работает. Разделы изменить как раз очень даже можно, разделы LVM двигаются очень даже просто, причём в сторону расширения — вообще на лету. А при изменении корня, конечно придётся загрузиться с чего-то другого, о можно. Про Soft-RAID как раз эта статья, у меня работает уже не один сервер, где дисковая система была переведена на RAID таким образом. Сам по себе Proxmox — это заточенный для быстрого разворачивания системы виртуализации под Linux, с удобным управлением через готовый web-интерфейс, если это всё не нужно, то естественно лучше использовать любимый дистрибутив Linux, установленный и настроенный под своё удобство.

  6. Блекджек

    Огромное вам спасибо, думал уже не найду как это сделать.

  7. User

    Большое спасибо за описание — несколько раз делал и все в порядке.

  8. Aza

    А сработает ли это в версии 2 beta2 ?
    там появился /dev/fuse … ?

  9. ras Автор записи

    А кто его знает, попробуйте. Да и чем fuse должен мешать? Это раз. Второе — зачем на бете 2 RAID? Побаловаться можно и без рэйда…

  10. vokinburt

    Спасибо! Всё получилось с версией Proxmox 1.9.

  11. akorvinus

    Не получается сделать рэйд в версии 1.9, mdadm никак не удается запустить. vokinburt, подскажите порядок действий, судя по комменту у вас успешно?

  12. ras Автор записи

    akorvinus, а вы точно подключили сервер к интернет, и выполнили успешно команду из начала документации?

    aptitude install mdadm initramfs-tools

  13. Александр

    Для Proxmox 2 инструкцию надо немного обновить:
    1) разбиваем второй диск, можно скопировать разметку первого и вручную поправить метки разделов (sfdisk -d /dev/sda | sfdisk /dev/sdb).
    2) Ставим пакет mdadm, при этом он сам обновит initrd:
    apt-get update && apt-get install mdadm
    3) Создаем рэйды:
    mdadm —create /dev/md0 —level=1 —raid-devices=2 missing /dev/sdb1
    mdadm —create /dev/md1 —level=1 —raid-devices=2 missing /dev/sdb2
    mdadm —detail —scan >> /etc/mdadm/mdadm.conf
    4) Переносим данные:
    pvcreate /dev/md1
    vgextend pve /dev/md1
    pvmove /dev/sda2 /dev/md1
    vgreduce pve /dev/sda2
    5) Переносим boot:
    mkfs.ext3 /dev/md0
    mkdir /mnt/md0
    mount /dev/md0 /mnt/md0
    cp -ax /boot/* /mnt/md0
    umount /mnt/md0
    rmdir /mnt/md0
    6) В /etc/fstab поменять запись о /boot так, чтобы она указывала на RAID-раздел.
    7) Готовим теперь первый диск:
    dd if=/dev/zero of=/dev/sda bs=512 count=1
    sfdisk -d /dev/sdb | sfdisk /dev/sda
    8) Синкаем рэйды:
    mdadm —add /dev/md0 /dev/sda1
    mdadm —add /dev/md1 /dev/sda2
    watch -n 1 «cat /proc/mdstat»
    9) И главное, выполняем установку и переонфигурирование GRUB:
    grub-install /dev/sda
    grub-install /dev/sdb
    update-grub
    10) Проверяем, что в grub.cfg есть наш md0 и правильные ссылки на ядро и initrd, перезагружаемся.

  14. ras Автор записи

    Не заметил разницы. Так в чём принципиальное отличие от ветки 1.x? Прошёлся по всем пунктам, да, кое-что делается не так как описано, но в принципе совпадает…

  15. Yura

    Большое спасибо за статью

    После команды sfdisk -d /dev/sdb | sfdisk /dev/sda выдает то что ниже

    root@virt:~# sfdisk -d /dev/sdb | sfdisk /dev/sda
    Checking that no-one is using this disk right now …
    BLKRRPART: Device or resource busy

    This disk is currently in use — repartitioning is probably a bad idea.
    Umount all file systems, and swapoff all swap partitions on this disk.
    Use the —no-reread flag to suppress this check.
    Use the —force flag to overrule all checks.

    Как лечить?

  16. ras Автор записи

    Видимо вы не отмонтировали второй диск (на котором будет делаться разбивка), либо не удалили с него разделы, о чём вам и пишется в сообщении об ошибке: «This disk is currently in use», т. е. диск используется.

  17. Yura

    Делал по описанию

    fdisk /dev/sda
    потом удалил все патиции

  18. ras Автор записи

    Это понятно. Но раз не даёт выполнять операции, значит возможно не отмонтированы разделы, посмотрите вывод команды mount.

  19. KV1s

    Пожалуйста добавте с статью информацию о том что операции:
    pvmove /dev/sda2 /dev/md1
    и
    mdadm —add /dev/md0 /dev/sda1
    mdadm —add /dev/md1 /dev/sda2

    для пустых терабайтных HDD могут выполнять по несколько часов каждая
    🙁

  20. ras Автор записи

    А зачем? Перемещение огромного раздела с одного иска на другой пропорционально по времени его размеру. А синхронизации рейда дожидаться не обязательно, главное синхронизировать /boot и установить загрузчик, далее рейд может синхронизироваться уже и во время работы системы.

  21. ras Автор записи

    Кстати на новом сервере не плохо было бы для начале ещё проверить память, например memtest86+. Тоже время занимает, но лучше всё сделать сразу, чем потом нарваться на вылет сервера, который уже в работе.

  22. KV1s

    Также прошу добавить, для статистики, что вероятность получение нерабочего сервера после очередного обновления и перезагрузки, с долгим гуглением как же назад собрать потерянный LVM раздел pve/root, гораздо выше чем смерть HDD.

    Хоть всё и закончилось удачно, но всё таки в ****** я видел такое резервирование.

  23. ras Автор записи

    Странно, мы уже не первый год используем подобную схему (LVM over Soft RAID), было уже много обновлений и перезагрузок. LVM-ы никуда не пропадали.

  24. OmManiPadmeHum

    а zfs для рейда в proxmox никто не пробывал ?

  25. aspid1

    За основу взят:
    «Перевод дисков после инсталляции Proxmox VE в RAID1 (mirror)» Блог Александра Руденко aka ras.

    Есть два нюанса.

    1. На момент запуска мною Proxmox VE v.3.0 RAID поддерживал метаданные версии 1.2.
    Очень хотелось собрать зеркало с этой версией метаданных!
    Proxmox использует ВЕСЬ диск (sda) при установке из iso и
    создает два раздела sda1 и sda2.
    Создать раздел sdb2 таким образом чтобы при включении md1 как физическое
    устройство в LVM (pve) его размер был не меньше чем sda2 не удалось!
    Другими словами, операция «pvmove /dev/sda2 /dev/md1» не проходит
    так как не хватает места на md1 (на диске 1Т не хватает 16G)!

    Думаю это можно обойти уменьшением размера «/dev/mapper/pve-data» и
    затем уменьшением используемого места на sda2.
    Средства LVM это позволяют. Не пробовал.

    Другой способ — использовать промежуточный диск меньшего размера.

    Итак.
    Подключаем два диска. Первый — промежуточный (меньшего размера, sda),
    второй (большего размера, sdb) — один из дисков для зеркалирования.
    Устанавливаем Proxmox из iso на флешке (он установится на sda, промежуточный)!

    Доустанавливаем пакеты:
    # aptitude update
    # aptitude upgrade
    # aptitude install mdadm initramfs-tools screen

    Загружаем модуль raid1 (если не перегружали комп):
    # modprobe raid1

    На sdb создаем два первичных раздела.
    Первый (sdb1) 400-500 Mb.
    Второй раздел (sdb2) — остальной объем.
    В номере предлагаемого последнего цидиндра две последние цифры я меняю на 00
    дабы избежать разного количества цилиндров на одинаковых дисках (было такое).

    Далее создаем RAID-разделы с использованием пока только второго диска:
    # mdadm —create /dev/md0 —level=1 —raid-devices=2 missing /dev/sdb1
    # mdadm —create /dev/md1 —level=1 —raid-devices=2 missing /dev/sdb2
    # mdadm —detail —scan >> /etc/mdadm/mdadm.conf

    Примечание (второй нюанс):
    В первой команде убрана опция «—metadata=0.90».
    И при выполнении команд создания соглашаемся на версию метаданных 1.2!

    Создаем резервную копию и initrd:
    # cp -f /boot/initrd.img-`uname -r` /boot/initrd.img-`uname -r`~
    # mkinitramfs -o /boot/initrd.img-`uname -r` -r /dev/mapper/pve-root

    Запускаем screen:
    # screen

    Теперь работаем с LVM:
    # pvcreate /dev/md1
    # vgextend pve /dev/md1
    # pvmove /dev/sda2 /dev/md1
    # vgreduce pve /dev/sda2

    Копируем содержимое /boot на md0:
    # mkfs.ext3 /dev/md0
    # mkdir /mnt/md0
    # mount /dev/md0 /mnt/md0
    # cp -ax /boot/* /mnt/md0
    # umount /mnt/md0
    # rmdir /mnt/md0

    Теперь надо добиться загрузки со второго физического (sdb) диска!

    Проверить что sdb1 является загрузочным (через fdisk)!

    Загрузчик:
    # grub-install /dev/sdb
    # update-grub

    Перегружаем комп.
    В меню выбора загрузки (обычно F8) BIOS-а (либо в настройках BIOS-а)
    выбираем загрузку со второго физического диска.
    При не удачной загрузке грузимся с первого физического диска
    и выясняем причину неудачи.

    При удачной загрузе гасим комп и меняем промежуточный диск на второй
    (мы его еще не использовали, теперь он будет у нас sda).

    Опять грузимся со второго физического диска.
    Удаляем с sda все разделы (fdisk) и создаем новые разделы:
    # sfdisk -d /dev/sdb | sfdisk /dev/sda

    Включаем в RAID:
    # mdadm —add /dev/md0 /dev/sda1
    # mdadm —add /dev/md1 /dev/sda2

    Загрузчик:
    # grub-install /dev/sda

    Ждем пока все зазеркалится:
    # watch «cat /proc/mdstat»

    Что же мы получили?
    Proxmox VE теперь работает на зеркале.
    Но не весь объем диска md1 используется!
    Из оставшегося дискового места можно создать новый логический том
    или расширишь «/dev/mapper/pve-data».

    Цитата:
    «Самая мощная возможность LVM — это то, что размеры логических томов
    можно менять на лету.»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *