Для работы с локальным ZFS хранилищем должен быть установлен модуль ядра kernel-modules-zfs-std-def. Включить модуль:
# modprobe zfs
Чтобы не вводить эту команду после перезагрузки, следует раскомментировать строку:
#zfs
в файле
/etc/modules-load.d/zfs.conf
.
Локальный ZFS позволяет получить доступ к локальным пулам ZFS (или файловым системам ZFS внутри таких пулов).
Данное хранилище поддерживает общие свойства (content, nodes, disable) хранилищ, кроме того, для настройки ZFS используются следующие свойства:
pool
— пул/файловая система ZFS;
blocksize
— размер блока;
sparse
— использовать тонкое выделение ресурсов;
mountpoint
— точка монтирования пула/файловой системы ZFS. Изменение этого параметра не влияет на свойство точки монтирования набора данных, видимого zfs. По умолчанию /<pool>.
Пул ZFS поддерживает следующие типы RAID:
RAID-0 (Single Disk) — размер такого пула — сумма емкостей всех дисков. RAID0 не добавляет избыточности, поэтому отказ одного диска делает том не пригодным для использования (минимально требуется один диск);
пул RAID-1 (Mirror) — данные зеркалируются на все диски (минимально требуется два диска);
пул RAID-10 — сочетание RAID0 и RAID1 (минимально требуется четыре диска);
пул RAIDZ-1 — вариация RAID-5, одинарная четность (минимально требуется три диска);
пул RAIDZ-2 — вариация на RAID-5, двойной паритет (минимально требуется четыре диска);
пул RAIDZ-3 — разновидность RAID-5, тройная четность (минимально требуется пять дисков).
Пример файла конфигурации (
/etc/pve/storage.cfg
):
zfspool: vmdata
pool vmdata
content images,rootdir
mountpoint /vmdata
nodes pve03
Возможные типы содержимого: rootdir (данные контейнера), images (образ виртуального диска в формате raw или subvol).
Используется следующая схема именования образов дисков ВМ:
vm-<VMID>-<NAME> — образ ВМ;
base-<VMID>-<NAME> — шаблон образа ВМ (только для чтения);
subvol-<VMID>-<NAME> — файловая система ZFS для контейнеров.
Если в ВМ созданной в ZFS хранилище будет создан диск с LVM разделами, то гипервизор не позволит удалить этот диск. Пример ошибки:
cannot destroy 'data/vm-101-disk-0': dataset is busy
Чтобы избежать этой ситуации следует исключить ZFS-диски из области сканирования LVM, добавив в конфигурацию LVM (файл
/etc/lvm/lvm.conf
) в секцию devices{} строки:
# Do not scan ZFS zvols (to avoid problems on ZFS zvols snapshots)
filter = [ "r|^/dev/zd*|" ]
global_filter = [ "r|^/dev/zd*|" ]
39.4.8.1. Создание локального хранилища ZFS в веб-интерфейсе
Для создания локального хранилища ZFS в веб-интерфейсе, следует выбрать узел, на котором будет создано хранилище, в разделе выбрать пункт и нажать кнопку Создать: ZFS:
В открывшемся окне следует задать параметры ZFS хранилища: имя хранилища, выбрать диски, уровень RAID и нажать кнопку Создать:
Статус пула можно просмотреть выбрав его в списке и нажав кнопку Подробно:
Для того чтобы внести изменения в настройки ZFS хранилища, следует выбрать → , затем нужное хранилище и нажать кнопку Редактировать:
В открывшемся окне можно изменить тип содержимого контейнера, включить/отключить хранилище, включить дисковое резервирование:
39.4.8.2. Администрирование ZFS
Основными командами для управления ZFS являются zfs
и zpool
.
Для создания нового пула необходим как минимум один пустой диск.
Создание нового пула RAID-0 (минимум 1 диск):
# zpool
create -f -o ashift=12 <pool> <device1> <device2>
Создание нового пула RAID-1 (минимум 2 диска):
# zpool
create -f -o ashift=12 <pool> mirror <device1> <device2>
Создание нового пула RAID-10 (минимум 4 диска):
# zpool
create -f -o ashift=12 <pool> mirror <device1>
<device2> mirror <device3> <device4>
Создание нового пула RAIDZ-1 (минимум 3 диска):
# zpool
create -f -o ashift=12 <pool> raidz1 <device1> <device2> <device3>
Создание нового пула RAIDZ-2 (минимум 4 диска):
# zpool
create -f -o ashift=12 <pool> raidz2 <device1>
<device2> <device3> <device4>
Смена неисправного устройства:
# zpool
replace -f <pool> <old device> <new device>
Включить сжатие:
# zfs
set compression=on <pool>
Получить список доступных ZFS файловых систем:
# pvesm
zfsscan
Пример создания RAID1(mirror) с помощью zfs:
# zpool
create -f vmdata mirror sdb sdc
Просмотреть созданные в системе пулы:
# zpool
list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
vmdata 17,5G 492K 17,5G - - 0% 0% 1.00x ONLINE -
Просмотреть статус пула:
# zpool
status
pool: vmdata
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
vmdata ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
errors: No known data errors