ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x Хостинг

Рассмотрим восстановление Zfs RAID1, если нам требуется замена диска. Напомню, что у нас Proxmox установлен в efi bios и там используется загрузчик systemd-boot.

Немного расскажу о Proxmox. Это система виртуализации с открытым исходным кодом, основанная на Debian GNU/Linux. Использует гипервизор KVM и контейнеризацию LXC.

Задача — сделать на хосте Proxmox 5.2.1 зеркальный mdadm RAID.

Хост — машина с загрузкой только через EFI.

Предполагаем, что на первый диск /dev/sda у нас установлен ProxMox. Он может даже иметь виртуальные машины на борту.

В итоге, в массиве RAID1 у нас будут только корень, своп и данные. Два раздела с загрузчиками Legacy BIOS и EFI будут вне массивов, однако это не страшно — содержимое этих разделов практически не меняется и обоих дисках эти разделы будут идентичны.

apt-get update
apt-get install mdadm initramfs-tools screen

Переносим разметку на второй диск.

sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Назначаем разделу номер 3 тип Linux RAID:

echo -e "\nt\n3\n29\nw\nx" | fdisk /dev/sdb

Чистим и стартуем массивы:

mdadm --zero-superblock /dev/sdb3
yes|mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb3 missing

Дальше нам предстоят длительные операции и, если мы не работаем на физической консоли, то, на всякий случай, запустим screen:

screen

Создаем Physycal Volume на /dev/md0, расширяем имеющуюся Volume Group новым томом, перемещаем данные с /dev/sda3 и изымаем /dev/sda3 из Volume Group:

pvcreate /dev/md0
vgextend pve /dev/md0
pvmove /dev/sda3 /dev/md0
vgreduce pve /dev/sda3

Чистим и добавляем /dev/sda3 в массив:

pvremove /dev/sda3
echo -e "\nt\n3\n29\nw\nx" | fdisk /dev/sda
mdadm --add /dev/md0 /dev/sda3

Сохраняем конфигурацию mdadm:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Добавляем модули RAID в GRUB:

echo '' >> /etc/default/grub
echo '# RAID' >> /etc/default/grub
echo 'GRUB_PRELOAD_MODULES="part_gpt mdraid09 mdraid1x lvm"' >> /etc/default/grub

Обновляем GRUB и initrmfs:

update-grub
update-initramfs -u
mkdir /mnt/efi-boot
mount /dev/sda2 /mnt/efi-boot
grub-install /dev/sda
grub-install --target x86_64-efi --efi-directory /mnt/efi-boot

Копируем разделы 1 и 2 с /dev/sda на /dev/sdb

dd if=/dev/sda1 of=/dev/sdb1
dd if=/dev/sda2 of=/dev/sdb2

В результате, при загрузке с любого из дисков система будет работать идентично, а данные будут в зеркале.

Теперь нужно дождаться синхронизации массива и перезагрузиться.

cat /proc/mdstat


  • Last modified:
  • by 127.0.0.1

