Показаны сообщения с ярлыком ZFS. Показать все сообщения
Показаны сообщения с ярлыком ZFS. Показать все сообщения

понедельник, 9 декабря 2024 г.

openmediavault + zfs

 В китае был куплен комп на N100 под небольшой домашний NAS, и по мере изучения было решено "а чего бы не изучить openmediavault". Добавлен второй диск (обычный sata на 2Тб, механика), поставлен omv. Из коробки вообще довольно много занятного, включая поддержку k8s, podman.

Но захотелось добавить zfs, штатно его нет, нагуглилось что нужен https://wiki.omv-extras.org/. Только оказалось, что он не открывается из РФ, будто это кому-то сделает плохо (нет). 2 минуты, тор браузер, выкушена строка установки по адресу

https://raw.githubusercontent.com/OpenMediaVault-Plugin-Developers/packages/master/install :

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

И.. всё появляется.

(можно поставить из веба wetty и через веб открыть консольку, где этот скрипт приложить/вставить. Но проще использовать scp install root@...)

Можно через веб, система - плагины - в поиск zfs, можно прямо в консоли

apt install -y openmediavault-zfs

Далее обновляем веб интерфейс и хранилище - zfs - pools - создать, можно отдать просто диск/раздел (предварительно надо будет очистить), можно например lvm том отдать. 

Единственное, "создать раздел" у меня не получилось, если прямо на физический диск делать пул, принимает или lvm, или диск целиком..

PS быстрое включение deduplication на пуле zpool

# zfs get dedup zpool

NAME   PROPERTY  VALUE          SOURCE

zpool  dedup     off            default

root@openmediavault:~# zfs set dedup=on zpool

PS2 если вкладка ZFS в вебе даёт 404 то можно попробовать

modprobe zfs

воскресенье, 3 октября 2021 г.

Некоторые особенности zfs

https://jrs-s.net/2017/03/15/zfs-clones-probably-not-what-you-really-want/

А всего-лишь нужно легковесное копирование, которое "поблочный клон данных и метаданных". У нас же CoW, там штатно используются "хардлинки" внутри фс, на тех же снапшотах. В лине реализуется cp --reflink, говорят btrfs умеет, а zfs - нет.

Костыль:

https://manpages.debian.org/testing/zfsutils-linux/zfs-promote.8.en.html

вторник, 6 октября 2015 г.

zfs on linux - centos 6

http://zfsonlinux.org/epel.html
оф дока
Разумеется, не полная.

Надо понимать, что нет полной интеграции, поэтому нельзя создать пул целиком на диск, только на конкретные разделы, что для меня означает потерю половины функционала. Вроде как на данный момент нет grub-а с поддержкой boot и корня на zfs.

понедельник, 20 июля 2015 г.

zfs: подключаем лог записи и кэш (ZIL и l2arc)

ZFS можно существенно ускорить, если подключить кэши чтения и записи, но для этого требуется SSD, и лучше несколько.
О чём нужно помнить:

  • кэш записи будет сильно изнашивать диск(и), поэтому если делать серьёзно, то надо ставить SLC или eMLC диски, в зеркало
  • + сами диски обязаны иметь обвязку для сброса данных на флэш при отключении питания. То есть 99% бытовых дисков использовать себе дороже.
  • Кэш чтения - можно ставить и бытовые SSD, но лучше подбирать по большому числу IOPS и большой линейной скорости. Если денег много или очень много горячих данных - eMLC предпочтительнее.
  • диски кэша чтения в зеркало не объединяются, но учитывая логику работы - ошибка с SSD - читаем с основного массива, это не критично, только упадёт производительность.
  • при использовании аппаратных рейдов кэш чтения крайне желательно подключать в обход рейда, в набортный сата, при его наличии и соответствию минимум sata 3gbit стандарту, лучше сата 3 - 6Гбит.

понедельник, 15 сентября 2014 г.

Panic loop on ZFS with 9.1-RELEASE

http://lists.freebsd.org/pipermail/freebsd-fs/2013-March/016704.html

I still haven't succeeded in importing the pool readwrite, but I have
succeeded in importing it readonly.

This has been confirmed as a bug by the ZFS illumos ML people.
Description :
You can't import readonly a pool that has cache devices, because the
import will try to send write IOs to auxiliary vdevs, and hit an
assert() call, thus provoking a panic.

Workaround :
Destroy cache devices before zpool import -o readonly=on -f <pool>.

четверг, 24 октября 2013 г.

Немного про zfs send

Команда zfs send создает потоковое представление снимка, передаваемое на стандартный вывод. По умолчанию генерируется полный поток. Выходные данные можно перенаправить в файл или в другую систему. Команда zfs receive создает снимок, содержимое которого помещается в поток, направляемый на стандартный ввод. При получении полного потока также создается новая файловая система. С помощью этих команд можно отправлять и получать данные снимков ZFS и файловых систем.
http://docs.oracle.com/cd/E19253-01/820-0836/gbchx/

среда, 23 октября 2013 г.

File System Latency

Красивое и достаточно подробное описание дисковых операций, 1 и 2 часть - теория, применима не только к соляре. 3 и 4 - практика, солярис. 5 - что-то вроде итогов и утилиты, тоже можно посмотреть, те же strace и truss есть и в линуксе.

http://dtrace.org/blogs/brendan/2011/05/11/file-system-latency-part-1/
http://dtrace.org/blogs/brendan/2011/05/13/file-system-latency-part-2/

http://dtrace.org/blogs/brendan/2011/05/18/file-system-latency-part-3/
http://dtrace.org/blogs/brendan/2011/05/24/file-system-latency-part-4/
http://dtrace.org/blogs/brendan/2011/06/03/file-system-latency-part-5/

понедельник, 8 апреля 2013 г.

zfs: восстановление

Где-то у меня было, но найти не удалось. Дубль.

Rolling Back a ZFS Snapshot
http://docs.oracle.com/cd/E19253-01/819-5461/gbcxk/index.html

Восстановление ZFS-пула с помощью подручных средств
http://www.lissyara.su/articles/freebsd/file_system/zfs_recovery/

Восстановление корневого пула ZFS или снимков корневого пула
http://docs.oracle.com/cd/E19253-01/820-0836/ghzvz/index.html

Также был спецфлаг
zfs:zfs_recover=1

"ZFS maintains an internal cache of available pools and their configurations in /etc/zfs/zpool.cache. The location and contents of this file are private and are subject to change. If the system becomes unbootable, boot to the milestone none by using the -m milestone=none boot option. Once the system is up, remount your root file system as writable and then rename or move the /etc/zfs/zpool.cache file to another location. These actions cause ZFS to forget that any pools exist on the system, preventing it from trying to access the bad pool causing the problem. You can then proceed to a normal system state by issuing the svcadm milestone all command. You can use a similar process when booting from an alternate root to perform repairs."
"Determine which pool might have issues by using the fmdump -eV command to display the pools with reported fatal errors."
http://docs.oracle.com/cd/E19082-01/817-2271/6mhupg6qg/index.html

http://breden.org.uk/2009/08/30/home-fileserver-zfs-boot-pool-recovery/


Recovering the ZFS Root Pool or Root Pool Snapshots

понедельник, 25 марта 2013 г.

ZFS: С чего начать

Вообще, это нужно делать первой заметкой, но мне ещё до заведения блога приходилось общаться с zfs. А тут спросили "что почитать"...
Спрашивали в контексте nexenta, поэтому будет ещё 3 линк

1. Совсем введение, что это вообще такое
http://ru.wikipedia.org/wiki/ZFS

2. Основная дока
Oracle Solaris ZFS Administration Guide
(можно поискать в печатном виде)

3. ZFS for Dummies

4. http://docs.oracle.com/cd/E19253-01/820-0836/index.html (русская версия)

среда, 13 марта 2013 г.

RAID-5 write hole и ZFS

У Raid-5 есть достаточно серьёзная проблема, которая называется write hole - при записи данных и отключении питания может получиться, что на дисках данные отличаются.

"RAID-5 (and other data/parity schemes such as RAID-4, RAID-6, even-odd, and Row Diagonal Parity) never quite delivered on the RAID promise -- and can't -- due to a fatal flaw known as the RAID-5 write hole. Whenever you update the data in a RAID stripe you must also update the parity, so that all disks XOR to zero -- it's that equation that allows you to reconstruct data when a disk fails. The problem is that there's no way to update two or more disks atomically, so RAID stripes can become damaged during a crash or power outage."
https://blogs.oracle.com/bonwick/entry/raid_z

У zfs этой проблемы нет, поскольку там совсем другие принципы - Copy-on-Write и данные не перезаписываются, плюс встроенное версионирование. Да, иногда и у ZFS бывают проблемы, но они гораздо реже, а за счёт того, что все данные имеют чексумму, система автоматически может обнаружить и зачастую исправить сбой в данных. Это особенно актуально на бытовом железе.

И ещё немного про raid-z
https://blogs.oracle.com/ahl/entry/what_is_raid_z
http://www.stableit.ru/2010/08/raid-z.html

Основные недостатки ZFS -- требуется больше памяти и дикое падение производительности при заполнении пула более чем на 50-85%, смотря какой объём пула.

вторник, 18 декабря 2012 г.

ZFS+DTrace+Zones+KVM

ZFS+DTrace+Zones+KVM
http://smartos.org/


SmartOS is a specialized Type 1 Hypervisor platform based on Illumos. It supports two types of virtualization:
  • OS Virtual Machines (Zones): A light-weight virtualization solution offering a complete and secure userland environment on a single global kernel, offering true bare metal performance and all the features Illumos has, namely dynamic introspection via DTrace
  • KVM Virtual Machines: A full virtualization solution for running a variety of guest OS's including Linux, Windows, *BSD, Plan9 and more

SmartOS is a "live OS", it is booted via PXE, ISO, or USB Key and runs entirely from memory, allowing the local disks to be used entirely for hosting virtual machines without wasting disks for the root OS. This architecture has a variety of advantages including increased security, no need for patching, fast upgrades and recovery.

Как работает ZFS

Как работает ZFS

Интересные материалы, плюс в комментах много.
часть 1: vdev
часть 2: metaslab

По мере появления буду обновлять, "в планах как минимум 8-10 статей про разные компоненты ZFS"

понедельник, 28 мая 2012 г.

Установка FreeBSD 9 c ZFS

Ставим freebsd с корнем на zfs

Что 8, что 9 инсталлер штатно не умеет zfs, поэтому надо на обоих грузиться в консоль. Отличия в том, что в 8 это был выкидыш fixit, который был крайне, дико убог, а в 9 появился нормальный shell, который и листать историю умеет, и ls есть, и вообще поведение уже человеческое.

Под 8 версию уже был мануал, теперь сделаем под 9.

среда, 21 марта 2012 г.

illumos

https://www.illumos.org/

Несколько ключевых разработчиков OpenSolaris при поддержке компании Nexenta Systems официально объявили о создании проекта Illumos, в рамках которого создан полностью свободное и развиваемое независимым сообществом разработчиков ответвление от операционной системы OpenSolaris. По заявлению разработчиков проект будет на 100% совместим на уровне ABI с оригинальным ядром Solaris, т.е. будет следовать изменениям в кодовой базе OpenSolaris, дополняя ее собственными разработками и поддерживая собственный набор изменений. Проект будет содержать в себе только открытые компоненты, включая системные библиотеки, ядро ОС и драйверы.
http://www.opennet.ru/opennews/art.shtml?num=27515

Если есть какие-то идеи и патчи к тому же zfs, лучше их проталкивать в этот проект -- больше шансов, что пойдёт в апстрим.

Есть и ОСи на его основе: nexenta stor, SmartOS

Судя по спонсорам LSi и Areca, для всех контроллеров на основе илюмоса лучше использовать именно эти фирмы.

пятница, 10 июня 2011 г.

Установка FreeBSD с корнем на ZFS, используя GPT

В связи с удобством zfs, особенно в части расширения ssd-кэшами, начал переводить сервера на zfs.
warning: не забываем про память! Учитываем, что надо 2+ гига
warning: На i386-arch ставить скорее вредно.. если встанет вообще. Так что только amd64.

Диски пока в основном старые, но для удобства надо бы делать выравнивание. Вообще, под загрузчик надо 62 сектора, но с выравниванием начинать будем или с 64 сектора, или со второго мегабайта. Я выровняю на 1М, 256 блоков=128кб на блоке 512 байт. (интересно, когда можно будет руками задать размер блока через опции, а не патчи кода)

# gpart create -s GPT ad6

# gpart add -b 1M -s 256 -t freebsd-boot ad6

# gpart show ad6
=> 34 625142381 ad6 GPT (298G)
34 2014 - free - (1M)
2048 256 1 freebsd-boot (128k)
2304 625140111 - free - (298G)

Впрочем, размер раздела можно было задать и через -s 128k, с версии 8.0 beta 1 уже понимало ключи размерности.

Дальше нужен своп -- туда идут дампы при падениях, да и работать без свопа вообще -- идея плохая. Размер - если памяти достаточно, и система не на ssd ставится - лучше сделать равным размеру памяти, чтобы полный дамп влез. Место на sata достаточно дешёвое, и даже на sas лишние 10 гиг на фоне сотен штатных -- потеря небольшая. Впрочем, кому как. Главное, не меньше 2 гигов.

