Я решил, что в моем сервере
на базе Proxmox 6.4.4
должны быть разделы ZFS
. Я буду создавать RAID 1
софтварный, т. к. нет у меня аппаратного RAID
контроллера да и давно хотел по эксплуатировать ZFS
. Специально для этого купил обычные HDD
диски:
Жесткий диск 2TB SATA 6Gb/s Seagate ST2000DM008 x 2
И вот данная заметка будет для этом способствовать от и до со всеми нюансами.
Шаг №1:
Создаю на дисках разметку GPT (GUID Partition Table):
root@srv-proxmox2:~# fdisk /dev/sda Command (m for help): g Created a new GPT disklabel (GUID: CF5DDC84-1CA5-E34B-9D22-1F4C9D79A6F4). Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@srv-proxmox2:~# root@srv-proxmox2:~# fdisk /dev/sdb Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): g Created a new GPT disklabel (GUID: A8F78D39-BA98-EF4D-BF9D-73E1848592DC). Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@srv-proxmox2:~#
Шаг №2:
Для начала найдем ID
наших дисков, это нужно для того чтобы диски в массиве были привязаны по ID
, а не по пути типа /dev/sdb
. Иначе при перестановке дисков буквы изменятся и массив не поднимется.
Выполняем команду ниже и находим ID
своих дисков
root@srv-proxmox2:~# ls /dev/disk/by-id/ | grep ST2000DM008 ata-ST2000DM008-2FR102_ZFL3R83N ata-ST2000DM008-2FR102_ZK207VRS root@srv-proxmox2:~#
Шаг №3:
Создаю массив mirror:
root@srv-proxmox2:~# zpool create -f raid1-storage mirror /dev/disk/by-id/ata-ST2000DM008-2FR102_ZFL3R83N /dev/disk/by-id/ata-ST2000DM008-2FR102_ZK207VRS
Шаг №4:
Отобразить список имеющихся пулов:
root@srv-proxmox2:~# zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT raid1-storage 1.81T 360K 1.81T - - 0% 0% 1.00x ONLINE - root@srv-proxmox2:~#
Шаг №5:
Отобразить информацию о созданном массиве или уже имеющимся:
root@srv-proxmox2:~# zpool status pool: raid1-storage state: ONLINE config: NAME STATE READ WRITE CKSUM raid1-storage ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-ST2000DM008-2FR102_ZFL3R83N ONLINE 0 0 0 ata-ST2000DM008-2FR102_ZK207VRS ONLINE 0 0 0 errors: No known data errors root@srv-proxmox2:~#
Шаг №6:
Когда прикуплю SSD
диск, к примеру на 120Gb
то смогу добавить его в пул как кэш:
root@srv-proxmox2:~# zpool add -f raid1-storage cache /dev/disk/by-id/ata-KINGSTON_SV300S37A120G_50026B723C0A2039
или к примеру я нашел у себя SSD
диск OCZ RevoDrive 3 120 Гб RVD3-FHPX4-120G PCI-E
, его никак не размечаю и получаю 4
диска по 23Gb
, вот их я и использую под кэш
root@srv-proxmox2:~# ls -l /dev/disk/by-id|grep ata-OCZ-REVODRIVE lrwxrwxrwx 1 root root 9 May 28 22:26 ata-OCZ-REVODRIVE_X2_OCZ-3XK29H00I7VIMX02 -> ../../sdb lrwxrwxrwx 1 root root 9 May 28 22:26 ata-OCZ-REVODRIVE_X2_OCZ-JU1BH4H1UPOWV3D5 -> ../../sda lrwxrwxrwx 1 root root 9 May 28 22:26 ata-OCZ-REVODRIVE_X2_OCZ-OH8D1X93U5RRCVDD -> ../../sdc lrwxrwxrwx 1 root root 9 May 28 22:26 ata-OCZ-REVODRIVE_X2_OCZ-Q0C47B390EN736O5 -> ../../sdd root@srv-proxmox2:~# root@srv-proxmox2:~# zpool add -f raid1-storage cache /dev/disk/by-id/ata-OCZ-REVODRIVE_X2_OCZ-3XK29H00I7VIMX02 /dev/disk/by-id/ata-OCZ-REVODRIVE_X2_OCZ-JU1BH4H1UPOWV3D5 /dev/disk/by-id/ata-OCZ-REVODRIVE_X2_OCZ-OH8D1X93U5RRCVDD /dev/disk/by-id/ata-OCZ-REVODRIVE_X2_OCZ-Q0C47B390EN736O5 root@srv-proxmox2:~#
Итого, мои диски в Proxmox
Состояние моего созданного пула после принимает вид:
Шаг №7:
Если один диск выйдет из строя, то убираем его из пула:
root@srv-proxmox2:~# zpool detach raid1-storage /dev/disk/by-id/ata-ST2000DM008-2FR102_ZK207VRS root@srv-proxmox2:~# zpool status raid1-storage pool: raid1-storage state: ONLINE config: NAME STATE READ WRITE CKSUM raid1-storage ONLINE 0 0 0 ata-ST2000DM008-2FR102_ZFL3R83N ONLINE 0 0 0 errors: No known data errors root@srv-proxmox2:~#
Шаг №8:
Восполняем сбойный диск замененным диском:
root@srv-proxmox2:~# zpool add raid1-storage /dev/disk/by-id/ata-ST2000DM008-2FR102_ZK207VRS root@srv-proxmox2:~# zpool status raid1-storage pool: raid1-storage state: ONLINE config: NAME STATE READ WRITE CKSUM raid1-storage ONLINE 0 0 0 ata-ST2000DM008-2FR102_ZFL3R83N ONLINE 0 0 0 ata-ST2000DM008-2FR102_ZK207VRS ONLINE 0 0 0 errors: No known data errors root@srv-proxmox2:~#
Шаг №9:
Чтобы включить сжатие на пуле:
root@srv-proxmox2:~# zfs set compression=on raid1-storage
Получить информацию о том включено ли сжатие можно командой;
root@srv-proxmox2:~# zfs get compression raid1-storage NAME PROPERTY VALUE SOURCE raid1-storage compression on local
Шаг №10:
Чтобы включить Online
дедупликацию файлов
root@srv-proxmox2:~# zfs set dedup=on raid1-storage root@srv-proxmox2:~# zfs get dedup raid1-storage NAME PROPERTY VALUE SOURCE raid1-storage dedup on local
На заметку: Online
дедупликация очень ресурсоемкая функция и для ее корректной производительности нужно много свободной оперативной памяти. Также обратите внимание что при отключении дедупликации, ранее дедуплицированные файлы не будут иметь исходный размер, данные так и останутся дедуплицированными.
root@srv-proxmox2:~#
Шаг №11:
Чтобы повысить производительность пула можно отключить синхронизацию:
root@srv-proxmox2:~# zfs set sync=disabled raid1-pool root@srv-proxmox2:~# zfs get sync raid1-storage NAME PROPERTY VALUE SOURCE raid1-storage sync disabled local root@srv-proxmox2:~#
Шаг №12:
Теперь подключаем созданный ZFS
пул в качестве хранилища VM
(Виртуальных машин):
https://IP&DNS:8006 (https://srv-proxmox2:8006) — user&pass — Datacenter
— раздел Storage — Add
, выбираем ZFS
ID: raid1-storage
ZFS Pool: выбираю raid1-storage
Content: Disk Image, Container
Nodes: srv-proxmox2
Enable: отмечаю галочкой
Thin provision: отмечаю галочкой
и нажимаю Add
В поле ID
указываем произвольное имя нашего хранилища, далее выбираем созданный zfs
пул и включаем thin provision
(использование тонких дисков для VM
)
Теперь в списке появилось наше новое хранилище
Шаг №13:
Чтобы удалить созданный пул:
root@srv-proxmox2:~# zpool status pool: storage state: ONLINE config: NAME STATE READ WRITE CKSUM storage ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-ST2000DM008-2FR102_ZFL3R83N ONLINE 0 0 0 ata-ST2000DM008-2FR102_ZK207VRS ONLINE 0 0 0 errors: No known data errors root@srv-proxmox2:~# zpool destroy storage root@srv-proxmox2:~# cfdisk /dev/sdb root@srv-proxmox2:~# cfdisk /dev/sda
удаляем разделы и нажимаем Write, Quit
и так с каждым которые образуют пул.
Шаг №14:
Как система видит созданный пул:
root@srv-proxmox2:~# df -h | grep raid1 raid1-storage 1.8T 128K 1.8T 1% /raid1-storage
Шаг №15:
Использую утилиту dd
для мониторинга операции чтения и записи для оценки производительности:
ТЕСТ Скорости ЗАПИСИ Диска
root@srv-proxmox2:~# dd if=/dev/zero of=/raid1-storage/testfile bs=1G count=1 oflag=dsync 1+0 records in 1+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.01711 s, 532 MB/s root@srv-proxmox2:~# root@srv-proxmox2:~# root@srv-proxmox2:~# sync; dd if=/dev/zero of=/raid1-storage/tempfile bs=1M count=1024; sync 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.906996 s, 1.2 GB/s
На заметку: Файл tempfile
, сгенерированный предыдущей командой, был закэширован в буфер и скорость его чтения будет намного выше чем реальная скорость чтения непосредственно с жесткого диска.
Чтобы получить реальную скорость, необходимо предварительно очистить кэш.
root@srv-proxmox2:~# sysctl -w vm.drop_caches=3 vm.drop_caches = 3 root@srv-proxmox2:~# dd if=/raid1-storage/tempfile of=/dev/null bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.89678 s, 276 MB/s root@srv-proxmox2:~#
dd: ТЕСТ Скорости ЧТЕНИЯ Диска
root@srv-proxmox2:~# dd if=/raid1-storage/tempfile of=/dev/null bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.189074 s, 5.7 GB/s root@srv-proxmox2:~#
для задержки:
root@srv-proxmox2:~# dd if=/dev/zero of=/raid1-storage/testfile bs=512 count=1000 oflag=dsync 1000+0 records in 1000+0 records out 512000 bytes (512 kB, 500 KiB) copied, 0.0023416 s, 219 MB/s ekzorchik@srv-lubuntu:~$ dd if=/dev/zero of=testfile bs=1G count=1 conv=fdatasync 1+0 записей получено 1+0 записей отправлено 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.64581 s, 231 MB/s ekzorchik@srv-lubuntu:~$
Что касается оперативной памяти, пока у меня 12Gb
и вот в простое 1Gb
уходит под систему, а когда я запускаю VM W10X64
с 4Gb RAM
, то вижу, что памяти недостаточно, точнее ее просто нет:
root@srv-proxmox2:~# free -m total used free shared buff/cache available Mem: 11811 11005 584 55 221 505 Swap: 8191 22 8169 root@srv-proxmox2:~#
Через некоторое время ситуация нормализовалась:
root@srv-proxmox2:~# free -m total used free shared buff/cache available Mem: 11811 5914 5674 52 222 5597 Swap: 8191 21 8170 root@srv-proxmox2:~#
Почитать сколько нужно памяти если использовать дедупликацию: https://constantin.glez.de/2011/07/27/zfs-to-dedupe-or-not-dedupe/
я ее у себя отключил.
Вывод для себя, что мне не светит использование ZFS
, может стоит остановится на LVM-Thin
, либо посмотреть как будет себя вести Proxmox
когда я поставлю 32Gb
(у меня в планах поставить 128Gb
). Поставил память M378A4G43MB1-CTD
и вот теперь другое дело. ZFS
использую.
Все выше можно сделать используя Web
-интерфейс Proxmox
, но мне хотелось это сделать через консоль, так я считаю надежнее и больше понимания как делается.
На этом базовая настройка завершена. С уважением автор блога Олло Александр aka ekzorchik.