Актуально до версии Proxmox 3.1 включительно!

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

  • Добавляем в систему жесткий диск идентичный по размеру (до сектора) в идеале той-же модели, что и исходный
  • Создаем на нем 2 раздела (под загрузку и под данные)
  • Создаем 2 зеркальных рейд массива в degrade (разрушенном) состоянии (это когда массив который должен состоять из 2-х дисков, а состоит всего из одного.
  • Переносим всё (загрузочный раздел и раздел с данными) с первого диска на рейд массивы второго диска
  • Уничтожаем данные и структуру разделов на первом диске и подключаем его в качестве не хватающего диска в уже созданный рейд массив
  • Делаем оба диска загрузочными

Посмотрим список обнаруженных в системе физических дисков:

dmesg | egrep 'logical blocks|Direct-Access'

Убедимся, что система загружается с первого жесткого диска /dev/sda

df -h | grep '/boot'

Мы должны увидить нечто подобное:

/dev/sda1 504M 34M 445M 8% /boot

Если раздел boot находится не на /dev/sda1, необходимо отключить компьютер и поменять местами sata кабеля подключенные к жестким дискам.

Скопируем структуру разделов с первого диска на второй

sfdisk -d /dev/sda | sfdisk /dev/sdb --force

Сменим тип разделов на fd (Linux raid autodetect)

sfdisk -c /dev/sdb 1 fd --force
sfdisk -c /dev/sdb 2 fd --force

Проверим список разделов

sfdisk -l /dev/sdb

  • mdadm — менеджер программного RAID для Linix
  • initramfs -временная файловая система, использующаяся ядром при начальной загрузке
apt-get update
apt-get install -y mdadm initramfs-tools

Все параметры по умолчанию

Далее необходимо убедится, что на дисках не осталось суперблоков. Эти блоки являются метками, которые проставляются в конец диска если он являлся частью рейд массива ранее. Часто они не удаляются в процессе форматирования жесткого диска при установке PROXMOX и их нужно затереть вручную!

Проверяем, нет ли суперблоков

mdadm --misc --examine /dev/sda
mdadm --misc --examine /dev/sdb

При разбитии диска sda(sdb) создаются разделы границы которых отмеченные суперблоками их не трогаем, увидим похожее на это:

 MBR Magic : aa55
Partition[0] : 1046528 sectors at 2048 (type 83)
Partition[1] : 975724544 sectors at 1048576 (type 8e)

Проверяем, нет ли суперблоков в разделах

mdadm --misc --examine /dev/sdb1
mdadm --misc --examine /dev/sdb2

Если все в порядке и суперблоков нет, то увидим нечто подобное:

mdadm: No md superblock detected on /dev/sdb1

Если есть, то перед продолжением настройки их необходимо удалить! Удаление суперблоков

Создадим файл настроек, предварительно сохранив оригинальный

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.orig
echo "" > /etc/mdadm/mdadm.conf
nano /etc/mdadm/mdadm.conf
# Автоматическое назначение прав на новые массивы
CREATE owner=root group=disk mode=0660 auto=yes
# Почтовый адрес для уведомлений о событиях происходящих с массивом
MAILADDR it.khabarovsk@dns-shop.ru
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

Проверим, что информация о наших массивах записалась в файл параметров

cat /etc/mdadm/mdadm.conf

Создаем LVM-раздел на втором диске и добавляем его в группу pve

pvcreate /dev/md1 -ff
vgextend pve /dev/md1

Переместим данные с LVM-раздела первого диска, на RAID-LVM-раздел второго диска. Процедура может продолжаться очень долго. Время зависит от объема и скорости жестких дисков.

pvmove /dev/sda2 /dev/md1

Убираем из LVM первый диск

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

Настроим параметры подключения системных дисков с учетом загрузки с raid. Пересоздадим конфигурационный файл fstab предварительно сохранив оригинальный.

cp /etc/fstab /etc/fstab.orig
echo "" > /etc/fstab
nano /etc/fstab
/dev/pve/root / ext3 errors=remount-ro 0 1
/dev/pve/data /var/lib/vz ext3 defaults 0 1
/dev/md0 /boot ext3 defaults 0 1
/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0

Перемонтируем загрузочный раздел

umount /boot
mount /boot

Разрешим системе автоматически запускаться, если один из дисков вышел из строя или отсутствует (по умолчанию при загрузке будет выдаваться запрос на разрешение запуска)

echo "BOOT_DEGRADED=true" > /etc/initramfs-tools/conf.d/mdadm
mkinitramfs -o /boot/initrd.img-`uname -r`

Отключим графический режим загрузчика из-за которого система может не загружаться с рейда.

echo "GRUB_TERMINAL=console" >> /etc/default/grub

Копируем структуру разделов со второго диска на первый

sfdisk -d /dev/sdb | sfdisk /dev/sda --force

Добавим разделы первого диска в RAID

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

Переустановим загрузчики на каждый носитель

grub-install --recheck /dev/sda
grub-install --recheck /dev/sdb
update-grub

Контролируем процесс синхронизации массива

watch cat /proc/mdstat

Проверим список дисков в системе

fdisk -l 2>/dev/null|grep -s -E "Диск /|Disk /"|grep -s -Pv "md|lv|dm"

Если диск был подключен на горячую и не увидился в системе, необходимо пересканировать порт в который его подключили.

Если не известно, в какой конкретно порт подключен носитель, то можно пересканировать все.
  • Список имеющихся портов
ls /sys/class/scsi_host/
  • Пример пересканирования порта host3
echo "- - -" > /sys/class/scsi_host/host3/scan
  • Если новый диск физически при подключении получил другое имя например sdc, надо отключить его программно выполнив:
echo "1" > /sys/block/sdc/device/delete

а затем повторить процедуру переопроса порта

Диск который будет добавляться в массив, на данном этапе не должен быть быть членом рейда. Проверим, какой диск остался жив в рейде:

cat /proc/mdstat

Чтобы не ошибиться в дальнейших действиях и не испортить данные создадим переменные с именами дисков.

workdsk=sdb # Диск, который подключен к массиву и содержит систему
cleandsk=sda # чистый (пустой) диск, который будет добавлен

Произведем копирование структуры разделов с рабочего на чистый диск и подключим его к массиву

dd if=/dev/$workdsk of=/dev/$cleandsk bs=512 count=34
blockdev --rereadpt /dev/$cleandsk
mdadm --add /dev/md0 /dev/${cleandsk}1
mdadm --add /dev/md1 /dev/${cleandsk}2

Установим загрузчик на добавленный диск

grub-install /dev/$cleandsk

На этом действия по переносу системы на рейд массив завершены, осталось дождаться окончания синхронизации массива. Контролировать процесс можно с помощью команды:

watch cat /proc/mdstat


Время на прочтение

ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x
В данном материале описывается процесс миграции свежеустановленного гипервизора Proxmox 3.0 в программный RAID1. Разработчики Proxmox в своей wiki пишут о том, что данное решение официально не поддерживается и не рекомендуется к использованию. Взамен этого предлагается использовать решения на протестированных аппаратных raid-контроллерах. Тем не менее в сети можно найти несколько мануалов по этой теме и практики успешной эксплуатации softraid’а совместно с Proxmox’ом. К сожалению, большинство этих мануалов нельзя назвать пошаговыми руководствами к действию: все они содержат те или иные ошибки, которые мешают достигнуть требуемого результата. Взяв за основу один из таких мануалов, я попытался исправить эту ситуацию. Приведённое ниже решение несколько раз было по шагам протестировано сначала в виртуалке, а затем использовано для миграции данных на реальном железе. В результате этого получился рабочий how-to, который предлагается вашему вниманию.

Перед началом миграции у нас имеется следующее:

  • Сервер с двумя HDD одинаковой емкости (/dev/sda и /dev/sdb). Диски не в RAID’e.
  • Proxmox 3.0 установлен с нуля на первый HDD (/dev/sda)
  • В системе установлены все последние обновления (aptitude update && aptitude upgrade)

По окончании миграции оба HDD будут объединены в Soft RAID1, при этом мы сохраним данные, которые были на диске до начала миграции.

Миграция будет происходить в несколько этапов:
0. Установка необходимого ПО.
1. Подготовка дисков к переводу в RAID1.
2. Перенос /boot на /dev/md0.
3. Модификация /etc/fstab.
4. Модификация Grub2.
5. Перенос LVM на /dev/md1, перевод исходного диска в RAID1.

0. Установка необходимого ПО.

Ставим mdadm и screen. При установке mdadm спросит, какие модули нужно включить при загрузке. Отвечаем «all». Screen ставить не обязательно, но он поможет нам подстраховаться на 5-м этапе, когда мы будем переносить LVM.

root@kvm0:~# aptitude install mdadm screen

1. Подготовка дисков к переводу в RAID1.

Копируем разметку диска sda на sdb. Здесь и далее я привожу полный вывод команд, чтобы на каждом шаге можно было свериться с результатом.

root@kvm0:~# sfdisk -d /dev/sda | sfdisk -f /dev/sdb
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdb: 4177 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature /dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0 Device Boot Start End #sectors Id System
/dev/sdb1 * 2048 1048575 1046528 83 Linux
/dev/sdb2 1048576 67108863 66060288 8e Linux LVM
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
Warning: partition 1 does not end at a cylinder boundary
Warning: partition 2 does not start at a cylinder boundary
Warning: partition 2 does not end at a cylinder boundary
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)

Помечаем разделы диска sdb, как «Linux raid auto».

root@kvm0:~# sfdisk -c /dev/sdb 1 fd
Done
root@kvm0:~# sfdisk -c /dev/sdb 2 fd
Done

Чтобы убедиться, что на диске нет информации о ранее созданных RAID-массивах, делаем следующее.

root@kvm0:~# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
root@kvm0:~# mdadm --zero-superblock /dev/sdb2
mdadm: Unrecognised md component device - /dev/sdb2

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

