Ubuntu zfs что это

Обновлено: 04.07.2024

В мире *nix-систем все более популярными становятся файловые системы ZFS и Btrfs. Популярность эта вполне заслуженна — в отличие от своих предшественников, они лишены некоторых проблем и имеют множество неоспоримых достоинств. А не так давно им присвоен статус стабильных. Все это и побудило написать данную статью.

WARNING!

Некоторые описываемые здесь команды способны необратимо уничтожить твои данные. Трижды проверяй введенное, прежде чем нажимать Enter.

Пожалуй, прежде чем перейти к практике, нужно дать некоторые пояснения, что собой представляют файловые системы нового поколения. Начну с ZFS. Эта ФС была разработана для Solaris и в настоящее время, поскольку Oracle закрыла исходный код, форкнута в версию OpenZFS. В дальнейшем под ZFS будет подразумеваться именно форк. Вот лишь некоторые из ключевых особенностей ZFS:

  • огромный до невообразимости максимальный размер ФС;
  • пулы хранения, которые позволяют объединять несколько разных устройств;
  • контрольные суммы уровня файловой системы, при этом есть возможность выбирать алгоритм;
  • основана на принципе COW — новые данные не перезаписывают старые, а размещаются в других блоках, что открывает такие возможности, как снапшоты и дедупликация данных;
  • сжатие данных на лету — как и в случае с контрольными суммами, поддерживается несколько алгоритмов;
  • возможность управлять файловой системой без перезагрузки.

Btrfs начала разрабатываться в пику ZFS компанией Oracle — еще до покупки Sun. Я не буду описывать ее особенности — они в ZFS и Btrfs, в общем-то, схожи. Отличия же от ZFS таковы:

  • поддержка версий файлов (в терминологии Btrfs называемых поколениями) — есть возможность просмотреть список файлов, которые изменялись с момента создания снапшота;
  • отсутствие поддержки zvol, виртуальных блочных устройств, на которых можно разместить, к примеру, раздел подкачки, — но данное отсутствие вполне компенсируется loopback-устройствами.

Далее будет описана как установка ZFSonLinux, так и некоторые интересные сценарии использования ZFS и Btrfs.

Для установки ZFSonLinux потребуется 64-разрядный процессор (можно и 32, но разработчики не обещают стабильности работы в таком случае) и, соответственно, 64-разрядный дистрибутив с ядром не ниже 2.6.26 — я использовал Ubuntu 13.10. Памяти тоже должно быть достаточно — не менее 2 Гб. Предполагается, что основные пакеты, необходимые для сборки и компиляции модулей и ядра, уже установлены. Накатываем дополнительные пакеты и качаем нужные тарболлы:

Распаковываем оба архива, но сперва собираем SPL — слой совместимости с Solaris, а уж затем собственно ZFS. Отмечу, что, поскольку мы ставим свежайшую версию ZFSonLinux, DKMS (механизм, позволяющий автоматически перестраивать текущие модули ядра с драйверами устройств после обновления версии ядра) недоступен, и в случае обновления ядра придется собирать пакеты заново вручную.

Прежде чем компилировать ZFS, нужно поставить хидеры, заодно поставим и остальные свежесобранные пакеты:

Наконец, собираем и ставим ZFS:

Установку ZFS можно считать завершенной.

Установка нужных для компиляции ZFS пакетов

Установка нужных для компиляции ZFS пакетов

Реверс малвари

Предположим, ты хочешь получить безопасную, зашифрованную, но в то же время отказоустойчивую файловую систему. В случае с классическими ФС старого поколения тебе пришлось бы выбирать между шифрованием и отказоустойчивостью, поскольку эти вещи несколько несовместимы. В ZFS, однако, существует возможность «склеить» их между собой. Современная проприетарная реализация этой ФС поддерживает шифрование. Открытая реализация с версией пула 28 это не поддерживает — но ничто не мешает с помощью cryptsetup создать том (или несколько томов) LUKS и уже поверх них разворачивать пул. Что до отказоустойчивости ZFS, поддерживается создание мультидисковых массивов. Технология эта называется RAIDZ. Различные ее варианты позволяют пережить отказ от одного до трех дисков, и она, в силу некоторых особенностей ZFS, свободна от одного из фундаментальных недостатков традиционных stripe + parity RAID-массивов — write hole (ситуация с RAID 5 / RAID 6, когда при активных операциях записи и отключении питания данные на дисках в итоге отличаются).

Шифрование замедляет работу с данными. Не стоит его использовать на старых компьютерах.

Конечно, проще всего, если у тебя не стоит никакой системы — в этом случае заморачиваться придется меньше. Но живем мы не в идеальном мире, поэтому расскажу о том, как перенести уже установленную систему без раздела /boot на массив RAIDZ поверх томов LUKS.

Перво-наперво нужно создать сам этот раздел — без него перенос будет невозможен, поскольку система банально не загрузится. Предположим для простоты, что на диске имеется единственный раздел с Ubuntu, а хотим мы создать RAIDZ первого уровня (аналог RAID 5, для него требуется минимум три устройства, RAIDZ же больших уровней в домашних условиях смысла делать я не вижу). Создаем с помощью предпочитаемого редактора разделов два раздела — один размером 256–512 Мб, где и будет размещен /boot , и еще один, с размером не меньше текущего корневого, причем последнюю процедуру повторяем на всех трех жестких дисках. Перечитаем таблицу разделов командой

и создадим файловую систему (ext3) на разделе поменьше:

Разумеется, в твоем случае идентификаторы жестких дисков будут другими. Вслед за этим нужно зашифровать раздел, на котором будет находиться том LUKS, и повторить эту процедуру для всех остальных разделов, на которых в конечном счете будет находиться массив RAIDZ:

Чтобы не запутаться, рекомендую использовать один и тот же пароль. Но если твоя паранойя против — ничто не мешает использовать разные.

Подключаем зашифрованные тома:

И создаем пул ZFS:

Следом создаем две вложенные друг в друга файловые системы:

Отмонтируем все файловые системы ZFS и устанавливаем некоторые свойства ФС и пула:

Наконец, экспортируем пул:

ZFS c RAIDZ поверх криптотома, подмонтированная в качестве корневой ФС Список снапшотов ZFS

Сначала копируем каталог /boot на нешифрованный раздел, чтобы следом установить туда загрузчик:

После этого перенесем grub на отдельный раздел /boot , для чего добавим в /etc/fstab cтрочку

Монтируем и перегенерируем конфиг grub:

Для проверки перезагружаемся. Если все нормально, удаляем старое содержимое каталога /boot , не забыв предварительно отмонтировать раздел.

