notes/zfs.md

14 KiB
Raw Blame History

ZFS в ОС Альт 10

Введение

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 ~]# 

вверх

Больше примеров в Справочнике команд