root@kvm0:~# mdadm --create -l 1 -n 2 /dev/md0 missing /dev/sdb1 --metadata=1.1
mdadm: array /dev/md0 started.
root@kvm0:~# mdadm --create -l 1 -n 2 /dev/md1 missing /dev/sdb2 --metadata=1.1
mdadm: array /dev/md1 started.

Добавляем информацию о массиве в mdadm.conf

root@kvm0:~# cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
root@kvm0:~# mdadm --examine --scan >> /etc/mdadm/mdadm.conf

2. Перенос /boot на /dev/md0.

Создаём файловую систему на /dev/md0. Монтируем её в /mnt/md0 и копируем туда содержимое /boot.

root@kvm0:~# mkfs.ext3 /dev/md0
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 522944 blocks
26147 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
64 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:	8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
root@kvm0:~# mkdir /mnt/md0
root@kvm0:~# mount /dev/md0 /mnt/md0
root@kvm0:~# cp -ax /boot/* /mnt/md0

3. Модификация /etc/fstab.

Комментируем в /etc/fstab монтирование boot-раздела через UUID и прописываем монтирование раздела через /dev/md0.

root@kvm0:~# sed -i 's/^UUID/#UUID/' /etc/fstab
root@kvm0:~# echo '/dev/md0 /boot ext3 defaults 0 1' >> /etc/fstab

В итоге /etc/fstab должен выглядеть так.

root@kvm0:~# cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/pve/root / ext3 errors=remount-ro 0 1
/dev/pve/data /var/lib/vz ext3 defaults 0 1
#UUID=eb531a48-dea8-4356-9b56-8aa800f14d68 /boot ext3 defaults 0 1
/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0
/dev/md0 /boot ext3 defaults 0 1
4. Модификация Grub2.

Добавляем поддержку RAID1.

root@kvm0:~# echo 'GRUB_DISABLE_LINUX_UUID=true' >> /etc/default/grub
root@kvm0:~# echo 'GRUB_PRELOAD_MODULES="raid dmraid"' >> /etc/default/grub
root@kvm0:~# echo 'GRUB_TERMINAL=console' >> /etc/default/grub
root@kvm0:~# echo raid1 >> /etc/modules
root@kvm0:~# echo raid1 >> /etc/initramfs-tools/modules

Устанавливаем загрузчик на оба диска.

root@kvm0:~# grub-install /dev/sda --recheck
Installation finished. No error reported.
root@kvm0:~# grub-install /dev/sdb --recheck
Installation finished. No error reported.
root@kvm0:~# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-20-pve
Found initrd image: /boot/initrd.img-2.6.32-20-pve
Found memtest86+ image: /memtest86+.bin
Found memtest86+ multiboot image: /memtest86+_multiboot.bin
done
root@kvm0:~# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.32-20-pve

5. Перенос LVM на /dev/md1, перевод исходного диска в RAID1.

Добавляем boot-раздел на исходном диске /dev/sda в RAID1.

root@kvm0:~# sfdisk -c /dev/sda 1 fd
Done
root@kvm0:~# mdadm --add /dev/md0 /dev/sda1
mdadm: added /dev/sda1

Теперь нам нужно перенести данные с LVM-раздела /dev/sda2 в /dev/md1. Перенос данных при помощи pvmove занимает довольно большое время, поэтому дальнейшие действия выполняем в screen’е.

root@kvm0:~# screen bash
root@kvm0:~# pvcreate /dev/md1 Writing physical volume data to disk "/dev/md1" Physical volume "/dev/md1" successfully created
root@kvm0:~# vgextend pve /dev/md1 Volume group "pve" successfully extended
root@kvm0:~# pvmove /dev/sda2 /dev/md1 /dev/sda2: Moved: 2.0% /dev/sda2: Moved: 14.5% /dev/sda2: Moved: 17.5% /dev/sda2: Moved: 19.2% /dev/sda2: Moved: 20.3% /dev/sda2: Moved: 24.7% /dev/sda2: Moved: 31.4% /dev/sda2: Moved: 32.5% /dev/sda2: Moved: 43.6% /dev/sda2: Moved: 63.3% /dev/sda2: Moved: 81.4% /dev/sda2: Moved: 100.0%
root@kvm0:~# vgreduce pve /dev/sda2 Removed "/dev/sda2" from volume group "pve"

Добавляем второй раздел исходного диска в RAID1.

root@kvm0:~# sfdisk --change-id /dev/sda 2 fd
Done
root@kvm0:~# mdadm --add /dev/md1 /dev/sda2
mdadm: added /dev/sda2

Наливаем себе чашечку кофе и наблюдаем за синхронизацией массива через cat /proc/mdstat.
На этом миграция Proxmox 3.0 VM в software RAID1 завершена.

Читайте также:  Почему на сайте возникает ошибка 504? Как это исправить. как справиться с проблемой

Диски HDD разбиты одиаково на три партиции (EFI, boot, data).

Разделы data — в зеркальном массиве mdadm. На нем лежит два lvm — корень системы и lvm с данными под ZFS.

Диски SSD — по одному разделу, в зеркальном массиве mdadm, поверх массива — LVM, а lmv используются как swap, zfs ZIL и ZFS L2ARC.

Зеркальные массивы mdadm на 2-х дисках HDD и 2-х SSD.

На массивах — LVM. На LVM — ZFS.

sda, sdb — HDD

sdc, sdd — SSD

cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda3[0] sdb3[1] 1953250304 blocks [2/2] [UU] bitmap: 7/15 pages [28KB], 65536KB chunk
md2 : active raid1 sdd1[0] sdc1[1] 97683584 blocks [2/2] [UU]
unused devices: <none>
 --- Physical volume --- PV Name /dev/md1 VG Name pve PV Size <1.82 TiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 476867 Free PE 0 Allocated PE 476867 PV UUID rCzF98-PuUS-Meer-8Ger-vffN-vBXQ-kNciWH --- Physical volume --- PV Name /dev/md2 VG Name pve PV Size <93.16 GiB / not usable 2.12 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 23848 Free PE 0 Allocated PE 23848 PV UUID 8d4I3j-p4UL-k8dq-bolM-pC8w-z21H-HoOZcv
 --- Logical volume --- LV Path /dev/pve/swap LV Name swap VG Name pve LV UUID dGxWuM-iYbO-QHLU-SILo-LVJa-2NMX-ZWf2fe LV Write Access read/write LV Creation host, time proxmox, 2018-10-24 22:47:17 +0300 LV Status available # open 0 LV Size 32.00 GiB Current LE 8192 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Segments --- Logical extents 0 to 8191: Type linear Physical volume /dev/md1 Physical extents 0 to 8191 --- Logical volume --- LV Path /dev/pve/root LV Name root VG Name pve LV UUID a7G2ko-sOhu-iM4f-kYQb-2Y8M-u9J2-dlLEQX LV Write Access read/write LV Creation host, time proxmox, 2018-10-24 22:47:17 +0300 LV Status available # open 1 LV Size 16.00 GiB Current LE 4096 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 --- Segments --- Logical extents 0 to 4095: Type linear Physical volume /dev/md1 Physical extents 8192 to 12287 --- Logical volume --- LV Path /dev/pve/swap-ssd LV Name swap-ssd VG Name pve LV UUID oS0M42-tXl0-0Lal-SJva-6ejX-kucf-xyfuC0 LV Write Access read/write LV Creation host, time proxmox, 2019-02-16 01:00:38 +0300 LV Status available # open 2 LV Size 32.00 GiB Current LE 8192 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 --- Segments --- Logical extents 0 to 8191: Type linear Physical volume /dev/md2 Physical extents 0 to 8191 --- Logical volume --- LV Path /dev/pve/data-zfs-lvm LV Name data-zfs-lvm VG Name pve LV UUID 0MBZHE-D1q2-A4Bd-VZPy-RUgb-l8es-erxcyy LV Write Access read/write LV Creation host, time proxmox, 2019-08-14 13:14:39 +0300 LV Status available # open 1 LV Size 1.77 TiB Current LE 464579 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:3 --- Segments --- Logical extents 0 to 464578: Type linear Physical volume /dev/md1 Physical extents 12288 to 476866 --- Logical volume --- LV Path /dev/pve/zfs-zil LV Name zfs-zil VG Name pve LV UUID kOW2k0-MhrC-97Fp-6kVf-qkdl-Jn35-3vXC6h LV Write Access read/write LV Creation host, time proxmox, 2019-08-15 11:36:09 +0300 LV Status available # open 1 LV Size 8.00 GiB Current LE 2048 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4 --- Segments --- Logical extents 0 to 2047: Type linear Physical volume /dev/md2 Physical extents 8192 to 10239 --- Logical volume --- LV Path /dev/pve/zfs-l2arc LV Name zfs-l2arc VG Name pve LV UUID waJkhg-nRfS-rqTg-tvQk-Zpt3-30gm-t6bqTG LV Write Access read/write LV Creation host, time proxmox, 2019-08-15 11:36:54 +0300 LV Status available # open 1 LV Size <53.16 GiB Current LE 13608 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:5 --- Segments --- Logical extents 0 to 13607: Type linear Physical volume /dev/md2 Physical extents 10240 to 23847
zpool status pool: pve-data state: ONLINE scan: scrub repaired 0B in 1 days 01:47:53 with 0 errors on Mon May 11 02:11:55 2020
config: NAME STATE READ WRITE CKSUM pve-data ONLINE 0 0 0 data-zfs-lvm ONLINE 0 0 0 logs zfs-zil ONLINE 0 0 0 cache zfs-l2arc ONLINE 0 0 0
errors: No known data errors

На каждом HDD — четыре раздела:

На каждом SSD три раздела:

Должны остаться два массива — первый root на HDD под LVM, второй — swap на SSD без LVM.

Одинственный pv — mdadm массив на HDD под root.

Все функции зеркалирования для данных переезжают на ZFS.

Перенос будет происходить на живой системе.

  1. отключаем весь функционал на SSD (swap, ZIL, L2ARC).

    zpool remove pve-data /dev/pve/zfs-zil
    zpool remove pve-data /dev/pve/zfs-l2arc
    swapoff -a
  2. переразбиваем диски. Размер раздела под ZIL — вычисляется по формуле ‘скорость записи на SSD’ * ‘интервал сброса изменений на диск’. Дефолтный интервал сброса данных (commit interval) — 5 секунд. ТО есть в случае с SATA SSD размер ZIL должне быть 250MB/s * 5s = 1250 Mb. Получилось примерно так:

    Device Start End Sectors Size Type
    /dev/sdd1 2048 67110911 67108864 32G Linux swap
    /dev/sdd2 67110912 75499519 8388608 4G Linux filesystem
    /dev/sdd3 75499520 195369421 119869902 57.2G Linux filesystem
  3. создаем mdadm-массив, создаем на нем swap, прописываем в /etc/fstab и включаем

    sudo mdadm --create /dev/md2 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdc1 /dev/sdd1
    sudo mkswap /dev/md2
    swapon -a
  4. Включаем обратно ZIL в зеркальном режиме

    sudo zpool add pve-data log mirror /dev/sdc2 /dev/sdd2

    и L2ARC в обычном режиме (zfs не поддерживает cache в зеркальном режиме )

    sudo zpool add pve-data cache /dev/sdc3 /dev/sdd3
  1. изымаем один из дисков из массива mdadm.

    sudo mdadm /dev/md1 -r /dev/sda3
  2. переразбиваем (количество разделов должно стать 4 — третий раздел должен разделиться на два — root и data).

    sudo sgdisk --zap-all /dev/sda
    sudo sgdisk -n 1:2048:4095 /dev/sda
    sudo sgdisk -t 1:EF02 /dev/sda
    sudo sgdisk -n 2:4096:528383 /dev/sda
    sudo sgdisk -t 2:EF00 /dev/sda
    sudo sgdisk -n 3:528384:+16394MiB /dev/sda
    sudo sgdisk -t 3:FD00 /dev/sda
    sudo sgdisk -n 4:34103296:0 /dev/sda
    Number Start (sector) End (sector) Size Code Name 1 2048 4095 1024.0 KiB EF02 2 4096 528383 256.0 MiB EF00 3 528384 3907029134 1.8 TiB FD00
    Number Start (sector) End (sector) Size Code Name 1 2048 4095 1024.0 KiB EF02 2 4096 528383 256.0 MiB EF00 3 528384 34103295 16.0 GiB FD00 4 34103296 3907029134 1.8 TiB 8300
  3. создаем на новом разделе root зеркальный массив mdadm из одного диска.

    sudo mdadm --zero-superblock /dev/sda3
    sudo mdadm --create /dev/md3 --level=1 --raid-devices=2 --metadata=0.90 /dev/sda3 missing
    sudo mdadm --detail --scan | sudo tee /etc/mdadm/mdadm.conf
  4. Добавляем новый зеркальный массив mdadm в Volume Group pve и перемещаем на него root lvm.

    sudo pvcreate /dev/md3
    sudo vgextend pve /dev/md3
    sudo pvmove -n /dev/pve/root /dev/md1 /dev/md3
    update-grub
    update-initramfs -u
  5. В существующий ZFS-pool подключаем новый data раздел в качестве зеркала.

    sudo zpool attach pve-data /dev/pve/data-zfs-lvm /dev/sda4

    и ждем синхронизации. Состояние синхронизации смотрим так:

    sudo zpool status
  6. Изымаем из ZFS-pool старое устрйоство (lvm)

    sudo zpool detach pve-data /dev/pve/data-zfs-lvm
  7. В результате старый массив mdadm (на котором были lvm root и data) освободится и его можно будет остановить:

     sudo lvremove /dev/pve/data-zfs-lvm
    sudo vgreduce pve /dev/md1
    sudo pvremove /dev/md1
    sudo mdadm --stop /dev/md1
    sudo mdadm --zero-superblock /dev/sdb3
  8. Перезбиваем второй диск на четыре раздела, подключаем третий раздел в mdadm-массив, а четвертый в — качестве mirror в zfs-pool:

    sudo sgdisk -d 3 /dev/sdb
    sudo sgdisk -n 3:528384:34103295 /dev/sdb
    sudo partprobe /dev/sdb
    sudo sgdisk -t 3:FD00 /dev/sdb
    sudo partprobe /dev/sdb
    sudo sgdisk -n 4:34103296:0 /dev/sdb
    sudo partprobe /dev/sdb

    Вот в этом месте надо бы перезагрузиться, поскольку есть сомнения, что таблица разделов хорошая. После ребута добавляем разделы в зеркала (mdadm и zfs)

    sudo zpool attach pve-data /dev/sda4 /dev/sdb4
    sudo mdadm --add /dev/md3 /dev/sdb3
    sudo mdadm --detail --scan | sudo tee /etc/mdadm/mdadm.conf
    update-grub
    update-initramfs -u

Всё. Тестировать на производительность не тестировал, но логично, что удаление двух промежуточных слоев абстракции (mdadm и lvm) из-под zfs pool должно пойти на пользу.

Читайте также:  Что выбрать: Zabbix или Prometheus? Оценка различий

Актуально для версии Proxmox 4 и выше, в том числе для дисков больше 2Тб с gpt разметкой.

  • Proxmox должен быть установлен с параметрами по умолчанию, а конкретно использовать ext4 и lvm. При установке на ZFS данная инструкция не применима!
  • Установку необходимо выполнять не через UEFI иначе загрузчик в конце процедуры установить не удастся!

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

  • Добавляем в систему жесткий диск идентичный по размеру. Если диски не равны по размеру, установку надо выполнить на меньший.
  • Создаем на нем 3 раздела (под bios загрузчик, под загрузочный раздел и под данные)
  • Создаем 2 зеркальных рейд массива в degrade (разрушенном) состоянии (это когда массив который должен состоять из 2-х дисков, а состоит всего из одного.
  • Переносим всё (загрузочный раздел и раздел с данными) с первого диска на рейд массивы второго диска
  • Уничтожаем данные и структуру разделов на первом диске и подключаем его в качестве не хватающего диска в уже созданный рейд массив
  • Делаем оба диска загрузочными

Перед установкой компонентов, если нет официальной подписки на промышленный репозиторий proxmox-а, нужно добавить текущий не стабильный:

nano /etc/apt/sources.list.d/pve-enterprise.list

заменяем в строке

deb https://enterprise.proxmox.com/debian jessie pve-enterprise
deb http://download.proxmox.com/debian jessie pve-no-subscription
  • mdadm — менеджер программного RAID для Linix
  • initramfs -временная файловая система, использующаяся ядром при начальной загрузке
apt-get update
apt-get install -y mdadm initramfs-tools parted

Посмотрим список обнаруженных в системе физических дисков:

dmesg | egrep 'logical blocks|Direct-Access'

Убедимся, что система загружается с первого жесткого диска /dev/sda

pvs

Видим нечто подобное:

 PV VG Fmt Attr PSize PFree /dev/sda3 pve lvm2 a-- 31.87g 3.87g
  • Если раздел lvm том pve находится не на /dev/sda3, необходимо отключить компьютер и поменять местами sata кабеля подключенные к жестким дискам.

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

Задаем диски, который будем готовить под RAID

workdsk=sda # Системный
newdsk=sdb # Новый (дополнительный) диск, на который будем копировать данные

Определим размеры и создадим переменные с размерами разделов. Можно их откорректировать на этом этапе при необходимости.

sizedsk_work=`parted /dev/$workdsk print -m | grep "/dev/$workdsk" | awk -F ":" '{print $2}'`
sizedsk_new=`parted /dev/$newdsk print -m | grep "/dev/$newdsk" | awk -F ":" '{print $2}'`
echo ""
echo "Активный системный:" $sizedsk_work ", Новый пустой:" $sizedsk_new

Очищаем таблицу разделов на указанном жестком диске и размечаем диск в GPT.

dd if=/dev/zero of=/dev/$newdsk bs=512 count=1
parted /dev/$newdsk mklabel gpt

Создаем на новом диске разделы таким образом, чтобы в сумме они не превысили размер исходного (системного) диска.

parted /dev/$newdsk mkpart primary 1M 10M
parted /dev/$newdsk set 1 bios_grub on
parted /dev/$newdsk mkpart primary 10М 1G
parted /dev/$newdsk mkpart primary 1G $sizedsk_work
parted /dev/$newdsk print

Все параметры по умолчанию

Далее необходимо убедится, что на дисках не осталось суперблоков. Эти блоки являются метками, которые проставляются в конец диска если он являлся частью рейд массива ранее. Часто они не удаляются в процессе форматирования жесткого диска при установке PROXMOX и их нужно затереть вручную!

  • Проверяем, нет ли суперблоков
mdadm --misc --examine /dev/sda
mdadm --misc --examine /dev/sdb
mdadm --misc --examine /dev/sdb1
mdadm --misc --examine /dev/sdb2

Если все в порядке и суперблоков нет, то увидим нечто подобное:

mdadm: No md superblock detected on /dev/sdb

Если есть, то перед продолжением настройки их необходимо удалить! Удаление суперблоков

Создадим файл настроек, предварительно сохранив оригинальный.

Укажем права на массивы и почтовый адрес для уведомлений о событиях происходящих с массивом

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.orig
echo "" > /etc/mdadm/mdadm.conf
nano /etc/mdadm/mdadm.conf
CREATE owner=root group=disk mode=0660 auto=yes
MAILADDR user@mail.domain

mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-devices=2 missing /dev/${newdsk}2
mdadm --create /dev/md1 --metadata=0.90 --level=1 --raid-devices=2 missing /dev/${newdsk}3

Если все впорядке и массивы создались, сохраним параметры массива в конфигурационном файле:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Проверим, что информация о наших массивах записалась в файл параметров

cat /etc/mdadm/mdadm.conf

Создаем LVM-раздел на втором диске и добавляем его в группу pve

pvcreate /dev/md1 -ff
vgextend pve /dev/md1

Переместим данные с LVM-раздела первого диска, на RAID-LVM-раздел второго диска. Процедура может продолжаться очень долго. Время зависит от объема и скорости жестких дисков.

pvmove /dev/${workdsk}3 /dev/md1

Убираем из LVM первый диск

vgreduce pve /dev/${workdsk}3

Подготовим загрузочный 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

Добавим монтирование загрузочного раздела.

  • Определим UUID идентификатор раздела
blkid |grep md0

Видим похожее:
/dev/md0: UUID=»b20e584b-88ab-4262-ba9d-7e1a2523ff95» SEC_TYPE=»ext2″ TYPE=»ext3»
Добавляем в конец файла строку со своим UUID

nano /etc/fstab
UUID="b20e584b-88ab-4262-ba9d-7e1a2523ff95" /boot ext3 defaults 0 1

Премонтируем загрузочный раздел с raid тома

mount /boot

Разрешим системе автоматически запускаться, если один из дисков вышел из строя или отсутствует (по умолчанию при загрузке будет выдаваться запрос на разрешение запуска)

echo "BOOT_DEGRADED=true" > /etc/initramfs-tools/conf.d/mdadm
mkinitramfs -o /boot/initrd.img-`uname -r`

Отключим графический режим загрузчика из-за которого система может не загружаться с рейда.

echo "GRUB_TERMINAL=console" >> /etc/default/grub

Установим загрузчик на новый диск

grub-install /dev/sdb

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

Диск который будет добавляться в массив, на данном этапе не должен быть быть членом рейда. Проверим, какой диск в рейде:

cat /proc/mdstat|grep md0|grep -Po "raid1 ..."
raid1 sdb

Значит система находится на диске sdb

  • Если диски не заменялись на включенной системе, этот этап пропускаем

Если диск был подключен на горячую и не увиделся в системе, необходимо пересканировать порт в который его подключили.

Если не известно, в какой конкретно порт подключен носитель, то можно пересканировать все.
  • Список имеющихся портов
ls /sys/class/scsi_host/
  • Пример пересканирования порта host3
echo "- - -" > /sys/class/scsi_host/host3/scan
  • Если новый диск физически при подключении получил другое имя например sdc, надо отключить его программно выполнив:
echo "1" > /sys/block/sdc/device/delete

  • Чтобы не ошибиться в дальнейших действиях и не испортить данные создадим переменные с именами дисков.
workdsk=sdb # Диск, который подключен к массиву и содержит систему
cleandsk=sda # чистый (пустой) диск, который будет добавлен

Произведем копирование структуры разделов с рабочего на чистый диск и подключим его к массиву

sgdisk /dev/${workdsk} -R=/dev/${cleandsk}
sgdisk -G /dev/${workdsk}

Подключаем разделы с нового диска к массивам

mdadm --add /dev/md0 /dev/${cleandsk}2
mdadm --add /dev/md1 /dev/${cleandsk}3

cat /proc/mdstat

И только в этом случае устанавливаем загрузчик

grub-install /dev/$cleandsk

На этом действия по переносу системы на рейд массив завершены, осталось дождаться окончания синхронизации массива. Контролировать процесс в реальном времени можно с помощью команды:

watch cat /proc/mdstat
  • Если это первая, экспериментальная попытка, то для неплохо проверить работу путем поочередной загрузки системы то с первого диска, то со второго путем их поочередного отключения. После этого эксперимента массив автоматически не соберется и один из дисков нужно будет востановить по схеме добавления диска в RAID.


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

  • Добавляем в систему жесткий диск идентичный по размеру (до сектора) в идеале той-же модели, что и исходный
  • Создаем на нем 2 раздела (под загрузку и под данные)
  • Создаем 2 зеркальных рейд массива в degrade (разрушенном) состоянии (это когда массив который должен состоять из 2-х дисков, а состоит всего из одного.
  • Переносим всё (загрузочный раздел и раздел с данными) с первого диска на рейд массивы второго диска
  • Уничтожаем данные и структуру разделов на первом диске и подключаем его в качестве не хватающего диска в уже созданный рейд массив
  • Делаем оба диска загрузочными

  • Перед началом работ, не помешает проверить состояние SMART жестких дисков и настроить его контроль. Сервер_NAS_(сетевая_система_хранения_данных)#Мониторинг и уведомления о неисправностях

Затем надо полностью очистить от всех имеющихся данных и разделов второй (добавленный) диск.

Посмотрим список обнаруженных в системе физических дисков:

dmesg | egrep 'logical blocks|Direct-Access'

Убедимся, что система загружается с первого жесткого диска /dev/sda

df -h | grep '/boot'

Мы должны увидить нечто подобное:

/dev/sda1 504M 34M 445M 8% /boot

Если раздел boot находится не на /dev/sda1, необходимо отключить компьютер и поменять местами sata кабеля подключенные к жестким дискам.

Скопируем структуру разделов с первого диска на второй

sfdisk -d /dev/sda | sfdisk /dev/sdb --force

Сменим тип разделов на fd (Linux raid autodetect)

sfdisk -c /dev/sdb 1 fd --force
sfdisk -c /dev/sdb 2 fd --force

Проверим список разделов

sfdisk -l /dev/sdb

  • mdadm — менеджер программного RAID для Linix
  • initramfs -временная файловая система, использующаяся ядром при начальной загрузке
apt-get update
apt-get install -y mdadm initramfs-tools

Все параметры по умолчанию

modprobe raid1
echo alias md-personality-3 raid1 >> /etc/modprobe.conf

Далее необходимо убедится, что на дисках не осталось суперблоков. Эти блоки являются метками, которые проставляются в конец диска если он являлся частью рейд массива ранее. Часто они не удаляются в процессе форматирования жесткого диска при установке PROXMOX и их нужно затереть вручную!

Читайте также:  Знакомство с Virtualbox. Сетевые настройки программы и виртуальных машин. Часть - 2

  • Проверяем, нет ли суперблоков
mdadm --misc --examine /dev/sda
mdadm --misc --examine /dev/sdb
mdadm --misc --examine /dev/sdb1
mdadm --misc --examine /dev/sdb2

Если все в порядке и суперблоков нет, то увидим нечто подобное:

mdadm: No md superblock detected on /dev/sdb

Если есть, то перед продолжением настройки их необходимо удалить! Удаление суперблоков

Настроем почтовую подсистему и параметры локали

Создадим файл настроек, предварительно сохранив оригинальный

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.orig
echo "" > /etc/mdadm/mdadm.conf
nano /etc/mdadm/mdadm.conf
# Автоматическое назначение прав на новые массивы
CREATE owner=root group=disk mode=0660 auto=yes
# Почтовый адрес для уведомлений о событиях происходящих с массивом
MAILADDR it.khabarovsk@dns-shop.ru

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

Проверим, что информация о наших массивах записалась в файл параметров

cat /etc/mdadm/mdadm.conf

Добавим загрузочный образ initramfs

mkinitramfs -o /boot/initrd.img-`uname -r`-raid1 -r /dev/mapper/pve-root

Заменим файл загрузочного меню и создадим свой, предварительно сохранив оригинальный

cp /boot/grub/menu.lst /boot/grub/menu.lst.orig
echo "default 0" > /boot/grub/menu.lst
echo "timeout 5" >> /boot/grub/menu.lst
echo "title Proxmox VE on soft-RAID" >> /boot/grub/menu.lst
echo "root (hd0,0)" >> /boot/grub/menu.lst
echo "kernel /vmlinuz-`uname -r` root=/dev/mapper/pve-root ro" >> /boot/grub/menu.lst
echo "initrd /initrd.img-`uname -r`-raid1" >> /boot/grub/menu.lst
cat /boot/grub/menu.lst

Создаем LVM-раздел на втором диске и добавляем его в группу pve

pvcreate /dev/md1
vgextend pve /dev/md1

Переместим данные с LVM-раздела первого диска, на RAID-LVM-раздел второго диска. Процедура может продолжаться очень долго. Время зависит от объема и скорости жестких дисков.

pvmove /dev/sda2 /dev/md1

Убираем из LVM первый диск

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

Настроим параметры подключения системных дисков с учетом загрузки с raid. Пересоздадим конфигурационный файл fstab предварительно сохранив оригинальный.

cp /etc/fstab /etc/fstab.orig
echo "" > /etc/fstab
nano /etc/fstab
/dev/pve/root / ext3 errors=remount-ro 0 1
/dev/pve/data /var/lib/vz ext3 defaults 0 1
/dev/md0 /boot ext3 defaults 0 1
/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0

Перемонтируем загрузочный раздел

umount /boot
mount /boot

Копируем структуру разделов со второго диска на первый

sfdisk -d /dev/sdb | sfdisk /dev/sda --force

Добавим разделы первого диска в RAID

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

Осталось обновить загрузчик на обоих дисках. Запускаем

grub

И последовательно вводим:

root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit

Проверить в каком состоянии находится массив можно командой:

cat /proc/mdstat

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

  • Выясняем какой из жестких дисков «вылетел» из массива
cat /proc/mdstat

видим примерно следующее

md1 : active raid1 sda2[2](F) sdb2[1] 243665792 blocks [2/1] [_U]
md0 : active raid1 sda1[2](F) sdb1[1] 530048 blocks [2/1] [_U]
  • Необходимо выяснить, какой из дисков нужно физически отключить. В этом поможет информация о серийных номерах. Например смотрим информацию о модели и серийном номере оставшегося рабочего диска sdb:
udevadm info --query=env --name=sdb | grep -E '(ID_SERIAL_SHORT|ID_MODEL)'
ID_SERIAL_SHORT=9QZCNTNH

Смотрим серийники на наклейках жестких дисков. Соответственно диск с серийным номером 9QZCNTNH оставляем в системе, другой отключаем.

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

1. Очистим информацию о диске sda в массивах.

mdadm /dev/md0 --fail /dev/sda1 --remove detached /dev/sda1
mdadm /dev/md1 --fail /dev/sda1 --remove detached /dev/sda1

2. Удаляем диск физически отключив sata шлейф.

3. Подключаем новый жесткий диск (SATA) равного до байта или большего размера на «на горячую».

4. Выполняем сканирование порта, в который подключили жесткий диск.

echo "- - -" >/sys/class/scsi_host/host0/scan

где host0 номер порта.

  • Если нет точной уверенности, в какой именно порт воткнут новый диск, необходимо просканировать все имеющиеся порты. Список портов можно узнать:
ls /sys/class/scsi_host/

5. Смотрим системный журнал, какое имя получил новый жесткий диск в системе:

dmesg | grep "logical blocks"

Ищем последнюю строку, например:

sd 0:0:0:0: [sda] 234439535 512-byte logical blocks: (120 GB/111 GiB)

Значит имя нового диска — sda

  • Если новый диск физически при подключении получил другое имя например sdc, надо отключить его программно выполнив:
echo "1" > /sys/block/sdc/device/delete

После чего убедится что имя старого диска /dev/sda отсутствует в описании массива и если это не так выполним очистку как описано выше выше в пунке 1.

cat /proc/mdstat

Затем выполнить сканирование sata портов.

Чтобы не ошибиться в дальнейших действиях и не испортить данные создадим переменные с именами дисков.

cleandsk=sda # чистый, пустой диск
workdsk=sdb # Диск, который содержит систему

Произведем копирование структуры разделов с рабочего на чистый диск и подключим его к массиву

dd if=/dev/$workdsk of=/dev/$cleandsk bs=512 count=34
blockdev --rereadpt /dev/$cleandsk
mdadm --add /dev/md0 /dev/${cleandsk}2
mdadm --add /dev/md1 /dev/${cleandsk}3
  • Устанавливаем загрузчик на новый диск
grub

И последовательно вводим, где 0 это номер диска:

root (hd0,0)
setup (hd0)
quit

Смотрим процесс синхронизации

watch cat /proc/mdstat

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


Пароль администратора и E-Mail

  • ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

Password — вводим пароль для пользователя root.

Confirm — повторяем пароль для пользователя root.

E-Mail — вводим почту для сообщений системы.


Экран проверки информации

  • ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

Проверяем все ли верно указано и нажимаем Install.


Видео Proxmox восстановление Zfs RAID1 после замены диска (efi bios)

https://youtube.com/watch?v=LFn66isaJrU%3Ffeature%3Doembed

Восстанавливаем загрузчик systemd-boot

Нужно восстановить загрузчик, для этого отформатируем раздел /dev/sdb2 как ESP:

pve-efiboot-tool format /dev/sdb2

Настроим раздел /dev/sdb2 для включения в Proxmox VE kernel update synchronization mechanism, чтобы загрузочные разделы синхронизировались:

pve-efiboot-tool init /dev/sdb2

Обновим конфигурацию всех ESP, чтобы скопировать ядра и засинхронить все ESP на наших дисках:

Восстанавливаем raid1

Создадим raid1 с нашим новым диском (создавать пул лучше по id дисков, чтобы при смене порта диска zfs могла найти диски ):

zpool attach rpool /dev/disk/by-id/ata-VBOX_HARDDISK_VBfb65757e-ea936e4d-part3 /dev/disk/by-id/ata-VBOX_HARDDISK_VB9b8d476a-b387a510-part3

И подождем когда он восстановит данные на новом диске.

Просмотреть проценты восстановления можно с помощью команды:

На этом все. Zfs RAID1 восстановлен, загрузочная область восстановлена.

Процесс установки

  • ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

Установка происходит достаточно быстро.


Проверка статуса пула

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

Просмотреть статус пула можно в веб.

Или с помощью команды, где rpool — название пула:

Строчку после was (/dev/disk/by-id/ata-VBOX_HARDDISK_VB06e95e61-403d7e2b-part3) копируем, она нужна нам будет для удаления диска.


Лицензия

Читаем лицензию и принимаем. Нажимаем на I agree.


Установка завершена

  • ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

На последнем экране отображается как зайти в Proxmox. Для этого в адресной строке набираем ( ip адрес, который указан у вас на экране ) https://10.0.2.15:8006 (и не забываем указать порт 8006). Нажимаем Reboot и на этом установка завершена.

Язык и время

  • ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

Coununtry — вводим страну.

Time zone — выбираем часовой пояс.

Keyboard Layout — выбираем раскладку клавиатуры.


Удаляем мертвый диск

Удаляем мертвый диск:

zpool detach rpool /dev/disk/by-id/ata-VBOX_HARDDISK_VB06e95e61-403d7e2b-part3

Копируем таблицу разделов с рабочего диска sda на новый диск sdb:

sgdisk -R /dev/sdb /dev/sda

Генерируем уникальные UUID для /dev/sdb:


Видео Установка Proxmox Zfs RAID1

Сеть

  • ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

Management Interface — выбираем сетевую карту если их несколько.

Hostname (FQDN) — имя хостовой системы.

IP address — ip адрес сервера.

Netmask — указываем маску подсети.

Gateway — основной шлюз.

DNS Server — указываем DNS сервер.


Разметка диска

Теперь нам нужно разметить диск. Нажимаем Options.

  • ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

В разделе Filesystem выбираем zfs (RAID1).

  • ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

У меня сейчас в виртуальной машине всего 2 диска, если у вас больше, в таком случае у вас будут Harddisk 2, Harddisk 3 и т.д. их нужно убрать.

Теперь переходим во вкладку Advanced Oprions.

Параметр Ashift

Ashift — это размер сектора диска. В Proxmox автоматом выставляется Ashift=12. Рассчитывается как два в степени и эту степень мы как раз и указываем в Ashift. Обычно в дисках размер сектора 512 или 4096, или 8192. Соответственно, Ashift=9 — если размер сектора 512 ( 2 в 9 степени ), Ashift=12 — если размер сектора 4096 ( 2 в 12 степени ), Ashift=13 — если размер сектора 8192 ( 2 в 13 степени ). Размер сектора обычно указывают в характеристиках диска или можно посмотреть в системе.

Параметр Сompress

Сompress — это сжатие данных.

Есть 4 параметра:

  • on — сжатие данных включенно (этот параметр использует алгоритм lzjb).
  • off — сжатие данных выключенно.
  • lzjb — сжатие данных алгоритмом lzjb.
  • lz4 — сжатие данных алгоритмом lz4.

Рекомендуется сжатие lz4.

Параметр Сhecksum

Сhecksum — это выбор алголитма для контрольной суммы.

Есть 5 параметров:

  • on — контрольные суммы с алгоритмом fletcher4 для не дедупликацированных данных и алгоритмом sha256 для дедупликацированных данных.
  • off — контрольные суммы выключены.
  • fletcher2 — контрольные суммы с алгоритмом fletcher2, этот алгоритм устарел и рекомендуется fletcher4.
  • fletcher4 — контрольные суммы с алгоритмом fletcher4.
  • sha256 — контрольные суммы с алгоритмом sha256 для дедупликацированных данных.

Параметр Сopies

Сopies — это дублирование метаданных файловой системы ZFS на разные диски, если это возможно. Не заменяет избыточности на уровне диска. Значение может быть от 1 до 3.

Параметр Hdsize

Hdsize — это общий размер диска, который будет использоваться. Его можно изменить, если вы хотите оставить какое-то количество свободного места.

Нажимаем Next.


Предисловие

Установим Proxmox с файловой системой Zfs и программным RAID1.

RAID1 — это зеркалирование, чтобы его использовать нужно два диска, желательно одинакового объема, так как данные дублируются на оба диска для большей надежности.

Proxmox поддерживает и другие файловые системы, но есть нюансы.

Например, Proxmox из коробки поддерживает установку программного raid только с файловой системой Zfs. Поэтому если вы хотите raid на mdadm, то тут у вас 2 варианта:

  • Устанавливать Debian и настраивать на нем raid на mdadm, потом сверху накатывать Proxmox (он поддерживает установку на Debian)
  • Или установить Proxmox на один диск и потом делать raid на mdadm.

Но есть еще одна сложность и связана она с Uefi Bios. Дело в том, что Grub не поддерживает синхронизацию загрузочных разделов в Uefi Bios. Поэтому вам или вручную их нужно будет синхронизировать, или писать скрипт. Поэтому при установке Proxmox с Zfs и программным RAID в качестве загрузчика, используется systemd-boot. Он работает с EFI Service Partition (ESP) и, с помощью его готового скрипта, поддерживает разделы в синхронизированном состоянии.

Файловая система zfs очень зависимая от количества оперативной памяти и требует память с коррекцией ошибок (ECC). Примерные требования 4 ГБ + 1 ГБ оперативной памяти для каждого ТБ необработанного дискового пространства.

Другие варианты установки рассмотрим в следующих статьях.


Подключаем загрузочный диск и видим стандартное меню как в других дистрибутивах.

  • ProxmoX создает RAID 1 и RAID на PROXMOEX 2.x

Выбираем Install Proxmox VE.


Оцените статью
Хостинги