Со свопом ещё нюанс: если мы начали свопиться, и вдруг какой-то диск выпадает -- есть огромный шанс словить kernel panic, поэтому надо будет или каким-то образом зеркалировать его, или создавать в файле уже на zfs.

# gpart add -s 4G -t freebsd-swap ad6

Теперь создадим основной раздел

# gpart add -t freebsd-zfs ad6
ad6p3 added

# gpart show ad6
=> 34 625142381 ad6 GPT (298G)
34 2014 - free - (1M)
2048 256 1 freebsd-boot (128k)
2304 8388608 2 freebsd-swap (4.0G)
8390912 616751503 3 freebsd-zfs (294G)

Разметка закончена.
Создадим основной пул.

куда примонтируем, название пула, какие диски
нюанс: у mdadm есть опция missing, что полезно при сборке 1 или 10 рейда без части дисков (если на второй части рабочие данные например). У zfs, насколько я понял, штатно такого не сделать. Или создать sparse-файл размером как диск (даст ли?), и сразу его отключить (zpool offline) и стереть, или создать пул на 1 диск и потом добавить в него второй. Неприменимо для raidz, насколько я знаю - там extend не делался раньше, только переносом пула.
Сделать зеркало из простого диска -- zpool attach (pool) (disk) (new disk)

# zpool create -O atime=off -m /mnt/zfs pool ad6p3

Пора поставить загрузчик.
# gpart bootcode -b /boot/pmbr ad6
bootcode written to ad6

Для выполнения мы должны иметь этот самый /boot/pmbr в основной системе.
PMBR это Protective MBR
Это своеобразная "заглушка", что диск размечен.

Дальше надо записать основной загрузчик.
# gpart bootcode -p /boot/gptzfsboot -i 1 ad6

-i 1 - это первый раздел, который freebsd-boot, в gpart show 3 колонка.

(впрочем, можно написать просто # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad6)

Что за файлы есть в /boot и зачем они нужны -- очень хорошо описано тут:
http://bu7cher.blogspot.com/2011/05/freebsd.html

Дальше начинается шаманство, которое называется "разделение пула на датасеты". Тут есть множество схем.
Поскольку созданные разделы делят весь объем диска, не надо долго высчитывать, где сколько места нужно, поэтому имеет смысл создавать по датасету на основные разделы. Вдобавок, это облегчает работу со снапшотами. Хотя меру надо знать. Ну и добавить-удалить раздел не проблема.

# zfs create pool/usr
# zfs create pool/usr/home
# zfs create pool/var
# zfs create -o exec=off -o setuid=off -o readonly=on pool/var/empty
# zfs create -o setuid=off pool/tmp
# chmod 1777 /mnt/zfs/tmp
# zfs create -o compression=on -o exec=off -o checksum=off pool/var/log

Дальше можно создать usr/ports, usr/src, usr/obj, var/db, var/log, var/run, var/mail итд.

Для веб серверов я дополнительно выделяю
# zfs create pool/var/db
# zfs create pool/var/db/mysql
# zfs create pool/var/www

Некоторые говорят - зачем к примеру выделять usr/ports. Кто-то выделяет, чтобы поставить сжатие на порты. Но в данном случае выделяется ради снапшотов usr.

Также не забываем про права. Дело в том, что к примеру /var/db/mysql с дефолтными правами вполне может не заработать.
# chown mysql:mysql /var/db/mysql
# chmod 0700 /var/db/mysql

Имеет смысл рассматривать разделение для перевода основной части системы в read-only, а всё изменяемое снэпшотить.

А теперь накатываем систему.
Тоже много вариантов. Через rsync с основной системой, через make world, с ливсд выполнением пачки install.sh...


# make DESTDIR=/mnt/zfs installkernel KERNCONF=WM8
# make DESTDIR=/mnt/zfs installworld
warning: /tmp должен быть, быть достаточной ёмкости и не содержать опции noexec
Сразу перекинем порты
# portsnap -p /mnt/zfs/usr/ports/ extract
И сорцы
# rsync -avS /usr/src/ /mnt/zfs/usr/src/
Но etc окажется почти пуст.
# make DESTDIR=/mnt/zfs distrib-dirs distribution

Но после перезагрузки пул не найдёт -- надо скопировать информацию о нём
# cp /boot/zfs/zpool.cache /mnt/zfs/boot/zfs/

После этого нужно настроить boot/loader.conf, прописать rc.conf, make.conf, fstab итд.

Сделаем чрут и донастроим
# chroot /mnt/zfs /bin/csh

loader.conf:
## поддержка загрузки
# echo 'zfs_load="YES"' >> /boot/loader.conf
# echo 'vfs.root.mountfrom="zfs:zroot"' >> /boot/loader.conf
##
# echo 'vfs.zfs.prefetch_disable=1' >> /boot/loader.conf

## если памяти меньше гига -- без этих строк будет падать. если больше - лучше не добавлять.
# echo 'vm.kmem_size="330M"' >> /boot/loader.conf
# echo 'vm.kmem_size_max="330M"' >> /boot/loader.conf
# echo 'vfs.zfs.arc_max="40M"' >> /boot/loader.conf
# echo 'vfs.zfs.vdev.cache.size="5M"' >> /boot/loader.conf
##
# echo 'loader_logo="beastie"' >> /boot/loader.conf

Также надо в rc.conf вписать строку для автомонтирования пулов
echo 'zfs_enable="YES"' >>/etc/rc.conf
Без этой строки автомонтирования нет как минимум в обычной системе, когда корень не на zfs.

также надо вписать пользователей, поставить им пароль, пароль руту (а то будет не войти потом), настроить временную зону...

Теперь надо сделать загрузку с pool. Главное - не делать zfs set mountpoint=/ pool - получим error: failed to initialize ZFS library

Я загрузился так:
# загружаемся с ZFS (loader prompt)
load zfs
set vfs.root.mountfrom=zfs:pool
boot
# добавляем в loader.conf(5) поддержку zfs и точку
# монтирования / (корня)
# //после загрузки.
echo zfs_load=YES >>/boot/loader.conf
echo vfs.root.mountfrom=\"zfs:pool\" >>/boot/loader.conf

При этом корректно прописались все пути в пуле. Хотя есть подозрение, что у меня все пути были legacy, а в некоторых доках при создании датасетов им прописывают mountpoint - тогда надо менять.

Есть вариант через
# export LD_LIBRARY_PATH=/mnt/pool/lib
# zfs umount -fa
# zfs set mountpoint=legacy pool
# zfs set mountpoint=/tmp pool/tmp
# zfs set mountpoint=/usr pool/usr
# zfs set mountpoint=/var pool/var
Сделал только 3 первые команды, забыв про /usr - система не загрузилась.

Теперь размечаем второй диск так же, ставим загрузчики.
hint: сделать копию разметки (без данных, надо будет тоже ставить загрузчик итд):
gpart backup /dev/ada0 | gpart restore /dev/ada1
!!! не перепутать диски!
warning: надо сразу проверить, что размеры дисков равны или начинать создание на более "мелком" диске. Иначе потом зеркало будет не создать без ужимания пула.
Видел вариант через cfdisk или fdisk с копированием структуры, но потерял.

Добавим второй (подготовленный) диск в зеркало
# zpool attach pool ad6p3 ad4p3
В данном случае - имя пула, диск в пуле (первый), наш второй диск.

zpool status покажет оба диска, новый будет ONLINE (resilvering)
Ждём окончания и можно работать. Если что - можно выполнить zpool scrub pool, но во фре это занимает весьма много времени. И видим ещё преимущество zfs -- resilvering у меня делался только для данных, это было порядка 50 гигов из 320. Это весьма быстрее, чем для целого диска.

Также соберём зеркало из своп-областей
gmirror label gm0-swap /dev/ad4p2 /dev/ad6p2
Или в варианте через UUID, что даже надёжнее.
Вписываем в fstab полученное зеркало, ребутимся, радуемся.

Использованные материалы (имеет смысл их хотя бы просмотреть)
http://nix-sa.blogspot.com/2011/04/freebsd-zfs-gpt.html
http://www.opennet.ru/tips/info/1844.shtml
http://wiki.opennet.ru/ZFS_%D0%B8_FreeBSD
http://kosmoflyko.blogspot.com/2010/11/freebsd-zfs.html
http://wiki.lissyara.su/wiki/%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D1%81_ZFS-mirror_%D0%BD%D0%B0_GPT_%D0%B2%D0%BE_FreeBSD

Просто полезная дока
http://xgu.ru/wiki/ZFS

четверг, 9 июня 2011 г.

ZFS

http://blog.levsha.me/search/label/ZFS

Есть полезная инфа. А главное -- Пляски с ZFS и Восстановление ZFS-пула с помощью подручных средств

С 28 версии появилась опция "Поддержка команды "zpool import -F", позволяющей перемотать поврежденный пул к состоянию, соответствующему более ранней группе транзакций;"
http://www.opennet.ru/opennews/art.shtml?num=27828