14 KiB
ZFS в ОС Альт 10.2
Введение
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.2 необходимо загрузить соответствующий модуль ядра и утилиту командной строки
[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
[root@zfs ~]# apt-cache search zfs | grep utils
zfs-utils - Native OpenZFS management utilities for Linux
В репозитории есть модуль для двух веток ядер: std-def
, un-def
. Для того, чтобы понять какой модуль необходим, нужно уточнить какое ядро используется на узле
[root@zfs ~]# uname -r
6.1.83-un-def-alt1
Таким образом для включения поддержки на уровне ядра необходимо установить модуль. Т.к. из репозитория будет установлен модуль для актуальной версии ядра, необходимо на узле также выполнить обновление ядра, как и всей системы
apt-get update && apt-get dist-upgrade -y
update-kernel -y
reboot
Установка модуля ядра и утилиты командной строки
apt-get install kernel-modules-zfs-un-def zfs-utils -y
reboot
Загрузка модуля ядра
Если на узле уже имеются zfs пулы, система их увидит и автоматически загрузит необходимый модуль, если же пулов ещё нет, модуль нужно загрузить
[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
[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
[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
Создание пула
В общем виде создание пула
zpool create -f -m <mount-point> <pool-name> [raidz(2|3)|mirror] <ids>
-f
- force, очистит диски, если на них есть данные
-m
- указание точки монтирования. По-умолчанию используется /<pool-name>
<ids>
- в самом простом виде можно использовать имена дисков /dev/sdb
, но это нежелательно, т.к. при выходе из строя диска /dev/sdb
, при следующей загрузке системы все последующие диски изменят своё имя - диск, который ранее назывался /dev/sdc
теперь будет доступен как /dev/sdb
. Это может привести к полной неработоспособности системы. Поэтому желательным является метод именования дисков по постоянным идентификаторам.
Постоянные идентификаторы диска
- by-id
[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
[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
Пул из одного диска
[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
[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 ~]#
Просмотр файловых систем в пуле
[root@zfs ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zfs0 123K 9.20G 24K /srv/zfs_pools/zfs0
[root@zfs ~]#
Удаление пула
zpool destroy zfs0
Создание пула с чередованием (RAID0, 2 VDEVs)
[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
zpool create -f zpool0 scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 scsi-0QEMU_QEMU_HARDDISK_drive-scsi2
[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 ~]#