Рубрики
HDD \ SSD \ ISO \ CD-ROM \ LVM \ FS \ RAID \ Диск

Файловая система ZFS

ZFS — относительно новая система, разработанная Sun для Solaris. 
Поскольку код ZFS не соответствует лицензии GPL, ее нельзя интегрировать с ядром Linux. 
По этой причине Linux поддерживает эту файловую систему лишь опосредованно, через FUSE. 
$ man zpool
$ man zfs


Более подробная информация дается здесь: 
http://zfs-fuse.net
http://www.nas-faq.ml/zfs/
https://www.gotoadm.ru/basic-commands-for-zfs/
https://blog.denisbondar.com/post/zfs-manual-rus

Install and Setup ZFS on Debian 11
https://unixhelp.org/how-to-install-add-apt-repository-on-debian-9-10-ubuntu-18-04-16-04/ https://neoserver.ru/help/uvelichenie_diskovogo_prostranstva_v_os_freebsd https://xakep.ru/2014/07/08/zfs-at-home/

install zfs debian 10

0. добавляем репозиторий contrib
apt update
apt -y install software-properties-common dirmngr apt-transport-https lsb-release ca-certificates
add-apt-repository contrib
apt update

1. cтавим необходимые пакеты для дальнейшей установки
apt install Linux-headers-$(uname -r) Linux-image-amd64 spl kmod

2. устанавливаем zfs (установка вылетит не переживаем)
apt install zfsutils-linux zfs-dkms zfs-zed

3. включаем модуль zfs 
modprobe zfs

4. исправляем ошибки и до установим zfs
apt -f install

5. добавляем модуль в автозагрузку создав файл
nano /etc/modules-load.d/zfs.conf
---------------------------------
zfs
---------------------------------

6. перезагружаем и проверяем 
reboot - перезагрузка
lsmod | grep zfs - проверяем что модуль загрузился после перезагрузки

Создание файлов для тестов:

dd if=/dev/zero of=/mnt/file5gb.img bs=1M count=5000

cd /mnt - переходим в каталог mnt 

fallocate -l 1G /disk_name.img

mkfile 100m disk1 disk2 disk3 disk5

mkfile 50m disk4


zpool

zpool - это основной инструмент управления разделами и функциональными возможностями ZFS.

$ zpool команда параметры опции устройства
add - добавить раздел к существующему пулу
attach - добавить раздел или жесткий диск к пулу файловой системы
clean - очистить все ошибки дисков
create - создать новый пул из физического раздела, на котором будут размещены виртуальные диски
destroy - удалить пул разделов zfs
detach - отключить физический раздел от пула
events - посмотреть сообщения ядра, отправленные модулем zfs
export - экспортировать пул для переноса в другую систему
get - посмотреть параметры пула
set - установить значение переменной
history - отобразить историю команд zfs
import - импортировать пул
iostat - отобразить статистику ввода/вывода для выбранного пула zfs
list - вывести список всех пулов
offline/online - выключить/включить физическое устройство, данные на нем сохраняются, но их нельзя прочитать или изменить
remove - удалить устройство из пула
replace - перенести все данные со старого устройства не новое
scrub - проверка контрольных сумм для всех данных
status - вывести статус пула

примеры использования zpool

zpool list - вывести список всех пулов
zpool status - вывести статус пула

stripe - страйп, нечто среднее между RAID0 и JBOD. Не имеет избыточности, вся информация теряется при смерти любого из дисков.
mirror - зеркало, примерный аналог RAID1. Каждый диск зеркала содержит полную копию всей информации. Выдерживает смерть одного любого диска. Возможно и тройное зеркало.
raidz1 - примерный аналог RAID5, требует минимум 3 дисков, объем одного диска уходит на избыточность. Выдерживает смерть одного любого диска.
raidz2 - примерный аналог RAID6, требует минимум 4 диска, объем двух дисков уходит на избыточность. Выдерживает смерть двух любых дисков.
raidz3 - требует минимум 5 дисков, объем трёх дисков уходит на избыточность. Выдерживает смерть трёх любых дисков.
zraid  - аналог raid5
zraid2  - аналог raid6

zpool create -f pool0 /dev/sda7 - создадим пул на основе существующего раздела /dev/sda7

zpool create pool0 zraid /dev/sda /dev/sdb /dev/sdc - создадим zraid из дисков (sda,sdb,sdc), диски должны иметь одинаковый размер

zpool create pool0 mirror sda sdb - создадим raid1 из двух дисков (sda,sdb)


zpool attach pool0 /dev/sdd - добавить новый жесткий диск(/dev/sdd) или раздел к пулу (pool0)
zpool detach pool0 /dev/sdd - удалить устройство (/dev/sdd) из пула (pool0)

zpool destroy pool0 - удалить пул (pool0)

zpool scrub pool0 - проверка пула (pool0) на ошибки

zpool iostat pool0 - статистику использования пула (pool0)

Файловая система zfs


Cоздание файловых систем в zfs:
zfs create pool0/data - создадим в пуле (pool0)  data 
zfs create pool0/files - создадим в пуле (pool0) files
zfs create pool0/media - создадим в пуле (pool0) media 

Точка монтирования для пула и для каждой созданной в нем файловой системы создается в корневом каталоге (/pool0)
zfs mount pool0/data - монтирование
zfs umount /pool0/data - от монтирование

Параметры файловой системы zfs
zfs get all pool0/files - посмотреть все текущие параметры ФС zfs

zfs set compression=gzip pool0/files - включим сжатие

zfs set checksum=off pool0/files - отключим проверку контрольных сумм

zfs get mountpoint pool0/files - смотрим точку монтирования 

zfs set mountpoint=/mnt pool0/files  - установим свою точку монтирования

zfs mount - показать точки монтирования

Снимки zfs


zfs snapshot pool0/files pool0/files@shot1 - создания снимка 

zfs rollback pool0/files@shot1 - восстановление из снимка

zfs list -t snapshot - посмотреть список снимков 

zfs destory pool0/files@shot1 - удалить ненужный снимок

Удалить пул myzfs:

zpool destroy myzfs - удаляем пул myzfs
zpool list - проверяем

Пример работы с raid1 \ удаление \ spare array \ добавление дисков:


Создаем пул из трех дисков RAID1:
zpool create myzfs mirror /disk1 /disk2 /disk3 - создаем raid1
zpool list - смотрим что получилось

Исключаем диск disk3 из пула myzfs:
!!! zpool remove myzfs /disk3 - удаление диска, не возможно применить к зеркалам (raid1)
zpool detach myzfs /disk3 - удаляем диск /disk3 из пула
zpool status -v - смотрим что получилось

Добавить диск горячей замены:
zpool add myzfs spare /disk3 - добавляем в пул myzfs диск /disk3 как spare array
zpool status -v - смотрим что получилось

Отключение пула:
zpool offline myzfs /disk1

Включить пул:
zpool online myzfs /disk1

Очистка хранилища:
zpool scrub myzfs - чистка хранилища

Экспорт хранилища:
zpool export myzfs - экспорт хранилища для использования на другой системе

Импортирование хранилища:
zpool import -d / myzfs - импортировать хранилище на другой системе

Получить статистику по операциям ввода/вывода:
zpool iostat

Показать историю команд:
zpool history

Показать состояние пула:
zpool status -v

Показать пулы:
zpool list

Показать включенные опции:
zpool list -o

Включить квоту:
zfs set quota=20m myzfs/disk
zfs list -o quota myzfs/disk
zfs get quota  myzfs/disk

Увеличение / расширение пула:

zpool history - посмотреть историю выполненных команд 

zpool list  - показать пулы
zpool list -a
zpool list -o
zpool list pool0

zpool status  - показать состояние пулов
zpool status -a

zpool create -f pool0 /dev/vdb - создаем zfs из одного диска
 
!!! zpool  scrub pool0 - выполнить сборку мусора

Включение опций:
zpool set autoexpand=on pool0
zpool set expandsize=yes pool0
zpool set readonly=off pool0

zpool get autoexpand - проверяем включена опция autoexpand

zpool -e pool0 /dev/vdb - выполняем расширение пула, после изменения размера диска /dev/vdb