MyTetra Share
Делитесь знаниями!
Настройка ZFS на Ubuntu 24.04: Полное руководство
Время создания: 19.03.2026 13:43
Автор: alensav
Текстовые метки: Настройка ZFS на Ubuntu 24.04: Полное руководство
Раздел: UBUNTU_24-04
Запись: alensav/MyTetra2/main/base/1773917016heq65ez6o9/text.html на raw.githubusercontent.com

Настройка ZFS на Ubuntu 24.04: Полное руководство

Учитывая ваше предыдущее упоминание оборудования (965P-DS3P), важно отметить: ZFS требовательна к оперативной памяти. На старых системах с ограниченным объемом RAM (например, 4–8 ГБ) необходимо тщательно настраивать кэш (ARC), чтобы система не "задохнулась".

Ниже приведен пошаговый гайд по развертыванию надежного пула хранения данных.

⚠️ Предупреждение перед началом

Все данные на дисках будут уничтожены.

Используйте диски напрямую. Не используйте аппаратные RAID-контроллеры (только режим HBA/IT). ZFS требует прямого доступа к дискам для корректной работы SMART и самовосстановления.

RAM: Рекомендуется минимум 1 ГБ ОЗУ на 1 ТБ хранения. Для систем с малым объемом ОЗУ обязательна настройка zfs_arc_max.

1. Установка пакетов

В Ubuntu 24.04 пакеты ZFS доступны в основных репозиториях.

bash

12

sudo apt update

sudo apt install -y zfsutils-linux smartmontools hdparm

Проверка загрузки модулей ядра:

bash

12

lsmod | grep zfs

# Должны быть: zfs, zunicode, zzstd, zlua, zavl, icp, zcommon

2. Подготовка дисков

Идентификация дисков

Никогда не используйте имена /dev/sdX (они могут измениться после перезагрузки). Используйте устойчивые пути /dev/disk/by-id/.

bash

123

Очистка метаданных

Если диски использовались ранее, очистите старые подписи разделов, чтобы ZFS не ругался:

bash

sudo lsblk -o NAME,MODEL,SERIAL,SIZE,TYPE

# Или для получения by-id:

sudo ls -l /dev/disk/by-id/ | grep -i 'ata-'

123

3. Создание пула (Pool Creation)

Выбор конфигурации зависит от количества дисков и требований к надежности.

Вариант А: Зеркало (Mirror) — Рекомендуется для надежности

Аналог RAID1. Выдерживает отказ одного диска (в паре) или нескольких (в мульти-зеркале).

bash

# Пример для двух дисков

sudo zpool create -o ashift=12 \

tank mirror \

/dev/disk/by-id/ata-DISK1_SERIAL \

/dev/disk/by-id/ata-DISK2_SERIAL

12345

Вариант Б: RAIDZ1 (Аналог RAID5)

Требуется минимум 3 диска. Выдерживает отказ 1 диска.

bash

sudo zpool create -o ashift=12 \

tank raidz1 \

/dev/disk/by-id/ata-DISK1_SERIAL \

/dev/disk/by-id/ata-DISK2_SERIAL \

/dev/disk/by-id/ata-DISK3_SERIAL

12345

Вариант В: Stripe (Без надежности)

Только для тестов или кэша. Потеря одного диска = потеря всех данных.

bash

sudo zpool create -o ashift=12 tank /dev/disk/by-id/ata-DISK1_SERIAL

1

Параметр ashift=12: Критически важен для современных дисков (сектора 4K). Устанавливает выравнивание на 4096 байт.

4. Настройка датасетов (Datasets)

ZFS использует иерархическую файловую систему. Не храните данные в корне пула (/tank), создавайте датасеты.

bash

# Создание датасета для общих данных

sudo zfs create tank/data


# Включение сжатия (обязательно! экономит место и ускоряет чтение)

sudo zfs set compression=zstd tank/data


# Отключение атиме (ускоряет работу с множеством мелких файлов)

sudo zfs set atime=off tank/data


# Создание датасета для виртуальных машин (KVM/Docker)

sudo zfs create tank/vms

sudo zfs set recordsize=128K tank/vms # Оптимизация для баз данных/VM

sudo zfs set sync=always tank/vms # Гарантия целостности при сбое питания

