Работа с zfs в proxmox

Здравствуйте.
Я создал zfs pool из 3 дисков в raidz1. Пока только для эксперимента. Есть несколько вопросов.

  • Как изменить content, чтобы хранилище имело другое назначение? Например хочу там хранить ISO images
  • Как добавить диски в пул?
  • Что будет если например четвертым диском я добавлю диск другого размера?

Сейчас нет под рукой PVE с ZFS, но обычно выбирается через свойства хрванилища


Но иногда это сделать нельзя и даже правка конфигов напрямую не помогает

У меня есть подозрение, что в текущей версии VE никак

Обычно диск будет использоваться только частично, это как с точки зрения здравого смысла, так и логики работы рейда не будет работать

Буквально сегодня смотрел новости от еще одного адепта самохостинга как раз про Proxmox 9 beta 1 и там очень много плюшек zfs обещают завести, если не ошибаюсь, то как раз таки по добавлению дисков

Совет
После того, как я про**л время, но не данные в TrueNAS я поднял новый инстанс TrueNAS в PVE, завел туда кучу дисков разного размера по 1 и 2 ГБ и натестировался со всеми сценариями вдоволь, попутно несколько раз теряя все тестовые данные, но теперь имею представление по тому, что и как надо сделать.

С PVE можно сделать аналогично: пустых виртуальных дисков можно хоть 2 десятка завести и попробовать реализовать все необходимые сценарии, скорее всего, часть функций надо будет выполнять в консоли т.к. в веб морде PVE функционал очень ограничен

1 лайк

Из описания вопроса я понимаю, что zfs пул создается уже после установки самого PVE

Создаем ProxMox VE c 1 диском и LVM

Создаем пул из 3х дисков по 10ГБ

Видим 2 типа контента

В настройках тоже 2

Почему? ну, видимо, как и с LVM мы работаем с блочными устройствами, для ISO и LXC template требуется каталог

Добавляем еще один диск на 20 ГБ

В веб интерфейсе глухо, можем только посмотреть состав и “ушатать” пул


Переходим в консоль и создаем датасет

root@pve:/# zfs create -o compression=lz4 -o quota=10G zfs-pool/storage
root@pve:/# df  -h /zfs-pool/storage/
Filesystem        Size  Used Avail Use% Mounted on
zfs-pool/storage   10G  128K   10G   1% /zfs-pool/storage

Возвращаемся в web интерфейс датацентра и создает стррадж типа directory

Теперь в списке у нас появился zfs-storage

Куда мы можем загрузить ISO образы

Первый пункт решен

Теперь переходим в диски
Видим, что /dev/sde свободен, а b/c/d имеют по 2 раздела и являются zfsными

Переходим в консоль и пытаемся сломать все

root@pve:~# zpool status zfs-pool 
  pool: zfs-pool
 state: ONLINE
config:

        NAME                                      STATE     READ WRITE CKSUM
        zfs-pool                                  ONLINE       0     0     0
          raidz1-0                                ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi1  ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi2  ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi3  ONLINE       0     0     0

errors: No known data errors
root@pve:~# zpool add zfs-pool /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi4 
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: pool uses raidz and new vdev is disk
root@pve:~# zpool add -f zfs-pool /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi4 
root@pve:~# zpool status zfs-pool 
  pool: zfs-pool
 state: ONLINE
config:

        NAME                                      STATE     READ WRITE CKSUM
        zfs-pool                                  ONLINE       0     0     0
          raidz1-0                                ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi1  ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi2  ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi3  ONLINE       0     0     0
          scsi-0QEMU_QEMU_HARDDISK_drive-scsi4    ONLINE       0     0     0

errors: No known data errors

Что мы получили в итоге?
В сам raidz1 добавить нельзя диск т.к. это поетребует пересчета и перераспределения блоков между дисками, но мы добавили диск “на верхний уровень” т.е. что-то типа RAID0 получилось

Добавляем еще 3 диска

Пытаемся окончательно доломать

root@pve:~# zpool add zfs-pool raidz1  /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi5 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi6 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi7 
root@pve:~# zpool status zfs-pool 
  pool: zfs-pool
 state: ONLINE
config:

        NAME                                      STATE     READ WRITE CKSUM
        zfs-pool                                  ONLINE       0     0     0
          raidz1-0                                ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi1  ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi2  ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi3  ONLINE       0     0     0
          scsi-0QEMU_QEMU_HARDDISK_drive-scsi4    ONLINE       0     0     0
          raidz1-2                                ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi5  ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi6  ONLINE       0     0     0
            scsi-0QEMU_QEMU_HARDDISK_drive-scsi7  ONLINE       0     0     0

errors: No known data errors

Что совсем в итоге получили?
Мы создали в рамках 1 пула 2 рейд массива с отказоустойчивостью и разным объемом, если выкинуть 4 диск и оставить 6 штук и принять их как одинакового объема, то мы получили финальный объем как raidz2, но по факту raidz1,5 т.е. выход в одном рейде 2х дисков приведет к полной потере данных, выпадание 2х дисков в разных рейдах приведет только к дерградации

Ответ на 2 вопрос: нельзя добавить на этот же уровень дисов
Ответ на 3 вопрос: если на более высокий уровень без отказоустойчивости, то он добавится к общему объему

В качестве домашнего задания

  1. А если попробовать один из 3х дисков пула заменить 4 большего размера?
  2. Развернуть Proxmox сразу в ZFS режиме и посмотреть как рам реализованы датасеты

Ну и напоследок список дисков в интерфейсе проксмокса

1 лайк

