Ярлыки

gentoo (19) kde (7) btrfs (5) nvidia (4) portage (3) zfs (3) clementine (2) compiz (2) fs (2) kernel (2) windows (2) zram (2) сеть (2) bash (1) chattr (1) conky (1) cow (1) cpufreq (1) cryptsetup (1) dns (1) dnsmasq (1) dolphin (1) emerald (1) ext4 (1) f2fs (1) ffmpeg (1) firefox (1) kdm (1) kexec (1) kvm (1) lsattr (1) lvm (1) networkmanager (1) noop (1) openrc (1) pulseaudio (1) qemu (1) qtcurve (1) ram (1) reiserfs (1) s2ram (1) samba (1) sed (1) ssd (1) systemd (1) tmpfs (1) vlc (1) webdav (1) zcache (1) игры (1) шифрование (1)

Gentoo и ZFS

В свете выхода первой стабильной версии ZFSonLinux решил снова опробовать это чудо инженерной мысли на своём домашнем десктопе. Есть несколько существенных причин почему стоит это сделать:
  1. ZFS - чрезвычайно надёжная файловая система. Практически все использующиеся в Linux/Windows ФС исходят из того, что накопители данных безотказны и надёжны, что, конечно же, далеко не так. ZFS основана на недоверии накопителям, поэтому имеет обширный арсенал для выживаемости вверенных ей данных. Это и контрольные суммы для каждого блока, и автоматическое восстановление повреждённых файлов, а также более экзотические решения вроде максимального разнесения данных и метаданных по всему объёму накопителя.
  2. Принцип "файловая система = каталог". Конечно, это грубое изложение, но суть передаётся точно: на одном разделе можно создать сколько файловых систем ZFS, задавая каждой из которых собственные опции (тип контрольных сумм, квоты, тип сжатия, и т.д. и т.п.), и которые будут выглядеть как обычные каталоги.
  3. Снапшоты, клоны и откаты. Снапшот - это мгновенный срез, снимок состояния файловой системы. Например, перед рискованным обновлением системы можно сделать снапшот системной ФС, который впоследствии можно будет примонтировать как обычную ФС, откатиться к нему одной командой или склонировать.
  4. Экономия дискового пространства благодаря сжатию. На HDD малоактуально, а вот для SSD - самое то. На выбор несколько алгоритмов: lzjb, lzo, gzip[1-9] и другие.
Это плюсы. Естественно, есть и минусы:
  1. ZFS весьма требовательна к аппаратному обеспечению: во-первых, она очень нестабильно работает на 32-битных машинах (если вообще работает), во-вторых - ест ОЧЕНЬ много оперативной памяти под кэши (хотя возможно ограничить её аппетиты, это будет рассмотрено ниже). Лично я бы не советовал всерьёз присматриваться к этой ФС, если на машине меньше 4 Гб оперативки.
  2. На HDD она явно не демонстрирует чудеса скорости, т.к. её алгоритмы разбрасывают данные по всей ФС. Особенно задержки заметны при забитом кэше. Например, KSnapshot или Dolphin, обращаясь к каталогу со скриншотами (всего чуть больше 600 файлов), испытывают раздражающие задержки. На SSD, понятное дело, эта проблема сходит на нет.
  3. Лицензия ZFS (CDDL) несовместима с лицензией Linux (GPLv2). Поэтому чтобы использовать ZFS, необходимо патчить ядро, танцевать с initrd и т.д. Очень неприятно.
Есть у ZFS ещё одна фича, которую я затрудняюсь отнести к плюсам или минусам: дедупликация. Это механизм сканирования ФС на предмет дубликатов блоков и замена дублирующего блока ссылкой. Плюс её в том, что она позволяет значительно экономить место, минус - в многократном объёме потребляемой ZFS оперативной памяти. Поэтому вряд ли есть смысл включать этот механизм на десктопе. Оно и понятно - дедупликация в ZFS изначально была нацелена на серверы с огромным количеством незначительно отличающихся образов виртуальных машин.

Итак, решено было перевести на ZFS корень, а заодно - и терабайтное файлохранилище. Корень расположен на стареньком 80 Гб SSD Intel 320, файлохранилище - на ещё более старом Seagate Barracuda 7200.12. Корень будет находится на /dev/sda2, на /dev/sda1 будет создан Ext2-раздел размером в 1 Гб под каталог /boot. Конечно же, для этих целей необходима вторая рабочая система (live либо установленная на другой накопитель) с ядром, умеющим работать с ZFS. Наиболее удобное ядро - geek-sources из оверлея init6.

Установка ядра с поддержкой ZFS

Подключение оверлея init6:
layman -a init6
Далее следует добавить некоторые флаги и размаскировать флаг "kernel-builtin":
echo "sys-kernel/geek-sources genpatches uksm zfs" >> /etc/portage/package.use
mkdir -p /etc/portage/profile
echo "sys-fs/zfs -kernel-builtin" > /etc/portage/profile/package.use.mask
и установить ядро:
emerge geek-sources
В настройках ядра соответствующие опции должны быть включены:



Из-за несовместимости GPLv2 и CDDL придётся создать initramfs, содержащий всё необходимое для работы с ZFS. Делается это, впрочем, чрезвычайно легко. Сначала нужно установить Grub2:
echo "sys-boot/grub libzfs" >> /etc/portage/package.use
emerge grub
затем Genkernel:
emerge genkernel
и можно собирать (и устанавливать заодно) ядро:
genkernel all --no-clean --makeopts=-j8 --zfs --bootloader=grub2
Genkernel соберёт всё что нужно и добавит записи в конфиг Grub2.

Работа с ZFS

Первый шаг - создание пулов (pool). Я создал по отдельному пулу на каждое устройство:
zpool create zero /dev/sda2
zpool create data /dev/sdb1
Теперь стоит изменить некоторые опции:
zfs set mountpoint=legacy zero (чтобы монтирование производилось средствами Linux, а не ZFS)
zfs set compress=lzjb zero (включение быстрого алгоритма сжатия)
zfs set atime=off zero (обновление временных меток последнего доступа снижает скорость, поэтому их лучше отключить)
zfs set checksum=off zero (контрольные суммы лучше включать локально)
То же самое было выставлено и для пула data. Это глобальные настройки, они будут унаследованы всеми файловыми системами этих пулов.
После этого можно создавать файловые системы для конкретных данных и в зависимости от типов данных задать отдельные опции:
zfs create zero/core (для самой системы)
zfs set mountpoint=legacy zero/core
zfs set checksum=fletcher4 zero/core (целесообразно включить контрольные суммы для системных файлов, а fletcher4 - очень быстрый алгоритм)
zfs create zero/repo (для репозиториев)
zfs set mountpoint=legacy zero/repo
zfs set compress=gzip-9 zero/repo (максимальный уровень сжатия - в этой ФС будут храниться огромное количество нечасто читаемых/записываемых текстовых файлов)
Для ФС с репозиториями целесообразно не включать контрольные суммы. Дальше:
zfs create zero/depo (для депозиториев - архивов с исходниками и каталога ядра)
Можно задать те же опции, что и для репозиториев.
ФС для профилей пользователей:
zfs create zero/shell
Для этой ФС оптимальными будут опции системной ФС (т.е. zero/core).
Просмотреть опции файловой системы или пула можно командой вида:
zfs get <option> <fs>
Например:
zfs get all zero/core

На файлохраналище всё в общем то же самое, за исключением некоторых нюансов:
  • Контрольные суммы fletcher4 заданы уже на уровне пула (т.к. данные в файлохранилище ценнее данных системы)
  • На ФС для графики и музыки сжатие было отключено
Для примера - опции ФС data/Pictures:


Просмотр созданных ФС:
zfs list

 

Настройка системы на работу с ZFS

Файловые системы ZFS должны быть прописаны в /etc/fstab в таком стиле:
zero/core    /    zfs    noatime    0 0
Если после перезагрузки initramfs вываливается в консоль, будучи не в состоянии примонтировать ФС ZFS, следует в этой консоли ввести:
zpool import -f
exit

Снапшоты и клоны

Создание снапшота корня перед обновлением:
zfs snapshot zero/core@kde-4.10.1
Для просмотра списка созданных снапшотов используется команда zfs list с ключом -t snapshot:
zfs list -t snapshot

Можно сразу увидеть сколько места занимает тот или иной снапшот, в отличие от Btrfs, на которой узнать размер созданных снапшотов практически невозможно.
Снапшоты можно монтировать как обычные ФС:
mount -t zfs zero/core@before_vmware /mnt/tmp

Но снапшоты доступны лишь на чтение. Чтобы что-то записать в снапшот, следует его клонировать:
zfs clone zero/core@before_vmware zero/core/before_vmware_clone
Монтируется клон так же, как и снапшот. 

Некоторые итоги

За пару месяцев использования ZFS уже можно сделать кое-какие выводы:
  • ZFS малопригодна для большого файлохранилища на HDD. Из-за очень большой фрагментации считывающие головки HDD бешено метаются по всей поверхности диска, что значительно снижает скорость работы с файлами и усиливает износ механики HDD. В общем, стихия ZFS - это SSD.
  • На SSD ZFS очень быстра, признаков просадки производительности не замечено. 
  • Количество занятой оперативной памяти может шокировать неподготовленного пользователя. Типичная картина:


Комментариев нет:

Отправить комментарий