12345678910111213

Проверка структуры:

bash

zfs list

1

5. Оптимизация под ограниченную RAM (Важно для вашего железа)

По умолчанию ZFS может занимать до 50% всей оперативной памяти под кэш (ARC). На системе с 4–8 ГБ ОЗУ это убьет производительность десктопа или других сервисов.

Ограничение ARC

Создайте файл конфигурации модуля:

bash

sudo nano /etc/modprobe.d/zfs.conf

1

Добавьте строку (пример для ограничения кэша в 2 ГБ):

bash

options zfs zfs_arc_max=2147483648

1

Формула: Значение в байтах. 2 ГБ = 2 * 1024 * 1024 * 1024.

Обновите initramfs и перезагрузитесь:

bash

sudo update-initramfs -u

sudo reboot

12

Проверка после загрузки:

bash

cat /sys/module/zfs/parameters/zfs_arc_max

1

6. Обслуживание и мониторинг

Скраб (Scrub)

Проверка целостности данных и исправление битых секторов с помощью контрольных сумм.

Запуск вручную:

bash

sudo zpool scrub tank

1

Автоматизация (через systemd timer или cron):

bash

# Пример в /etc/cron.monthly/zfs-scrub

#!/bin/sh

zpool scrub tank

123

SMART мониторинг

ZFS не заменяет SMART. Настройте smartd:

bash

sudo nano /etc/smartd.conf

1

Добавьте:

DEVICESCAN -H -m ваш@email.com -M exec /usr/share/smartmontools/smartd-runner

1

Перезапуск:

bash

sudo systemctl enable --now smartmontools

1

Статус пула

bash

zpool status -v

1

Следите, чтобы не было ошибок READ, WRITE, CKSUM.

7. Интеграция с Docker и KVM

Для Docker

Используйте датасет как том. ZFS обеспечивает мгновенные снапшоты контейнеров.

bash

# В docker-compose.yml

volumes:

- /tank/docker/data:/var/lib/docker

123

Примечание: Лучше хранить в ZFS только данные приложений (/tank/docker/appdata), а системные файлы Docker оставить на корневом разделе, если он не на ZFS, чтобы избежать двойного кэширования.

Для KVM (Виртуальные машины)

ZFS отлично подходит для хранения образов дисков VM.

bash

# Создание тома для VM

sudo zfs create tank/vms/ubuntu-server


# В virt-manager укажите путь к файлу или используйте zfs как хранилище

# Путь: /tank/vms/ubuntu-server/disk.img

12345

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

8. Снапшоты и репликация

Ручной снапшот

bash

sudo zfs snapshot tank/data@before-update

1

Откат:

bash

sudo zfs rollback tank/data@before-update

1

Автоматизация (sanoid)

Рекомендую установить утилиту sanoid для управления политиками снапшотов (часовые, дневные, недельные).

bash

# Установка из репо или github

sudo apt install sanoid

sudo nano /etc/sanoid/sanoid.conf

123

Пример конфига:

[tank/data]

hourly = 4

daily = 7

weekly = 4

monthly = 6

autosnap = yes

autoprune = yes

1234567

🚑 Аварийное восстановление

Если пул не импортируется после сбоя:

bash

# Поиск потерянных пулов

sudo zpool import


# Принудительный импорт (если были ошибки)

sudo zpool import -f tank

12345

Если диск вышел из строя в зеркале:

Физически замените диск.

Найдите его новый by-id.

Замените в пуле:

bash

sudo zpool replace tank /dev/disk/by-id/OLD_DISK /dev/disk/by-id/NEW_DISK

1

Следите за ресильвером: zpool status -v.

💡 Итоговый чек-лист для вашей системы

Установлен zfsutils-linux.

Диски очищены через wipefs.

Пул создан с использованием /dev/disk/by-id/.

Включено сжатие zstd.

Ограничен zfs_arc_max (критично для 965P-DS3P).

Настроен еженедельный scrub.

Настроен smartd для мониторинга здоровья дисков.

Если планируете использовать ZFS как корневую файловую систему (с переустановкой ОС), дайте знать — там есть нюансы с шифрованием и загрузчиком (GRUB vs systemd-boot).

Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования