# ZFS в ОС Альт 10 - [ZFS в ОС Альт 10](#zfs-в-ос-альт-10) - [Введение](#введение) - [Возможности ZFS](#возможности-zfs) - [Уровни абстракции ZFS](#уровни-абстракции-zfs) - [Virtual Devices](#virtual-devices) - [Pool](#pool) - [Установка](#установка) - [Подготовка](#подготовка) - [Установка модуля ядра и утилиты командной строки](#установка-модуля-ядра-и-утилиты-командной-строки) - [Загрузка модуля ядра](#загрузка-модуля-ядра) - [Автозагрузка модуля ядра](#автозагрузка-модуля-ядра) - [Создание пула](#создание-пула) - [Постоянные идентификаторы диска](#постоянные-идентификаторы-диска) - [Пул из одного диска](#пул-из-одного-диска) - [Просмотр файловых систем в пуле](#просмотр-файловых-систем-в-пуле) - [Удаление пула](#удаление-пула) - [Создание пула с чередованием (RAID0, 2 VDEVs)](#создание-пула-с-чередованием-raid0-2-vdevs) ## Введение ZFS - это современная файловая система и одновременно логический менеджер томов, изначально разработана компанией SUN, далее Oracle ### Возможности ZFS - масштабируемость - защита от потерь данных, программная отказоустойчивость - поддержка больших объемов данных - интеграция управления логическими томами с файловой системой - поддержка снимков и CoW клонирования - непрерывный контроль целостности - автоматическое восстановление ### Уровни абстракции ZFS - Virtual Devices. VDEVs. Виртуальные устройства. - Pool. Пулы. - DataSet. Файловая система внутри пула #### Virtual Devices VDEVs. Виртуальные устройства. Используются для размещения данных или в служебных целях для тонкой настройки ZFS - **физические диски** - **разделы дисков** - **файл образа диска** с указанием полного пути Использование виртуальных устройств - без явного указания виртуальные устройства объединяются пул уровня RAID0 - запись с чередованием для повышения скорости. Без избыточности и отказоустойчивости. - **mirror** - програмный массив RAID1 - **raidz1/2/3** - RAID-массивы с контролем четности - **spare** - диски горячего запаса для RAID. На них не хранятся данные, эти диски включаются в работу в случае выхода из строя диска в пуле - **cache** - устройство для кэша 2го уровня (L2ARC). Рекомендуется использовать на быстрых SSD дисках. Если скорость дисков с данным не отличается от скорости дисков с кешем, смысл выделения отдельных дисков по кеш пропадает. **КРАЙНЕ ЧУВСТВИТЕЛЕН К ПОТЕРЕ ДАННЫХ** - **log** - отдельный журнал (SLOG), содержащий ZFS Intent Log (ZIL). Так же как и кеш есть смысл использовать только для ускорения работы на быстрых дисках #### Pool | Тип пула | Опция | Мин.дисков/VDEVs | Описание | | -------- | ------------ | :--------------: | --------------------------------- | | RAID-0 | по-умолчанию | 1/1 | сумма дисков, нет избыточности | | RAID-1 | mirror | 2/1 | данные зеркалируются на все диски | | RAID-10 | mirror | 4/2 | сочетание RAID0 и RAID1 | | RAIDZ-1 | raidz | 3/1 | аналог RAID5, одинарная четность | | RAIDZ-2 | raidz2 | 4/1 | аналог RAID6, двойная четность | | RAIDZ-3 | raidz3 | 5/1 | тройная четность | RAID0 быстрее RAID1, кот. быстрее RAIDZ-1, кот. быстрее RAIDZ-2, кот. быстрее RAIDZ-3 Размер пула невозможно уменьшить, только увеличить [вверх](#zfs-в-ос-альт-10) ## Установка ### Подготовка Для включения поддержки ZFS в ОС Альт 10.2 необходимо загрузить соответствующий модуль ядра и утилиту командной строки ```bash [root@zfs ~]# apt-get update && apt-cache search zfs | grep kernel ... kernel-modules-zfs-std-def - ZFS Linux modules kernel-modules-zfs-un-def - ZFS Linux modules kernel-source-zfs - ZFS modules sources for Linux kernel ``` ```bash [root@zfs ~]# apt-cache search zfs | grep utils zfs-utils - Native OpenZFS management utilities for Linux ``` В репозитории есть модуль для двух веток ядер: `std-def`, `un-def`. Для того, чтобы понять какой модуль необходим, нужно уточнить какое ядро используется на узле ```bash [root@zfs ~]# uname -r 6.1.83-un-def-alt1 ``` Таким образом для включения поддержки на уровне ядра необходимо установить модуль. Т.к. из репозитория будет установлен модуль для актуальной версии ядра, необходимо на узле также выполнить обновление ядра, как и всей системы ```bash apt-get update && apt-get dist-upgrade -y update-kernel -y reboot ``` [вверх](#zfs-в-ос-альт-102) ### Установка модуля ядра и утилиты командной строки ```bash apt-get install kernel-modules-zfs-un-def zfs-utils -y reboot ``` ### Загрузка модуля ядра Если на узле уже имеются zfs пулы, система их увидит и автоматически загрузит необходимый модуль, если же пулов ещё нет, модуль нужно загрузить ```bash [root@zfs ~]# modprobe zfs [root@zfs ~]# lsmod | grep zfs zfs 3678208 0 zunicode 335872 1 zfs zzstd 581632 1 zfs zlua 176128 1 zfs zavl 16384 1 zfs icp 307200 1 zfs zcommon 94208 2 zfs,icp znvpair 94208 2 zfs,zcommon spl 110592 6 zfs,icp,zzstd,znvpair,zcommon,zavl ``` ### Автозагрузка модуля ядра Вместе с модулем ядра будет установлен соответствующий конфигурационный файл для автозагрузки `/etc/modules-load.d/zfs.conf` ```bash [root@zfs ~]# cat /etc/modules-load.d/zfs.conf # The default behavior is to allow udev to load the kernel modules on demand. # Uncomment the following line to unconditionally load them at boot. #zfs ``` В нём необходимо раскоментировать строку zfs ```bash [root@zfs ~]# cat /etc/modules-load.d/zfs.conf # The default behavior is to allow udev to load the kernel modules on demand. # Uncomment the following line to unconditionally load them at boot. zfs ``` [вверх](#zfs-в-ос-альт-102) ## Создание пула В общем виде создание пула ```bash zpool create -f -m [raidz(2|3)|mirror] ``` `-f` - force, очистит диски, если на них есть данные `-m` - указание точки монтирования. По-умолчанию используется `/` `` - в самом простом виде можно использовать имена дисков `/dev/sdb`, но это нежелательно, т.к. при выходе из строя диска `/dev/sdb`, при следующей загрузке системы все последующие диски изменят своё имя - диск, который ранее назывался `/dev/sdc` теперь будет доступен как `/dev/sdb`. Это может привести к полной неработоспособности системы. Поэтому желательным является метод именования дисков по постоянным идентификаторам. ### Постоянные идентификаторы диска - **by-id** ```bash [root@zfs ~]# ls -lh /dev/disk/by-id итого 0 lrwxrwxrwx 1 root root 9 апр 3 13:13 ata-QEMU_DVD-ROM_QM00003 -> ../../sr0 lrwxrwxrwx 1 root root 9 апр 3 13:13 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0 -> ../../sda lrwxrwxrwx 1 root root 10 апр 3 13:13 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 апр 3 13:13 scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part2 -> ../../sda2 lrwxrwxrwx 1 root root 9 апр 3 13:13 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 -> ../../sdb lrwxrwxrwx 1 root root 9 апр 3 13:13 scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 -> ../../sdc ``` - **by-path** ```bash [root@zfs ~]# ls -lh /dev/disk/by-path итого 0 lrwxrwxrwx 1 root root 9 апр 3 13:13 pci-0000:00:01.1-ata-2 -> ../../sr0 lrwxrwxrwx 1 root root 9 апр 3 13:13 pci-0000:00:01.1-ata-2.0 -> ../../sr0 lrwxrwxrwx 1 root root 9 апр 3 13:13 pci-0000:01:01.0-scsi-0:0:0:0 -> ../../sda lrwxrwxrwx 1 root root 10 апр 3 13:13 pci-0000:01:01.0-scsi-0:0:0:0-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 апр 3 13:13 pci-0000:01:01.0-scsi-0:0:0:0-part2 -> ../../sda2 lrwxrwxrwx 1 root root 9 апр 3 13:13 pci-0000:01:02.0-scsi-0:0:0:1 -> ../../sdb lrwxrwxrwx 1 root root 9 апр 3 13:13 pci-0000:01:03.0-scsi-0:0:0:2 -> ../../sdc ``` - **GPT labels** - если метка была создана при инициации таблицы разделов GPT ### Пул из одного диска ```bash [root@zfs ~]# mkdir -p /srv/zfs_pools/zfs0 [root@zfs ~]# ls -lh /dev/disk/by-id | grep sdb lrwxrwxrwx 1 root root 9 апр 3 13:13 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 -> ../../sdb [root@zfs ~]# zpool create -f -m /srv/zfs_pools/zfs0 zfs0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 ``` ```bash [root@zfs ~]# zpool status pool: zfs0 state: ONLINE config: NAME STATE READ WRITE CKSUM zfs0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 ONLINE 0 0 0 errors: No known data errors [root@zfs ~]# df -Th Файловая система Тип Размер Использовано Дост Использовано% Cмонтировано в udevfs devtmpfs 5,0M 96K 5,0M 2% /dev runfs tmpfs 3,9G 644K 3,9G 1% /run /dev/sda2 ext4 30G 3,3G 25G 12% / tmpfs tmpfs 3,9G 0 3,9G 0% /dev/shm tmpfs tmpfs 3,9G 0 3,9G 0% /tmp tmpfs tmpfs 795M 0 795M 0% /run/user/500 zfs0 zfs 9,3G 128K 9,3G 1% /srv/zfs_pools/zfs0 [root@zfs ~]# zfs list NAME USED AVAIL REFER MOUNTPOINT zfs0 123K 9.20G 24K /srv/zfs_pools/zfs0 [root@zfs ~]# ``` [вверх](#zfs-в-ос-альт-102) ### Просмотр файловых систем в пуле ```bash [root@zfs ~]# zfs list NAME USED AVAIL REFER MOUNTPOINT zfs0 123K 9.20G 24K /srv/zfs_pools/zfs0 [root@zfs ~]# ``` ### Удаление пула ```bash zpool destroy zfs0 ``` ### Создание пула с чередованием (RAID0, 2 VDEVs) ```bash [root@zfs ~]# ls -lh /dev/disk/by-id/ | grep sd[bc] lrwxrwxrwx 1 root root 9 апр 3 15:14 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 -> ../../sdb lrwxrwxrwx 1 root root 9 апр 3 13:13 scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 -> ../../sdc ``` ```bash zpool create -f zpool0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 ``` ```bash [root@zfs ~]# zpool status pool: zpool0 state: ONLINE config: NAME STATE READ WRITE CKSUM zpool0 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 ONLINE 0 0 0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi2 ONLINE 0 0 0 errors: No known data errors [root@zfs ~]# [root@zfs ~]# df -Th Файловая система Тип Размер Использовано Дост Использовано% Cмонтировано в udevfs devtmpfs 5,0M 96K 5,0M 2% /dev runfs tmpfs 3,9G 652K 3,9G 1% /run /dev/sda2 ext4 30G 3,3G 25G 12% / tmpfs tmpfs 3,9G 0 3,9G 0% /dev/shm tmpfs tmpfs 3,9G 0 3,9G 0% /tmp tmpfs tmpfs 795M 0 795M 0% /run/user/500 zpool0 zfs 19G 128K 19G 1% /zpool0 [root@zfs ~]# ``` [вверх](#zfs-в-ос-альт-102)