Библиотека сайта rus-linux.net
Введение в файловую систему Z File System (ZFS) для Linux
Оригинал: An Introduction to the Z File System (ZFS) for LinuxАвтор: Korbin Brown
Дата публикации: 29 января 2014 года
Перевод: А. Кривошей
Дата перевода: июль 2014 г.
ZFS широко используется для хранения данных, любителями NAS и другими гиками, которые предпочитают иметь собственные резервированные системы, а не уповать на облачные.
Что такое ZFS и для чего я могу ее использовать?
Z file system - это свободный менеджер логических томов с открытым исходным кодом, разработанный в компании Sun Microsystems для операционной системы Solaris. Некоторые самые привлекательные его возможности:
Неограниченная масштабируемость
Хорошо, она не бесконечна, но это 128-битная файловая система, которая способна управлять зетабайтами (миллиард терабайт) данных. Неважно, какой размер имеет ваш жесткий диск, ZFS будет пригодна для него.
Максимальная целостность
Для всего, что вы делаете внутри ZFS, рассчитываются контрольные суммы, чтобы обеспечить целостность файлов. Вы можете быть уверены, что не произойдет незаметного повреждения ваших файлов и резервных копий. Кроме того, ZFS в фоне постоянно проверяет целостность ваших данных и, если нужно, выполняет их автоматическое восстановление.
Объединение дисков
Создатели ZFS хотят, чтобы вы использовали дисковое пространство так же, как компьютер использует оперативную память. Если вам нужно больше памяти, вы вставляете в слот еще одну планку и готово. Похожим образом работает ZFS. Если вам нужно больше дискового пространства, вы вставляете еще один жесткий диск и на этом все. Вам нет нужды заботиться о разметке, форматировании, инициализации, или делать что-либо еще - если вам нужен больший дисковый пул, вы просто добавляете диски.
RAID
ZFS способна работать с различными уровнями RAID, сохраняя при этом высокую производительность, сравнимую с аппаратными контроллерами RAID. Это позволяет вам сэкономить деньги, упростить настройки и сохранить производительность дисковой системы.
Установка ZFS
Так как в этом руководстве мы затрагиваем только основы, мы не будем устанавливать ZFS в качестве корневой файловой системы. Здесь предполагается, что вы используете ext4 или некоторую другую файловую систему и хотите использовать ZFS для некоторых из вторичных жестких дисков. Ниже приведены команды для установки ZFS в популярных дистрибутивах Linux.
Solaris и FreeBSD могут поставляться с уже установленной ZFS и готовы к ее использованию.
Ubuntu:
$ sudo add-apt-repository ppa:zfs-native/stable $ sudo apt-get update $ sudo apt-get install ubuntu-zfs
Debian:
$ su - # wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_2%7Ewheezy_all.deb # dpkg -i zfsonlinux_2~wheezy_all.deb # apt-get update # apt-get install debian-zfs
RHEL / CentOS:
$ sudo yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release-1-3.el6.noarch.rpm $ sudo yum install zfs
Если у вас какой-либо другой дистрибутив, проверьте сайт zfsonlinux.org и кликните свой дистрибутив в списке "Packages", чтобы получить инструкции по установке ZFS.
В продолжении этого руководства мы собираемся использовать Ubuntu, но вы сожете не переживать по этому поводу, так как команды ZFS одни и те же для различных дистрибутивов.
Инсталляция займет определенное время, но после ее окончания запустите команду
$ sudo zfs list
чтобы убедиться, что установка проведена корректно. Вы должны получить вывод типа:
Мы используем свежую установку Ubuntu server с одним жестким диском.
Настройка ZFS
А теперь давайте подключим к компьютеру еще шесть жестких дисков.
$ sudo fdisk -l | grep Error
Эта команда показала нам шесть дисков, которые мы установили. На данных момент использовать их невозможно, так как они неразмечены.
Как мы уже говорили ранее, одним из преимуществ ZFS является то, что вам не нужно возиться с разделами (хотя вы можете, если хотите). Давайте возьмем для начала три диска и поместим их в пул с помощью команды:
$ sudo zpool create -f geek1 /dev/sdb /dev/sdc /dev/sdd
zpool create - это команда, используемая для создания нового пула данных, -f позволяет игнорировать возникающие ошибки (например, если диски уже содержат данные), geek1 - имя создаваемого пула, /dev/sdb /dev/sdc /dev/sdd - жесткие диски, которые мы помещаем в пул.
После создания пула вы можете просмотреть его с помощью команд df или sudo zfs list:
Как вы можете видеть, /geek1 уже смонтирован и готов к использованию.
Если вы хотите посмотреть, какие три диска включены в пул, это можно сделать с помощью команды sudo zpool status:
Итак, мы создали динамический пул объемом 9 ТБ (фактически это RAID 0). Если вы не знакомы с этими понятиями, представьте, что в /geek1 мы моздали файл размером 3 Кб. При этом автоматически 1 Кб будет записан на sdb, 1 Кб на sdc и 1 Кб на sdd. В результате при считывании этого файла каждый диск будет считывать свой фрагмент одновременно, то есть скорость чтения утроится. Но плохая новость в том, что если хоть один из дисков выйдет из строя, мы потеряем весь файл.
Предположим, что для вас защита данных важнее скорости доступа к ним. В этом случае необходимо настроить все иначе. Во-первых, удалим созданный нами пул, чтобы можно было использовать задействованные в нем диски:
$ sudo zpool destroy geek1
Пул удален. Теперь давайте задействуем наши три диска для создания пула RAID-Z, который является значительно улучшенной версией RAID 5, так как он позволяет избежать потери данных с помощью копирования при записи. RAID-Z требует как минимум трех жестких дисков и является компромиссом между RAID 0 и RAID 1. В RAID-Z также имеете повышенную скорость чтения за счет чередования блоков, но при этом обеспечивается безопасность путем параллельного распределения данных. Если один из дисков в вашем пуле откажет, просто замените его и ZFS восстановит все данные на основе информации распределенной на других дисках. К потере данных может привести только одновременный выход из строя двух дисков. Для еще большей надежности вы можете использовать RAID 6 (RAID-Z2 в случае ZFS) с двойным распределением данных.
Для создания пула мы используем ту же команду zpool create, но задаем тип raidz:
$ sudo zpool create -f geek1 raidz /dev/sdb /dev/sdc /dev/sdd
Теперь команда df -h показывает, что наш пул размером 9 ТБ уменьшился до 6 Тб, так как 3 Тб используются для параллельного распределения данных. С помощью команды zpool status мы можем выяснить, что наш пул теперь относится к типу RAID-Z.
Чтобы убедиться, насколько просто расширить пул, давайте добавим в него остальные три диска (еще 9 ТБ):
$ sudo zpool add -f geek1 raidz /dev/sde /dev/sdf /dev/sdg
Что мы теперь имеем: