Домашний NAS на ZFS: что бы я сделал иначе
Два года назад собрал домашний NAS: четыре диска по 8 ТБ, Debian, ZFS. Работает, данные целы, но несколько решений я бы сейчас принял по-другому. Записываю, чтобы не повторять.
Схема пула: зеркала вместо RAIDZ
Я сделал RAIDZ1 из четырёх дисков: максимум полезного места. Минусы проявились позже:
- расширить пул можно только целой новой vdev такой же ширины;
- resilver одного диска на 8 ТБ шёл почти двое суток, и всё это время пул без избыточности;
- случайное чтение заметно медленнее, чем у зеркал.
Сейчас я бы собрал два зеркала по два диска. Места меньше на четверть, зато расширение парой дисков, быстрый 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 ГБ) и заранее продумать схему пула. Всё остальное можно поправить по ходу.