opsjournal.net

Домашний NAS на ZFS: что бы я сделал иначе

· zfshomelab

Два года назад собрал домашний NAS: четыре диска по 8 ТБ, Debian, ZFS. Работает, данные целы, но несколько решений я бы сейчас принял по-другому. Записываю, чтобы не повторять.

Схема пула: зеркала вместо RAIDZ

Я сделал RAIDZ1 из четырёх дисков: максимум полезного места. Минусы проявились позже:

Сейчас я бы собрал два зеркала по два диска. Места меньше на четверть, зато расширение парой дисков, быстрый resilver и проще жить.

ashift задаётся один раз

Диски с сектором 4K, а некоторые врут, что у них 512 байт. Указывайте явно, потом не поменять:

zpool create -o ashift=12 tank mirror /dev/disk/by-id/ata-A /dev/disk/by-id/ata-B

И используйте /dev/disk/by-id/, а не /dev/sdX: после перестановки кабелей имена поменяются.

Свойства, которые стоит включить сразу

zfs set compression=zstd tank
zfs set atime=off tank
zfs set xattr=sa tank
zfs set recordsize=1M tank/media

Сжатие на zstd бесплатно по CPU на любом современном процессоре и экономит 10–30% на документах. recordsize=1M только для датасета с большими файлами (видео, архивы).

Снапшоты — да, но с ротацией

Первые полгода я делал снапшоты руками и забывал удалять. Поставил sanoid:

[tank/documents]
  use_template = production

[template_production]
  hourly = 24
  daily = 30
  monthly = 6
  autosnap = yes
  autoprune = yes

Для копии на внешний диск из того же пакета есть syncoid: инкрементальный zfs send одной командой.

Scrub и мониторинг

Scrub раз в месяц включён в Debian по умолчанию. Но без уведомлений вы узнаете об ошибках случайно. Настройте zed (ZFS Event Daemon) на отправку почты или в мессенджер. У меня за два года он один раз сообщил о CKSUM-ошибках, и это был плохой SATA-кабель, а не диск.

Итог

ZFS для дома отличный выбор, если не экономить на памяти (от 8 ГБ) и заранее продумать схему пула. Всё остальное можно поправить по ходу.