Действительно. В pve 9 это работает. Проверил на виртуальных дисках. Сначала сделал рейд из 3 дисков, потом поместил туда диск виртуальной машины, потом добавил в рейд четвертый диск. Данные на месте, просто пространство увеличилось.

New ZFS version 2.3.3:

Support for adding new devices to existing RAIDZ pools without downtime.

вчера хотел добавить инфу, а забыл в какой теме обсуждали добавление дисков

1 лайк

Это как у меня получилось или полноценно добавление в RAIDz? я игрался в truenas, но уже не помню что получилось, вроде можно

Сейчас попробовал в truenas начать добавлять и пишет, что таки да, внутрь raidz, но потом надо будет перемещать данные между дисками

а какая версия у нас зфс?

Простите что влезу в дискуссию, но у меня как раз вопрос про ZFS
Создал mirror из двух дисков. Вопрос если один сломается, мне придет какое то оповещение об этом? Надо ли как то по особенному что то настраивать или галочки выставлять?
Предварительно я настроил в Уведомлениях настроил smtp? тестовые письма приходят.

Лучший способ узнать - проверить.

В тестовом PVE (который создавал для переписки выше) удалил 1 диск, пришло сообщение

ZFS device fault for pool zfs-pool on pve

ZFS has detected that a device was removed.

impact: Fault tolerance of the pool may be compromised.
eid: 6
class: statechange
state: REMOVED
host: pve
time: 2025-08-05 02:54:22+1200
vpath: /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part1
vphys: pci-0000:01:02.0-scsi-0:0:0:1
vguid: 0xCA132BA53805BF86
devid: scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part1
pool: zfs-pool (0x7D9DC29684C2E9B0)

Вернул диск обратно и прилетело следующее сообщение:

ZFS resilver_finish event for zfs-pool on pve

ZFS has finished a resilver:

eid: 15
class: resilver_finish
host: pve
time: 2025-08-05 02:55:40+1200
pool: zfs-pool
state: ONLINE
scan: resilvered 36K in 00:00:00 with 0 errors on Tue Aug 5 02:55:40 2025
config:

NAME STATE READ WRITE CKSUM
zfs-pool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_drive-scsi3 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_drive-scsi4 ONLINE 0 0 0
raidz1-2 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_drive-scsi5 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_drive-scsi6 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_drive-scsi7 ONLINE 0 0 0

errors: No known data errors

Давайте по порядку.
Ни каких дополнительных манипуляций кроме настройки в веб морде (smtp) Прксомок я не делал.
Далее я выключаю один из дисков

zpool offline zfs “название диск”

После этого статус меняется, но ни каких уведомлений мне не приходит.
По советам из “Интернетов” правил /etc/zfs/zed.d/zed.rc
Вносил свой email и строчки
ZED_NOTIFY_VERBOSE=1
ZED_EMAIL_VERBOSE=1

но ничего этого не помогло.

Я даже SNTP не настраивал в проксмоксе, это был чистый инстанс с 8 дисками для теста ZFS выше.
Нашел письма в спаме т.к. почта в PVE не настроена

ну почту вы где настраивали? В Датацентре?

Пользователь в датацентре

Нотификация в датацентре (все дефолтное)

Дефолтный матчер

Если создавали SNMP отправку, то возможно надо в матчере выбрать во вкладке “Targets to notify”

Да все так же настроено.

А как быстро email прилетает при удалении диска? Может я не терпелив просто, о каком времени идет речь, 5 сек, 30 сек, 5 мин?

порядка нескольких секунд, я думаю, что не дольше минуты должно быть

А вот подскажите пожалуйста по такой ситуации. Я прокинул через proxmox в truenas 4 диска по 16 ТБ. Там они видятся по 14,55 тб . Создал raidz1 и у меня объем пула 38 тб. Сначала думал норм, а сейчас залез на калькуляторы zfs и похоже должно быть у меня побольше пространства

Я пользовал вот этот калькулятор



Truenas должен показывать 40.8TiB

я собирал рейд из 3х дисков, а потом расширял 4 м диском может из-за этого проблема? вот у меня 39. Это проблема? Мне если честно жалко терять 1 тб

У меня по идее пока все не устаканилось и я могу себе позволить разобрать и собрать рейд. Есть ли в этом смысл?

Я бы начал с мучания GPT и консоли, наверняка в портянке, выдаваемой, какой-то из zfs команд можно найти ответ на Ваш вопрос?
У меня не совсем чистый рейд, поэтому не могу проверить свое значение Usable capacity и сравнить с расчетным, но вроде тоже было меньше.

Из мыслей

  1. Какое-то место выделяется под метаданные самой ФС, там же должен быть каталог как минимум, но не на 2ГБ же
  2. Есть TB и TiB, тут могут быть расхождения, но я заскринил именно iB из калькулятора и размер одного диска совпал + TrueNAS у Вас отображает именно TiB
  3. В калькулятор вбивал 16000, т.к. производители считают объем не в TiB, а в TB, те. 16*10^12 Байт
  4. По поводу чистоты, я у себя на одном датасете включил дедупликацию т.к. там у меня свалка фотографий с разбивкой по годам и событиям + new + new_2 + разобрать и в итоге порядка 20-25% оказалось дубликатов, я перед копированием фоток туда включил дедупликацию и в процессе копирования фотографий размер UsableCapacity заметно подрос

Если в с этими же параметрами, то очень странно ожидать другого результата, для начала бы разобраться в первопричинах, а потом уже собрать с другими параметрами или оставить как есть