Я решил, что в моем сервере на базе 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

Мои диски в Promox 6.4.4

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

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

Шаг №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

CСоздаю ZFS пул через Web-интерфейс

В поле ID указываем произвольное имя нашего хранилища, далее  выбираем созданный zfs пул и включаем thin provision (использование тонких дисков для VM)
Теперь в списке появилось наше новое хранилище

Новое хранилище на базе ZFS

Шаг №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.