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 | Описание |
kernel-source-zfs - ZFS modules sources for Linux kernel
```
```bash
[root@zfs ~]# apt-cache search zfs | grep utils
zfs-utils - Native OpenZFS management utilities for Linux
```
В репозитории есть модуль для двух веток ядер: `std-def`, `un-def`. Для того, чтобы понять какой модуль необходим, нужно уточнить какое ядро используется на узле
```bash
[root@zfs ~]# uname -r
6.1.83-un-def-alt1
```
Таким образом для включения поддержки на уровне ядра необходимо установить модуль. Т.к. из репозитория будет установлен модуль для актуальной версии ядра, необходимо на узле также выполнить обновление ядра, как и всей системы
```bash
apt-get update && apt-get dist-upgrade -y
update-kernel -y
reboot
```
### Установка модуля ядра и утилиты командной строки
`-f` - force, очистит диски, если на них есть данные
`-m` - указание точки монтирования. По-умолчанию используется `/<pool-name>`
`<ids>` - в самом простом виде можно использовать имена дисков `/dev/sdb`, но это нежелательно, т.к. при выходе из строя диска `/dev/sdb`, при следующей загрузке системы все последующие диски изменят своё имя - диск, который ранее назывался `/dev/sdc` теперь будет доступен как `/dev/sdb`. Это может привести к полной неработоспособности системы. Поэтому желательным является метод именования дисков по постоянным идентификаторам.