Подробный гайд по развертыванию файлового сервера на базе ZFS и NFS в Alt Linux
Настройка файлового сервера на связке ZFS + NFS в Alt Linux — это отличный выбор, обеспечивающий высокую надежность данных, мгновенные снимки (снапшоты) и производительность. В Alt Linux управление пакетами происходит через apt-get (APT-RPM), а инициатива — systemd.
1. Подготовка системы и установка пакетов
Обновите систему и установите необходимые компоненты. В репозиториях Alt Linux ядро и модули ZFS обычно поставляются в пакетах kernel-modules-zfs-<версия_ядра>, а утилиты — в zfs-utils. Мета-пакет zfs подтянет все нужные зависимости.
1. Обновление и установка:
su -
apt-get update
apt-get install zfs nfs-server
(Опционально: для автоматического мониторинга ошибок дисков и пула можно установить демон ZED: apt-get install zfs-zed).
2. Загрузка модуля ядра:
Проверьте, загрузился ли модуль ZFS, и узнайте версию утилит:
modprobe zfs
zfs version
2. Создание пула ZFS (zpool)
Предположим, у нас есть два диска /dev/sdb и /dev/sdc, и мы хотим создать надежное зеркало (mirror).
1. Проверка дисков:
Убедитесь, что диски не содержат важных данных и корректно определяются системой:
lsblk
2. Создание пула:
Создаем пул с именем tank (название можно выбрать любое):
zpool create tank mirror /dev/sdb /dev/sdc
3. Создание датасета (тома):
Создадим внутри пула пространство для общего доступа:
zfs create tank/data
После этой команды том автоматически примонтируется в директорию /tank/data.
3. Настройка службы NFS
Включите службу NFS-сервера и добавьте её в автозагрузку.
systemctl enable --now nfs-server
Примечание:
В Alt Linux служба nfs-server автоматически подтягивает зависимости rpcbind и nfs-mountd, необходимые для работы протокола.
4. Публикация датасета по NFS (sharenfs)
ZFS имеет встроенный механизм публикации шар (NFS и SMB). Это избавляет от необходимости вручную редактировать классический файл /etc/exports.
Вариант А: Открытый доступ (не рекомендуется для безопасности)
zfs set sharenfs=on tank/data
Вариант Б: Доступ только для локальной сети (Рекомендуется)
Разрешим чтение и запись (rw) для подсети 192.168.1.0/24, отключим подмену UID (root_squash) для удобства администрирования и включим синхронную запись:
zfs set sharenfs="rw=@192.168.1.0/24,no_root_squash,sync" tank/data
Вариант В: Только для чтения (ro)
zfs set sharenfs="ro=@192.168.1.0/24" tank/data
Как это работает:
При изменении свойства sharenfs ZFS автоматически генерирует или обновляет файл /etc/zfs/exports и перезагружает конфигурацию NFS-сервера без его остановки.
Проверка:
Убедитесь, что директория экспортируется:
exportfs -v
# или
showmount -e localhost
5. Настройка межсетевого экрана (Firewall)
Если в вашей системе активен firewalld или iptables, необходимо разрешить входящие подключения.
Для firewalld (если используется):
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reload
Для iptables (базовое правило для NFSv4):
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 2049 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.1.0/24 --dport 2049 -j ACCEPT
6. Оптимизация и тюнинг ZFS
Для файлового сервера рекомендуется настроить следующие параметры датасета:
1. Сжатие:
Включите алгоритм lz4.
Он практически не нагружает CPU, но экономит место на дисках и ускоряет чтение/запись за счет меньшего объема передаваемых данных:
zfs set compression=lz4 tank/data
2. Отключение atime:
Отключите обновление времени последнего доступа к файлу.
Это значительно снизит паразитную нагрузку на запись:
zfs set atime=off tank/data
3. Размер записи (recordsize):
- Для хранения крупных файлов (видео, образы дисков):
zfs set recordsize=1M tank/data - Для баз данных или множества мелких файлов лучше оставить по умолчанию (
128K) или уменьшить до64K.
7. Подключение клиента (Linux)
На клиентской машине (например, другой ПК с Alt Linux или Ubuntu):
1. Установка клиента:
В Alt Linux клиентские утилиты находятся в пакете nfs-clients или nfs-utils.
apt-get install nfs-clients
2. Монтирование:
mkdir -p /mnt/nfs_share
mount -t nfs 192.168.1.10:/tank/data /mnt/nfs_share
3. Автомонтирование (fstab):
Добавьте строку в /etc/fstab клиента, чтобы шара подключалась при загрузке:
192.168.1.10:/tank/data /mnt/nfs_share nfs defaults,_netdev,x-systemd.requires=network-online.target 0 0
Шпаргалка администратора ZFS
| Задача | Команда |
|---|---|
| Список всех томов и занятого места | zfs list |
| Статус пула (здоровье дисков) | zpool status |
| Мониторинг скорости I/O | zpool iostat -v 2 |
| Создать мгновенный снимок (снапшот) | zfs snapshot tank/data@backup_2026_10_02 |
| Откатить изменения до снапшота | zfs rollback tank/data@backup_2026_10_02 |
| Посмотреть текущие права NFS | zfs get sharenfs tank/data |
Важно
- Шара недоступна после перезагрузки сервера: Убедитесь, что службы
zfs-import.targetиzfs-mount.serviceвключены. ZFS сам монтирует пул при загрузке, после чегоnfs-serverподхватывает экспорты. - Ошибка "Access denied by server": Проверьте свойство
sharenfsкомандойzfs get sharenfs tank/data. Возможно, IP-адрес клиента изменился и не попадает в разрешенную маску подсети. Также проверьте, не блокирует ли трафик локальный фаервол.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.