Пришло время клонировать Ubuntu. Весь процесс клонирования описан в полной версии статьи, которую можно найти на сайте ][, здесь же затрону некоторые тонкости, относящиеся к ZFS. Для нормальной загрузки с пула ZFS нужны некоторые скрипты initramfs. К счастью, изобретать их не нужно — они лежат на GitHub. Скачиваем репозиторий (все действия производим в chroot):

И копируем файлы в необходимые места. Я внес единственную правку: вместо пула rpool поставил zroot. Теперь нужно записать hostid в файл /etc/hostid . Это нужно сделать из-за того, что ZFS портирована с Solaris, и слой совместимости требует его наличия:

Наконец, нужно сгенерировать initramfs. Ни в коем случае не используй update-initramfs . Он перезаписывает существующий файл, и, если возникнут трудности, загрузиться с нормальной системы будет проблематично. Вместо него используй команду

Раздел /boot должен быть подмонтирован.

Затем нужно добавить пункт меню в grub. По причине достаточно хитрой конфигурации (еще бы: три криптотома, поверх которых расположена не совсем типичная для Linux файловая система) в chroot это сделать не получилось, поэтому выходим из него в основную (пока еще) систему и добавляем примерно такие строчки:

Запускаем update-grub , перезагружаемся, выбираем новый пункт меню и радуемся.

Содержимое initramfs для поддержки ZFS

Содержимое initramfs для поддержки ZFS

В большинстве случаев домашние пользователи не настраивают свои ФС. Однако параметры по умолчанию ZFS отнюдь не всегда подходят для применения в домашних условиях. Существуют также довольно интересные возможности, использование которых требует определенных навыков работы с данной файловой системой. Далее я опишу как тонкую подстройку ZFS под домашние нужды, так и эти возможности.

В случае же использования Btrfs никаких особых проблем не наблюдается. Тем не менее какие-то тонкости все же имеют место — в особенности если есть желание не просто «поставить и забыть», а задействовать новые возможности. О некоторых из них я и расскажу ниже.

Отключение изменения времени доступа к файлам и оптимизация для SSD-накопителей

Как известно, в *nix-системах каждый раз при обращении к файлам время доступа к ним меняется. Это всякий раз провоцирует запись на носитель. Если ты работаешь одновременно с множеством файлов или у тебя SSD-накопитель, это может оказаться неприемлемым. В классических файловых системах для отключения записи atime нужно было добавить параметр noatime в опции команды mount или в /etc/fstab . В ZFS же для отключения используется следующая команда (конечно, в твоем случае ФС может быть другой):

В Btrfs, помимо вышеупомянутой опции noatime, имеется опция ssd и более оптимизирующая ssd_spread. Первая из них начиная с ядра 2.6.31, как правило, устанавливается автоматически, вторая предназначена для дешевых SSD-накопителей (ускоряет их работу).

ZFS — дублирование файлов

При работе с очень важными данными порой возникает пугающая мысль, что отключат электроэнергию или выйдет из строя один из жестких дисков. Первое в российских условиях очень даже возможно, а второе хоть и маловероятно, но тоже случается. К счастью, разработчики ZFS, по-видимому, сталкивались с подобным не раз и добавили опцию дублирования данных. Файлы при этом, если возможно, размещаются на независимых дисках. Предположим, у тебя есть ФС zroot/HOME/home-1310 . Для установки флага дублирования набери следующую команду:

Более того, если двух копий покажется недостаточно, можно указать цифру 3. В этом случае выполняется тройное резервирование и, если откажут два жестких диска из трех, на которых лежат эти копии, ZFS все равно восстановит их.

Отключение автомонтирования в ZFS

При подключении пула по умолчанию автоматом монтируются все вложенные файловые системы. Это может вызвать некоторый конфуз, поскольку, например, в случае с приведенной выше конфигурацией пользователю не нужен доступ ни к zroot , ни к zroot/ROOT . Существует возможность отключить автомонтирование с помощью двух следующих команд (для данного случая):

Сжатие данных

ZFS поддерживает также и сжатие данных. На шифрованных томах это имеет смысл разве что для увеличения энтропии (и то не факт), но вообще для медленных носителей сжатие позволяет повысить производительность и может достаточно ощутимо сэкономить место на диске. В то же время сейчас, когда емкость винчестеров уже измеряется терабайтами, экономить место вряд ли кому-то особо нужно, а на производительности и расходе оперативной памяти это сказывается больше. Если же тебе это нужно, включить его можно следующим образом:

В Btrfs для включения сжатия нужно поставить опцию compress в /etc/fstab .

Автоматическое создание снапшотов в ZFS

Как известно, ZFS позволяет создавать снапшоты. Ручками, однако, их создавать лениво, да и есть вероятность попросту забыть об этом. В Solaris для автоматизации этой процедуры имеется служба Time Slider, но она — вот незадача! — хоть и использует функции ZFS, в ее состав не входит, поэтому в ZFSonLinux ее нет. Но огорчаться не стоит: имеется скрипт для автоматического их создания и для Linux. Скачаем его и установим нужные права:

Изменим сперва префикс для снапшотов, поскольку по умолчанию он не особо «говорящий». Для этого изменим в скрипте параметр opt_prefix с zfs-auto-snap на snapshot . Затем установим некоторые переменные файловой системы:

Первый параметр нужен для скрипта, второй же открывает прямой доступ к снапшотам, что тоже нужно для скрипта.

Теперь можно уже создавать скрипт для cron ( /etc/cron.daily/autosnap ). Рассмотрим случай, когда нужно создавать снапшоты каждый день и хранить их в течение месяца:

Для просмотра созданных снапшотов используй команду zfs list -t snapshot , а для восстановления состояния — zfs rollback имя_снапшота .

ZFS — комплексный пример

Ниже будут приведены команды, создающие несколько ФС в пуле для разных целей и демонстрирующие гибкость ZFS.

Дефрагментация Btrfs

Дефрагментация в Btrfs не столь уж необходима, но в отдельных случаях позволяет освободить занятое пространство. Она может быть проведена только на смонтированной системе. Замечу, что доступ к данным во время дефрагментации сохраняется — как на чтение, так и на запись. Для запуска процедуры дефрагментации используй следующую команду:

На старых ядрах эта процедура удаляла все COW-копии, такие как снапшоты и дедуплицированные данные, так что, если ты их используешь на ядрах старше 2.6.37, дефрагментация тебе только навредит.

RAID на Btrfs

Как и в случае с ZFS, Btrfs поддерживает многотомные массивы, но в отличие от ZFS называются они классически. На данный момент, однако, поддерживаются только RAID 0, RAID 1 и их комбинация, RAID 5 по-прежнему на этапе альфа-тестирования. Для создания нового массива RAID 10 попросту используй такую команду (с твоими устройствами):

Ну а если нужно сконвертировать существующую ФС в RAID, то и для этого есть команды:

Первая команда добавляет устройства к файловой системе, вторая же как раз и перебалансирует все данные и метаданные для преобразования этого набора томов в массив RAID 10.

Снапшоты Btrfs

Естественно, Btrfs поддерживает снапшоты — причем помимо обычных снапшотов доступны снапшоты с возможностью записи (более того, они и создаются по умолчанию). Для создания снапшотов используется следующая команда:

Подробнее о создании снапшотов, как ручном, так и автоматическом, можно прочитать в статье «Подушка безопасности», опубликованной в апрельском номере ][ за 2013 год. Здесь же я расскажу, как при наличии снапшота отследить, какие файлы изменились с момента его создания. Для этого в Btrfs есть так называемое поколение файлов. Возможность эта используется для внутренних целей, но есть команда, позволяющая смотреть список последних изменений — ею и воспользуемся. Сначала узнаем текущее поколение файлов:

Если такого поколения нет (в чем можно практически не сомневаться), выведется последнее. Теперь эту же самую команду выполним над снапшотом:

Если поколения будут отличаться, а они будут, то смотрим, какие же файлы изменялись со времени создания снапшота. В моем случае команда была следующей:

Список последних измененных файлов в Btrfs Btrfs: состояние свежесконвертированного массива RAID 10

NILFS2 — еще одна файловая система с поддержкой COW

Начиная с ядра 2.6.30 в Linux появилась поддержка еще одной ФС — NILFS2. Аббревиатура эта расшифровывается как new implementation of a log-structured file system. Основная особенность данной ФС заключается в том, что раз в несколько секунд в ней автоматически создаются чек-пойнты — примерный аналог снапшотов с одним отличием: спустя какое-то время они удаляются сборщиком мусора. Пользователь, тем не менее, может преобразовать как чек-пойнт в снапшот, в результате чего для сборщика мусора он становится невидимым, так и наоборот. Таким образом, NILFS2 можно рассматривать как своеобразную «Википедию», где фиксируются любые изменения. Из-за этой особенности — писать любые новые данные не поверх существующих, а в новые блоки — она прекрасно подходит для SSD-накопителей, где, как известно, перезапись данных не приветствуется.

Да, NILFS2 не настолько известна, как ZFS или Btrfs. Но в некоторых случаях ее применение будет более оправданным.

Может быть, я покажусь субъективным, но ZFS, если ее сравнивать с Btrfs, выигрывает. Во-первых, некоторые возможности Btrfs до сих пор находятся в зачаточном состоянии, несмотря на то, что ей уже более пяти лет. Во-вторых, ZFS, при прочих равных условиях, более обкатана. И в-третьих, как просто инструментов для работы с ZFS, так и ее возможностей больше.

С другой стороны, как бы ни была хороша ZFS, по лицензионным соображениям она вряд ли когда-нибудь будет включена в mainline kernel. Так что, если не появится какой-нибудь еще конкурент, придется пользоваться Btrfs.

Facebook и Btrfs

В ноябре 2013 года лидер команды разработчиков Btrfs Крис Мейсон перешел на работу в Facebook. Это же сделал и Джозеф Бацик, мейнтейнер ветки btrfs-next. Они вошли в состав отдела компании, специализирующегося на низкоуровневых разработках, где и занимаются ныне ядром Linux — в частности, работают над Btrfs. Разработчики заявили также, что Facebook заинтересована в развитии Btrfs, так что причин волноваться у сообщества нет решительно никаких.

В наши дни все большей и большей популярности набирают файловые системы следующего поколения, которые имеют более широкую функциональность, чем в обычных файловых системах. Одни из таких файловых систем - это Btrfs и ZFS, Обе они уже стали достаточно стабильными и активно применяются пользователями. Для многих пользователей очень важна сохранность данных, и такие файловые системы могут обеспечить ее наилучшим образом.

В одной из предыдущих статей мы рассматривали файловую систему Btrfs. В нашей сегодняшней статье мы остановимся на ZFS, эти файловые системы похожи по своему применению и назначению, но имеют некоторые отличия. Мы рассмотрим как установить эту файловую систему в вашем дистрибутиве, настроить ее и использовать для решения повседневных задач.

Что такое ZFS?

Файловая система ZFS имеет обычные для таких файловых систем возможности. Это просто огромный размер одного раздела, и размер файла, поддерживается возможность хранения файлов на нескольких устройствах, проверка контрольных сумм для данных и шифрование на лету, а также запись новых данных в режиме COW, когда данные не переписываются, а пишутся в новое место, что позволяет делать мгновенные снапшоты.

Возможности очень похожи на Btrfs, но есть кое-какие отличия. В Btrfs можно посмотреть все файлы, измененные с момента последнего снапшота. Второе отличие, это отсутствие в Btrfs логических блоков zvol.

Установка ZFS

В последних версиях Ubuntu файловая система ZFS была добавлена в официальный репозиторий и в установочный диск. Поэтому для того, чтобы ее установить будет достаточно выполнить несколько команд:

sudo apt install -y zfs

В других дистрибутивах. например, CentOS или Fedora ситуация немного сложнее, сначала вам придется добавить официальный репозиторий, а затем установка zfs и самого набора утилит и модулей ядра:


Затем осталось включить загрузить модуль ядра с поддержкой этой файловой системы:

sudo modprobe zfs

Теперь файловая система установлена и готова к использованию. Дальше нам нужно выбрать разделы и создать на них файловые системы. Для настройки zfs используется утилита zpool, но для начала давайте рассмотрим ее синтаксис и возможности. Файловая система может быть расположена на нескольких разделах или жестких дисках, поэтому на уровне ядра формируется общий пул (куча), а к нему уже подключаются разделы. Тут можно провести аналогию с группой томов LVM.

Команда zpool

Это основной инструмент управления разделами и функциональными возможностями ZFS, поэтому вам важно его освоить. Общий синтаксис команды достаточно прост, но у нее есть множество подкоманд, которые имеют свой синтаксис и параметры:

$ zpool команда параметры опции устройства

Как я уже сказал, параметры и опции для каждой команды свои, а в качестве устройства может указываться пул или физический раздел на жестком диске. Теперь рассмотрим основные команды и их предназначение, чтобы вы могли немного ориентироваться, а более детальные параметры разберем уже на примерах:

Это были все основные опции команды, которые мы будем использовать. Теперь рассмотрим примеры настройки zfs и управления разделами.

Как пользоваться ZFS

Настройка ZFS не очень сильно отличается от Btrfs, все базовые действия выполняются очень просто, вы сами в этом убедитесь.

Создание файловой системы

Сначала посмотрим есть ли уже созданные пулы ZFS. Для этого выполните такую команду:

sudo zpool list


Если вы устанавливаете эту файловую систему в первый раз, то здесь будет пустой список. Теперь создадим пул на основе существующего раздела, мы будем использовать раздел /dev/sda6

sudo zpool create -f pool0 /dev/sda6


Хотя вы можете использовать не только раздел, а целый диск. Теперь смотрим еще раз список пулов:

sudo zpool list


Затем смотрим состояние нашего пула с помощью команды status, здесь выводится больше подробной информации. Если у вас есть несколько дисков, вы можете настроить RAID массив, чтобы данные хранились не на одном разделе, а синхронно копировались на несколько, это может в несколько раз увеличить производительность.

sudo zpool create pool0 zraid /dev/sda /dev/sdb /dev/sdc

Обратите внимание, что диски должны иметь одинаковый раздел. Если вам не нужен RAID, вы можете настроить обычное зеркалирование на второй диск. Это увеличивает надежность хранения данных:

sudo zpool create pool0 mirror sda sdb

Теперь данные будут писаться на оба диска. Такую же вещь можно проделать с разделами, но здесь нет смысла, поскольку если жесткий диск накроется, то данные вы потеряете, а прироста производительности не увидите. Вы можете использовать даже файлы, для создания файловых систем.

Вы можете добавить новый жесткий диск или раздел к пулу:

sudo zpool attach pool0 /dev/sdd

Или удалить устройство из пула:

sudo zpool detach pool0 /dev/sdd

Чтобы удалить пул используйте команду destroy:

sudo zpool destroy pool0

Для проверки раздела на ошибки используйте команду scrub:

sudo zpool scrub pool0


Статистику использования пула можно посмотреть с помощью команды iostat:

sudo zpool iostat pool0


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

Теперь нужно создать файловые системы на только что созданном пуле. Создадим три файловые системы, data, files и media. Для этого используется команда zfs:

sudo zfs create pool0/data
$ sudo zfs create pool0/files
$ sudo zfs create pool0/media


Файловые системы готовы, дальше рассмотрим монтирование zfs.


Монтирование ZFS

Точка монтирования для пула и для каждой созданной в нем файловой системы создается в корневом каталоге. Например, в нашем случае точки монтирования выглядят так:


Или можно использовать такую команду:

Чтобы размонтировать файловую систему для одного из созданных разделов используйте команду zfs umount:

sudo zfs umount /pool0/data


Затем можно ее обратно примонтировать:

sudo zfs mount pool0/data


Параметры файловой системы

Кроме всего прочего, вы можете настроить различные параметры файловой системы ZFS, например, можно изменить точку монтирования или способ сжатия. Вы можете посмотреть все текущие параметры для файловой системы или пула с помощью команды:

sudo zfs get all pool0/files


Сначала включим сжатие:

sudo zfs set compression=gzip pool0/files

Затем отключим проверку контрольных сумм:

sudo zfs set checksum=off pool0/files

Смотрим точку монтирования:

sudo zfs get mountpoint pool0/files

Затем установим свою:

sudo zfs set mountpoint=/mnt pool0/files


Теперь раздел будет монтироваться в /mnt, настройки можно изменить для каждого из разделов.

Снимки состояния ZFS

Снапшоты zfs или снимки состояния могут использоваться восстановления данных. Благодаря особенностям файловой системы снимки можно создавать мгновенно. Для создания снимка просто наберите:

sudo zfs snapshot pool0/files pool0/files@shot1

Для восстановления используйте:

sudo zfs rollback pool0/files@shot1

Посмотреть список снимков вы можете командой:

sudo zfs list -t snapshot

А удалить ненужный снимок:

sudo zfs destory pool0/files@shot1

Выводы

В этой статье мы рассмотрели как работает файловая система zfs, как выполняется настройка zfs и как ее использовать. Это очень перспективная файловая система, с огромным набором функций, которая способна сравняться, а в некоторых областях и обойти Btrfs. Надеюсь, эта информация была полезной для вас, если у вас остались вопросы, спрашивайте в комментариях!


В результате многие в предприятии клянутся им в верности и используют его для размещения триллионов байтов данных.

Несмотря на свою популярность, пользователи Linux не смогут наслаждаться этим из коробки.

Вместо этого те, кто хочет проверить это и использовать его в качестве основной файловой системы хранилища, должны будут установить его.

Установка ZFS немного отличается от других файловых систем, и в зависимости от того, что вы используете, может потребоваться небольшое ноу-хау.

Если вы новичок в этой файловой системе, лучше всего идти по маршруту Ubuntu.

Начиная с Ubuntu 16.04, Canonical упрощает работу с ZFS.

Примечание. Хотя можно использовать ZFS для одного жесткого диска, это не очень хорошая идея, и вы, вероятно, пропустите все функции, которые делают эту файловую систему отличной.

Точкой файловой системы является создание избыточности, путем растяжения данных на нескольких жестких дисках.

Прежде чем продолжить, убедитесь, что у вас более 1 жесткого диска для ZFS.

Настройка ZFS

Файловая система ZFS работает, объединяя множество разных жестких дисков вместе, чтобы создать один большой центр хранения.

Создание новой файловой системы ZFS немного сложнее, чем просто открытие редактора разделов Gparted.

Вместо этого вам нужно будет взаимодействовать с ним на уровне командной строки. В

окне терминала запустите команду lsblk. Запуск команды «list block» выведет все накопители на вашем ПК Linux.

Пройдите и решите, какие жесткие диски использовать для вашего Z-пула, и помните имена. В этом учебнике наши три диска в пуле ZFS: /dev/sdb, /dev/sdc и /dev/sdd.

Затем вам нужно полностью обнулить жесткие диски, выбранные для Z-пула, чтобы у них больше не было данных. Используя команду dd, перезапишите каждый из дисков. Это займет некоторое время.

Примечание: измените /dev/sdX с идентификатором диска, найденным с помощью команды lsblk (sdb и т. д.).

Когда dd закончит работу, запустите команду fdisk.

Запуск fdisk покажет много информации о жестких дисках, включая информацию о файловой системе для каждого.

Просмотрите показания и убедитесь, что ни один из дисков, которые вы удалили, не имеет файловой системы.

Этот шаг имеет решающее значение, поскольку ZFS не использует традиционный формат разбиения.

Если вывод fdisk выглядит хорошо, безопасно создайте новый Z-poll ZFS.

Для базовой настройки Z-пула выполните следующие действия:

Базовая установка позволит большинству пользователей удовлетворить свои потребности в хранилищах.

Однако те, которые ценят свои данные и нуждаются в защите, не должны идти по пути установки с такой базовой настройкой.

Вместо этого подумайте о создании пула ZFS с RaidZ.

Использование RaidZ в сочетании с вашим ZFS-пулом гарантирует, что ваши данные будут избыточными, с множеством резервных копий.

Чтобы создать пул ZFS с RaidZ, запустите:

Чтобы добавить файлы в новый пул хранения ZFS, откройте диспетчер файлов и перейдите в корень файловой системы.

Поместите файлы внутри папки с именем ZFS Zpool.

Добавить диски в ZFS Zpool

ZFS предназначен для хранения большого количества данных, но это не значит, что ваши оригинальные диски не будут заполняться.

Наступит время, когда потребуется больше места для хранения.

К счастью, поскольку ZFS не использует разделы, добавление большего количества хранилища в систему прост.

В этом примере мы добавим еще два диска в Zpool (/dev/sde и /dev/sdf).

Примечание: если ваша установка ZFS не использует RaidZ, удалите ее из команды.

Удалить пул ZFS

Зачастую объемы ZFS ломаются и становятся непригодными.

Когда это произойдет, вам может потребоваться удалить пул хранения.

Чтобы удалить пул хранения, откройте терминал и используйте команду zfs destroy.

Запуск zpool destroy занимает довольно много времени, в зависимости от того, сколько данных находится в вашем пуле хранения.

Вы узнаете, что Zpool полностью уничтожен, когда терминал снова будет доступен для использования.

Проверить статус ZFS

Быстрый способ проверить статус вашего Zpool с помощью команды zpool status.

С его помощью пользователи могут видеть базовое считывание тома ZFS, как он это делает и имеются ли какие-либо ошибки.


ZFS (Zettabyte File System) — файловая система, разработанная компанией Sun Microsystems и обладающая такими характеристиками как возможность хранения больших объёмов данных, управления томами и множеством других. Первоначально файловая система была разработана для ОС Solaris, но впоследствии перенесена на ряд других операционных систем, в том числе на FreeBSD и Mac OS X.

Файловая система ZFS распространяется с открытым кодом по opensource-лицензии CDDL (несовместимой с GPL).

Появление ZFS наделало много шума, и до сих пор эта файловая является предметом горячих обсуждений. Причин у такой популярности несколько, в первую очередь:

  • Большие технические возможности файловой системы, в частности возможность хранения огромных объёмов данных и интеграция возможностей управления томами, квот, резервирования и контроля целостности данных в саму файловую систему.
  • Факт уже выполненного её портирования на несколько платформ и продолжение портирования на другие на фоне запрета на портирование на Linux.

Содержание

Технические возможности ZFS

Возможности, аналогичные возможностям ZFS, по отдельности встречаются в других открытых технологиях и системах, в частности в Linux RAID, LVM, EVMS, XFS, Reiser4 и других. Однако, стоит отметить, что в настоящее время нет системы, которая одновременно включала бы в себя все те возможности, что есть у ZFS (это даёт, с одной стороны, повод говорить, что ZFS, пытаясь реализовать побольше возможностей, для которых можно использовать отдельные инструменты, противоречит unixway, и с другой стороны, говорить о лучшей интегрированности этих возможностей между собой внутри одной системы).

Хранение больших объёмов данных

Файловая система ZFS позволяет адресовать

Существует расхожее утверждение, что хранение такого большого объёма информации на физических носителях потребует столько энергии, что для того чтобы её получить потребовалось бы преобразовать в энергию (не испарить!) всю воду Мирового океана.

Существуют и другие, более серьёзные физические ограничения на организацию хранилища такого объёма. С ними можно ознакомиться на странице [1].

Таким образом, можно предположить, что ZFS может хранить объёмы информации, которые превышают все мыслимые при условии сохранения подхода к организации хранения (и при условии, что устройства хранение информации на ZFS не уйдут далеко за пределы Солнечной системы :).

С другой стороны, возможность хранения столь больших объёмов информации (что заведомо невозможно по другим причинам, в том числе фундаментальным ограничениям) можно рассматривать и как недостаток системы.

Следует отметить, что современные 64-битные файловые системы также предоставляют возможность хранения значительных объёмов информации, и этих возможностей должно хватить на ближайшие годы.

(1EiB = 2^20TiB ≈ 10^6 TiB)

Снапшоты и пулы хранения

В ZFS встроены возможности по управлению снапшотами (snapshots) и пулами хранения (storage pools), что позволяет обойтись без системы управления томами, такой как LVM и использовать одни только возможности файловой системы.

Интеграция системы управления томами и файловой системы даёт дополнительную гибкость, что в свою очередь даёт:

  • лёгкость создания клонов;
  • возможность создания online-снапшотов;
  • гибкое распределение пространства между файловыми системами, входящими в пул;
  • возможность использования квот для ограничения потребления внутри пула;
  • легковесное создание файловой системы (создание новой файловой системы по трудоемкости для операционной системы соизмеримо с созданием каталога).

Если говорить в общем, то возможности ZFS превышают аналогичные возможности системы управления томами LVM, однако в сравнении с EVMS, в некоторых вопросах она проигрывает.

Контроль целостности данных с помощью контрольных сумм

Традиционные файловые системы предполагают, что устройства, на которых они расположены, надёжны и в дополнительном контроле не нуждаются. ZFS исходит из того что устройство может ошибаться, и дополнительно контролирует блоки данных с помощью 256-битных контрольных сумм.

Если сбой обнаружен на блоке RAIDZ или отзеркалированном разделе, он автоматически восстанавливается.

Другие преимущества

Файловая система ZFS обладает и другими преимуществами, в числе которых:

  • прозрачная возможность избирательного сжатия файлов;
  • встроенная возможность избирательного шифрования файлов (пока в процессе разработки).

Портирование ZFS

Первоначально файловая система ZFS была разработана для Solaris.

В настоящий момент портирование выполнено:

  • на операционную систему FreeBSD;
  • на операционную систему Mac OS X;
  • на операционную систему NetBSD (частично);
  • часть кода интегрирована в загрузчик GRUB.

Портирование ZFS на FreeBSD и интеграция портированного кода ZFS в CVS FreeBSD была выполнена в апреле 2007 года. Портирование завершено не полностью: есть ряд функций, которые порт ZFS на FreeBSD не поддерживает. Это связано как с самим портом, так и с отсутствием необходимых возможностей у FreeBSD.

Было также выполнено портирование ZFS на Mac OS X. Сейчас ZFS для Mac OS X доступна в самой операционной системе (начиная с 10.5), но только в режиме readonly, и в виде дополнительного программного обеспечения, которое даёт возможность использования ZFS в режиме чтение/запись.

В качестве одного из проектов Google Summer of Code 2007 было начато портирование ZFS на NetBSD. Портирование не завершилось, и проект продолжился в 2009 году в рамках очередного Google Summer of Code [2]. Промежуточные результаты доступны в виде архива неработающего кода [3], но работа продолжается [4].

Кусок кода ZFS открыт по GPL, и интегрирован в загрузчик GRUB, для того чтобы GRUB мог выполнять загрузку с ZFS-раздела.

Всё это происходит на фоне запрета портирования ZFS на Linux.

Формально, портирование на Linux выполнить нельзя по причине несовместимости лицензии CDDL, по которой распространяется ZFS, и лицензии GPL, по которой распространяется ядро Linux, а также патентных запретов, защищающих ZFS.

Существует несколько (теоретически) возможных способов выйти из сложившейся ситуации и добиться того чтобы ZFS работала под ядром Linux:

  1. Sun выпустит ZFS под двумя лицензиями, одной из которых будет GPL.
  2. Linux изменит свою лицензию (это возможно только при условии согласия всех сделавших вклад в ядро, вероятность чего стремится к нулю).
  3. Судебные решения (различных государств) разрешат использовать модули ядра Linux, несовместимые с GPL, вместе с ядром Linux.
  4. ZFS будет реализована под Linux повторно с нуля.

Последний вариант наиболее вероятен, однако, не исключено, что он противоречит патентным ограничениям, в связи с многочисленными патентами, которые Sun имеет в отношении ZFS.

Периодически возникают волны обсуждения первого варианта, так, например, одно из последних бурных обсуждений было вызвано появлением в блоге Джеффа Бонвика (Jeff Bonwick, CTO of Storage Technologies in Sun Microsystems) фотографий, где они беседуют с Линусом Торвальдсом на территории Джеффа [5]. Широкая общественность восприняла это как сигнал, сообщающий о возможности портирования ZFS на Linux. Ведь что ещё может связывать этих людей?

Существует ещё возможность нелегитимного портирования ZFS под Linux и дальнейшее использование порта вопреки лицензионным и патентным ограничениям. Тем не менее, маловероятно, что если такой порт даже и будет сделан, он будет включен в mainstream-ядро.

Кроме всего прочего, можно использовать ZFS под Linux через FUSE, когда код файловой системы не интегрируется с ядром, а запускается в пространстве пользователя (userlevel) и работает через интерфейс FUSE. Такой способ, хотя и даёт возможность поэкспериментировать с файловой системой, но не может рассматриваться как возможная альтернатива при полновесном использовании ZFS на производственных серверах.

Многочисленные высказывания по поводу невозможности запуска ZFS под Linux и конфликта лицензий CDDL и GPL сводятся преимущественно к двум полярным:

В действительности аргументов и позиций значительно больше, а вышеприведённые утверждения лишь приблизительно отражают аргументацию сторон.

Пример использования ZFS

Для того чтобы оценить возможности ZFS (или поэкспериментировать с ней, если есть возможность) ниже приводится ряд команд по работе с файловой системой.

Ознакомиться с документацией

Создать несколько виртуальных устройств (virtual device, vdev). На месте этих файлов могут быть обычные дисковые разделы.

Создать пул и посмотреть информацию о нём.

Получить развёрнутую информацию о пуле

Создать зеркалированный пул.

Отключить устройство от зеркалированного пула:

Подключить устройство к пулу. Если пул раньше не был зеркальным, он превращается в зеркальный. Если он уже был зеркальным, он превращается в тройное зеркало.

Добавить запасное устройство горячей замены (hot spare) к пулу.

Удалить запасное устройство горячей замены из пула:

Вывести указанное устройство из эксплуатации (offline). После этого попыток писать и читать это устройство не будет до тех пор, пока оно не будет переведено в online. Если использовать ключ -t, устройство будет переведено в offline временно. После перезагрузки устройство опять будет в работе (online).

Перевести указанное устройство в online:

Заменить один диск в пуле другим (например, при сбое диска):

Выполнить скраббинг (scrubbing) пула для того чтобы знать, что там все контрольные суммы верны. Если используется зеркало или RAIDZ автоматически восстанавливаются сбойные блоки.

при скраббинге очень активный ввод/вывод

Экспортировать пул из системы для импорта в другую систему.

Импортировать ранее экспортированный пул. Если ключ -d не указан, команда ищет /dev/dsk. Поскольку в нашем примере используются файлы, нужно указать каталог, используемый пулом:

Пулы работают на версии 8:

Показать версию формата пулов. Ключ -v говорит, что нужно показать какие функции поддерживаются текущей версией. Ключ -a говорит, что нужно обновить до последней версии. Пулы не будут доступны в системах, работающих с более низкой версией.

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

Показать список всех файловых систем ZFS:

Попытка добавить отдельный vdev к зеркалированному множеству (set):

Создание ещё одной файловой системы. Обратите внимание, что обе файловые системы как будто бы имеют 159M свободных, ибо квоты не установлены. Каждая может расти до тех пор, пока не заполнит пул:

Зарезервировано 20M для одной файловой системы, что гарантирует что остальные не заполнят всё место:

Установить и посмотреть квоты:

Включить сжатие и проверить, что оно включилось:

Создать снапшот (snapshot, снимок) test:

Откатиться на снапшот test:

Снапшот можно подмонтировать в обычном порядке:

Создание клона. Тип клона будет точно таким же как и у оригинала.

Уничтожить файловую систему:

Неудачная попытка удалить файловую систему, у которой есть дочерняя структура. В данном случае снапшот. Нужно или удалить снапшот или превратить его в клон.

После того как мы превратили снапшот в клон, он больне не зависит от своего источника. И его можно удалять:

Переименовать файловую систему и отдельно переименовать снапшот:

Показать свойства заданного датасета. Есть дополнительные опции.

Неудавшаяся попытка удалить пул с существующей и активной файловой системой:

Размонтировать смонтированную ранее файловую систему:

Смонтировать файловую систему. Обычно это делается при загрузке:

Посмотреть историю команд для всех пулов. Можно ограничить историю одним пулом, для этого надо указать его имя в командной строке. После того как пул уничтожен, его история теряется.

Уничтожить пул. Ключ -f говорит о том, что пул нужно удалить вместе с файловыми системами, которые в нём созданы.

Читайте также: