ZFS - это комбинация менеджера томов и файловой системы. Будучи одной из наиболее привлекательных компонент операционной системы Solaris и желанной для всех системных администраторов Linux, знакомых с Solaris, ZFS стала доступной в системе Ubuntu. Основные ее преимущества - это: * моментальные снимки файловой системы (снапшоты) * механизм копирования при записи * непрерывный контроль целостности для предотвращения повреждения данных * автоматическое исправление ошибок * эффективное сжатие данных
Эти качества делают ZFS идеальной файловой системой для контейнеров.
ZFS больше не является модулем для DKMS. Вместо этого zfs.ko автоматически собирается и устанавливается в операционную систему.
$ locate zfs.ko
/lib/modules/4.4.0-4-generic/kernel/zfs/zfs/zfs.ko
Модуль загружается автоматически при использовании:
$ lsmod | grep zfs
zfs 2801664 11
zunicode 331776 1 zfs
zcommon 57344 1 zfs
znvpair 90112 2 zfs,zcommon
spl 102400 3 zfs,zcommon,znvpair
zavl 16384 1 zfs
В Ubuntu 16.04 Xenial все достаточно просто. Всего несколько команд нужно для начала использования ZFS и LXD, и на это потребуется не более минуты.
Для начала установим lxd и zfsutils-linux:
$ sudo apt install lxd zfsutils-linux
Далее, мы используем команду lxd init для интерактивной настройки LXD и ZFS. В примере ниже для пула ZFS мы будем использовать разрежённый файл (так называемый sparse-файл), но в рабочей системе лучше всего использовать сырой раздел SSD или устройство.
$ sudo lxd init
Name of the storage backend to use (dir or zfs): zfs
Create a new ZFS pool (yes/no)? yes
Name of the new ZFS pool: lxd
Would you like to use an existing block device (yes/no)? no
Size in GB of the new loop device (1GB minimum): 2
Would you like LXD to be available over the network (yes/no)? no
LXD has been successfully configured.
Теперь проверим пул ZFS:
$ sudo zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
lxd 1.98G 450K 1.98G - 0% 0% 1.00x ONLINE -
$ sudo zpool status
pool: lxd
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
lxd ONLINE 0 0 0
/var/lib/lxd/zfs.img ONLINE 0 0 0
errors: No known data errors
$ lxc config get storage.zfs_pool_name
storage.zfs_pool_name: lxd
И, наконец, можно импортировать LXD-образ Ubuntu и запустить несколько контейнеров. Обратите внимание на то, как быстро стартуют контейнеры благодаря таким функциям ZFS, как клонирование и копирование при записи:
$ newgrp lxd
$ lxd-images import ubuntu --alias ubuntu
Downloading the GPG key for http://cloud-images.ubuntu.com
Progress: 48 %
Validating the GPG signature of /tmp/tmpa71cw5wl/download.json.asc
Downloading the image.
Image manifest: http://cloud-images.ubuntu.com/server/releases/trusty/release-20160201/ubuntu-14.04-server-cloudimg-amd64.manifest
Image imported as: 54c8caac1f61901ed86c68f24af5f5d3672bdc62c71d04f06df3a59e95684473
Setup alias: ubuntu
$ for i in $(seq 1 5); do lxc launch ubuntu; done
$ lxc list
+-------------------------+---------+-------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | EPHEMERAL | SNAPSHOTS |
+-------------------------+---------+-------------------+------+-----------+-----------+
| discordant-loria | RUNNING | 10.0.3.130 (eth0) | | NO | 0 |
+-------------------------+---------+-------------------+------+-----------+-----------+
| fictive-noble | RUNNING | 10.0.3.91 (eth0) | | NO | 0 |
+-------------------------+---------+-------------------+------+-----------+-----------+
| interprotoplasmic-essie | RUNNING | 10.0.3.242 (eth0) | | NO | 0 |
+-------------------------+---------+-------------------+------+-----------+-----------+
| nondamaging-cain | RUNNING | 10.0.3.9 (eth0) | | NO | 0 |
+-------------------------+---------+-------------------+------+-----------+-----------+
| untreasurable-efrain | RUNNING | 10.0.3.89 (eth0) | | NO | 0 |
+-------------------------+---------+-------------------+------+-----------+-----------+