Рассмотрим восстановление 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 включительно!
- Пароль администратора и E-Mail
- Экран проверки информации
- Видео Proxmox восстановление Zfs RAID1 после замены диска (efi bios)
- Восстанавливаем загрузчик systemd-boot
- Восстанавливаем raid1
- Процесс установки
- Проверка статуса пула
- Лицензия
- Установка завершена
- Язык и время
- Удаляем мертвый диск
- Видео Установка Proxmox Zfs RAID1
- Сеть
- Разметка диска
- Предисловие
- Необходимо создать надежную отказоустойчивую дисковую систему. При выходе из строя любого жесткого диска, система должна продолжить работу
- Перенос на 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 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 screen1. Подготовка дисков к переводу в 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.conf2. Перенос /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/md03. Модификация /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 14. Модификация 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-pve5. Перенос 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 завершена.
Диски 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.
Перенос будет происходить на живой системе.
отключаем весь функционал на SSD (swap, ZIL, L2ARC).
zpool remove pve-data /dev/pve/zfs-zil zpool remove pve-data /dev/pve/zfs-l2arc swapoff -a
переразбиваем диски. Размер раздела под 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
создаем 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
Включаем обратно 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
изымаем один из дисков из массива mdadm.
sudo mdadm /dev/md1 -r /dev/sda3
переразбиваем (количество разделов должно стать 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
создаем на новом разделе 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
Добавляем новый зеркальный массив 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
В существующий ZFS-pool подключаем новый data раздел в качестве зеркала.
sudo zpool attach pve-data /dev/pve/data-zfs-lvm /dev/sda4
и ждем синхронизации. Состояние синхронизации смотрим так:
sudo zpool status
Изымаем из ZFS-pool старое устрйоство (lvm)
sudo zpool detach pve-data /dev/pve/data-zfs-lvm
В результате старый массив 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
Перезбиваем второй диск на четыре раздела, подключаем третий раздел в 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 должно пойти на пользу.
Актуально для версии 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-enterprisedeb 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}3cat /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 и их нужно затереть вручную!
- Проверяем, нет ли суперблоков
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
Password — вводим пароль для пользователя root.
Confirm — повторяем пароль для пользователя root.
E-Mail — вводим почту для сообщений системы.
Экран проверки информации
Проверяем все ли верно указано и нажимаем 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 восстановлен, загрузочная область восстановлена.
Процесс установки
Установка происходит достаточно быстро.
Проверка статуса пула
Предположим у нас полетел диск и мы его заменили. Видим, что наш пул в статусе DEGRADED и не видит наш старый диск.
Просмотреть статус пула можно в веб.
Или с помощью команды, где rpool — название пула:
Строчку после was (/dev/disk/by-id/ata-VBOX_HARDDISK_VB06e95e61-403d7e2b-part3) копируем, она нужна нам будет для удаления диска.
Лицензия
Читаем лицензию и принимаем. Нажимаем на I agree.
Установка завершена
На последнем экране отображается как зайти в Proxmox. Для этого в адресной строке набираем ( ip адрес, который указан у вас на экране ) https://10.0.2.15:8006 (и не забываем указать порт 8006). Нажимаем Reboot и на этом установка завершена.
Язык и время
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
Сеть
Management Interface — выбираем сетевую карту если их несколько.
Hostname (FQDN) — имя хостовой системы.
IP address — ip адрес сервера.
Netmask — указываем маску подсети.
Gateway — основной шлюз.
DNS Server — указываем DNS сервер.
Разметка диска
Теперь нам нужно разметить диск. Нажимаем Options.
В разделе Filesystem выбираем zfs (RAID1).
У меня сейчас в виртуальной машине всего 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 ГБ оперативной памяти для каждого ТБ необработанного дискового пространства.
Другие варианты установки рассмотрим в следующих статьях.
Подключаем загрузочный диск и видим стандартное меню как в других дистрибутивах.
Выбираем Install Proxmox VE.










