Было
Диски 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
mdsdtat
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>
pvdisplay
--- 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
lvdisplay -m
--- 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
ZFS
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 - четыре раздела:
- EFI
- boot
- root
- data
На каждом SSD три раздела:
- swap
- ZIL
- L2ARC
mdadm
Должны остаться два массива - первый root на HDD под LVM, второй - swap на SSD без LVM.
LVM
Одинственный pv - mdadm массив на HDD под root.
ZFS
Все функции зеркалирования для данных переезжают на ZFS.
Что делаем
Перенос будет происходить на живой системе.
SSD
Примерный порядок:
- отключаем весь функционал на 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
.
HDD
Примерный порядок:
- изымаем один из дисков из массива 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 должно пойти на пользу.
Discussion