Стереть диск и использовать zfs что значит
Небольшое руководство по ZFS
Заметил, что на Хабре много статей про ZFS. И вот, решил написать краткое руководство, как же этой ZFS пользоваться. В качестве ОС буду рассматривать Solaris, т.к. ZFS изначально разрабатывалась для Соляры да и познакомился с ZFS я именно там. Понимаю, что мало у кого стоит Open Solaris на десктопе, а администраторы Solaris и так должны это знать. Но может кому и пригодится.
Немного терминологии
Собственно руковдство
В Solaris работа с ZFS идет в основном через 2 команды. Это zpool и zfs.
zpool — работа с пулами. Их создание, изменение, удаление и т.д.
zfs — работа с самой файловой системой.
Итак, из чего же можно создать пул? Да из чего угодно. От файлов под другой фс, до дисков в дисковом массиве.
Примеры создания пула MyPool
# Создание пула из файлов /zfs1/disk01 и /zfs1/disk02 созданных командой mkfile
zpool create MyPool /zfs1/disk01 /zfs1/disk02
# Создание пула используя обычный слайс
zpool create MyPool c1t0d0s0
# Создание пула c зеркалированием и использованием spare дисков.
zpool create MyPool mirror c1t0d0 c2t0d0 mirror c1t0d1 c2t0d1
zpool create MyPool mirror c1t0d0 c2t0d0 spare c3t0d0
NAME STATE READ WRITE CKSUM
MyPool ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
Изменение пула MyPool
#Добавление и удаление элементов (дисков) из пула, не использующего зеркалирование осуществляется с помощью команд:
zpool add MyPool /zfs1/disk3
zpool remove MyPool /disk3
#Добавление и удаление элементов (дисков) из пула, c зеркалированиеv осуществляется с помощью команд:
zpool attach MyPool /disk1 /disk3
zpool detach MyPool /disk1 /disk3
NAME STATE READ WRITE CKSUM
myzfs DEGRADED 0 0 0
mirror DEGRADED 0 0 0
/disk1 OFFLINE 0 0 0
/disk2 ONLINE 0 0 0
#И обратно online
zpool online MyPool /disk1
#Замена одного элемента пула на другой
zpool replace MyPool /disk1 /disk3
Создание и работа с файловой системой
#Создаем файловую систему
zfs create MyPool/systemname
#Резервируем место под свою файловую систему
zfs set reservation=20m MyPool/systemname
#Устанавливаем квоту для вашей файловой системы, которую вы не сможете превысить
zfs set quota=20m MyPool/systemname
#Включаем компрессию.
zfs set compression=on MyPool/systemname
#Расшариваем нашу файловую систему.
zfs set sharenfs=on MyPool/systemname в NFS
zfs set sharesmb=on MyPool/systemname в SMB
#Снимаем снапшот
zfs snapshot MyPool/systemname@hostname
#Так как снапшот — это просто снимок системы в данный момент, то иногда стоит создавать клона.
zfs clone MyPool/systemname@hostnameyPool/systemname2
Как видите, ничего сложного с ZFS на начальном этапе нет. Очень и очень гибкая штука.
Разбираемся с ZFS
Содержание статьи
В мире *nix-систем все более популярными становятся файловые системы ZFS и Btrfs. Популярность эта вполне заслуженна — в отличие от своих предшественников, они лишены некоторых проблем и имеют множество неоспоримых достоинств. А не так давно им присвоен статус стабильных. Все это и побудило написать данную статью.
WARNING!
Некоторые описываемые здесь команды способны необратимо уничтожить твои данные. Трижды проверяй введенное, прежде чем нажимать Enter.
Пожалуй, прежде чем перейти к практике, нужно дать некоторые пояснения, что собой представляют файловые системы нового поколения. Начну с ZFS. Эта ФС была разработана для Solaris и в настоящее время, поскольку Oracle закрыла исходный код, форкнута в версию OpenZFS. В дальнейшем под ZFS будет подразумеваться именно форк. Вот лишь некоторые из ключевых особенностей ZFS:
Btrfs начала разрабатываться в пику ZFS компанией Oracle — еще до покупки Sun. Я не буду описывать ее особенности — они в ZFS и Btrfs, в общем-то, схожи. Отличия же от ZFS таковы:
Далее будет описана как установка ZFSonLinux, так и некоторые интересные сценарии использования ZFS и Btrfs.
Знакомство с ZFSonLinux
Для установки ZFSonLinux потребуется 64-разрядный процессор (можно и 32, но разработчики не обещают стабильности работы в таком случае) и, соответственно, 64-разрядный дистрибутив с ядром не ниже 2.6.26 — я использовал Ubuntu 13.10. Памяти тоже должно быть достаточно — не менее 2 Гб. Предполагается, что основные пакеты, необходимые для сборки и компиляции модулей и ядра, уже установлены. Накатываем дополнительные пакеты и качаем нужные тарболлы:
Распаковываем оба архива, но сперва собираем SPL — слой совместимости с Solaris, а уж затем собственно ZFS. Отмечу, что, поскольку мы ставим свежайшую версию ZFSonLinux, DKMS (механизм, позволяющий автоматически перестраивать текущие модули ядра с драйверами устройств после обновления версии ядра) недоступен, и в случае обновления ядра придется собирать пакеты заново вручную.
Прежде чем компилировать ZFS, нужно поставить хидеры, заодно поставим и остальные свежесобранные пакеты:
Наконец, собираем и ставим ZFS:
Установку ZFS можно считать завершенной.
Установка нужных для компиляции ZFS пакетов
Linux для хакера
Перенос корневой ФС на ZFS с шифрованием и созданием RAIDZ
Предположим, ты хочешь получить безопасную, зашифрованную, но в то же время отказоустойчивую файловую систему. В случае с классическими ФС старого поколения тебе пришлось бы выбирать между шифрованием и отказоустойчивостью, поскольку эти вещи несколько несовместимы. В ZFS, однако, существует возможность «склеить» их между собой. Современная проприетарная реализация этой ФС поддерживает шифрование. Открытая реализация с версией пула 28 это не поддерживает — но ничто не мешает с помощью cryptsetup создать том (или несколько томов) LUKS и уже поверх них разворачивать пул. Что до отказоустойчивости ZFS, поддерживается создание мультидисковых массивов. Технология эта называется RAIDZ. Различные ее варианты позволяют пережить отказ от одного до трех дисков, и она, в силу некоторых особенностей ZFS, свободна от одного из фундаментальных недостатков традиционных stripe + parity RAID-массивов — write hole (ситуация с RAID 5 / RAID 6, когда при активных операциях записи и отключении питания данные на дисках в итоге отличаются).
Шифрование замедляет работу с данными. Не стоит его использовать на старых компьютерах.
Конечно, проще всего, если у тебя не стоит никакой системы — в этом случае заморачиваться придется меньше. Но живем мы не в идеальном мире, поэтому расскажу о том, как перенести уже установленную систему без раздела /boot на массив RAIDZ поверх томов LUKS.
и создадим файловую систему (ext3) на разделе поменьше:
Разумеется, в твоем случае идентификаторы жестких дисков будут другими. Вслед за этим нужно зашифровать раздел, на котором будет находиться том LUKS, и повторить эту процедуру для всех остальных разделов, на которых в конечном счете будет находиться массив RAIDZ:
Чтобы не запутаться, рекомендую использовать один и тот же пароль. Но если твоя паранойя против — ничто не мешает использовать разные.
Подключаем зашифрованные тома:
Следом создаем две вложенные друг в друга файловые системы:
Отмонтируем все файловые системы ZFS и устанавливаем некоторые свойства ФС и пула:
Наконец, экспортируем пул:
# zpool export zroot
ZFS c RAIDZ поверх криптотома, подмонтированная в качестве корневой ФС Список снапшотов ZFS
Перенос и конфигурация системы
Сначала копируем каталог /boot на нешифрованный раздел, чтобы следом установить туда загрузчик:
Монтируем и перегенерируем конфиг grub:
Пришло время клонировать Ubuntu. Весь процесс клонирования описан в полной версии статьи, которую можно найти на сайте ][, здесь же затрону некоторые тонкости, относящиеся к ZFS. Для нормальной загрузки с пула ZFS нужны некоторые скрипты initramfs. К счастью, изобретать их не нужно — они лежат на GitHub. Скачиваем репозиторий (все действия производим в chroot):
Раздел /boot должен быть подмонтирован.
Затем нужно добавить пункт меню в grub. По причине достаточно хитрой конфигурации (еще бы: три криптотома, поверх которых расположена не совсем типичная для Linux файловая система) в chroot это сделать не получилось, поэтому выходим из него в основную (пока еще) систему и добавляем примерно такие строчки:
Содержимое initramfs для поддержки ZFS
Тюнинг ZFS и полезные трюки c Btrfs
В большинстве случаев домашние пользователи не настраивают свои ФС. Однако параметры по умолчанию ZFS отнюдь не всегда подходят для применения в домашних условиях. Существуют также довольно интересные возможности, использование которых требует определенных навыков работы с данной файловой системой. Далее я опишу как тонкую подстройку ZFS под домашние нужды, так и эти возможности.
В случае же использования Btrfs никаких особых проблем не наблюдается. Тем не менее какие-то тонкости все же имеют место — в особенности если есть желание не просто «поставить и забыть», а задействовать новые возможности. О некоторых из них я и расскажу ниже.
Отключение изменения времени доступа к файлам и оптимизация для SSD-накопителей
В Btrfs, помимо вышеупомянутой опции noatime, имеется опция ssd и более оптимизирующая ssd_spread. Первая из них начиная с ядра 2.6.31, как правило, устанавливается автоматически, вторая предназначена для дешевых SSD-накопителей (ускоряет их работу).
ZFS — дублирование файлов
Более того, если двух копий покажется недостаточно, можно указать цифру 3. В этом случае выполняется тройное резервирование и, если откажут два жестких диска из трех, на которых лежат эти копии, ZFS все равно восстановит их.
Отключение автомонтирования в ZFS
Сжатие данных
ZFS поддерживает также и сжатие данных. На шифрованных томах это имеет смысл разве что для увеличения энтропии (и то не факт), но вообще для медленных носителей сжатие позволяет повысить производительность и может достаточно ощутимо сэкономить место на диске. В то же время сейчас, когда емкость винчестеров уже измеряется терабайтами, экономить место вряд ли кому-то особо нужно, а на производительности и расходе оперативной памяти это сказывается больше. Если же тебе это нужно, включить его можно следующим образом:
Автоматическое создание снапшотов в ZFS
Как известно, ZFS позволяет создавать снапшоты. Ручками, однако, их создавать лениво, да и есть вероятность попросту забыть об этом. В Solaris для автоматизации этой процедуры имеется служба Time Slider, но она — вот незадача! — хоть и использует функции ZFS, в ее состав не входит, поэтому в ZFSonLinux ее нет. Но огорчаться не стоит: имеется скрипт для автоматического их создания и для Linux. Скачаем его и установим нужные права:
Первый параметр нужен для скрипта, второй же открывает прямой доступ к снапшотам, что тоже нужно для скрипта.
Теперь можно уже создавать скрипт для cron ( /etc/cron.daily/autosnap ). Рассмотрим случай, когда нужно создавать снапшоты каждый день и хранить их в течение месяца:
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, так что причин волноваться у сообщества нет решительно никаких.
Особенности файловой системы ZFS
Казалось бы, объединив в единую архитектуру менеджер логических томов и концепцию файловой системы, можно существенно упростить управление дисковым массивом. На этом тривиальном принципе в 2005 году крупным производителем ПО Sun Microsystems и была основана во многом прорывная файловая система ZFS, интегрированная первоначально в ОС Solaris.
Zettabyte File System или ZFS — новейшая транзакционная файловая система, работающая с использованием механизма copy-on-write и оперирующая одновременно на нескольких уровнях абстракции данных.
Сейчас это продолжающий развиваться безопасный, масштабируемый и чрезвычайно удобный в администрировании опенсорсный инструмент.
Файловая система и менеджер томов ZFS отличаются в первую очередь целостностью данных и рядом встроенных функций хранения:
Принципы работы
ZFS предназначена для работы на одном сервере, потенциально с сотнями, если не тысячами подключенных накопителей. ZFS объединяет доступное хранилище и управляет всеми дисками как единым целым. Администратор может добавить в пул дополнительные накопители при необходимости повысить емкость. ZFS обладает высокой масштабируемостью и поддерживает работу с файлами размером до 16 эксбибайт.
ZFS сохраняет как минимум две копии метаданных каждый раз, когда данные записываются на диск. Метаданные включают в себя такую информацию, как:
Когда пользователь запрашивает доступ к файлу, алгоритм контрольной суммы выполняет вычисление, чтобы убедиться, что полученные данные соответствуют исходным битам, записанным на диск. Если контрольная сумма обнаруживает несоответствие, она помечает «битые» данные. В системах с зеркальным пулом хранения или RAID ZFS может получить верную копию с другого диска и восстановить поврежденную копию данных.
Условная copy-on-write файловая система создает точную копию блока данных в отдельном месте перед перезаписью исходного блока, для чего ей необходимо прочитать предыдущее значение блока. Файловая система с механизмом copy-on-write требует для каждой записи данных выполнения трех операций ввода-вывода — чтения, изменения и записи. Система редиректа, напротив, при записи требует только одной операции ввода-вывода, что способствует повышению эффективности и производительности системы.
ZFS — файловая система, пользующаяся спросом для сетевых систем хранения, использующих Network File System поверх файловой системы, а также в средах виртуальных серверов. Другой распространенный сценарий развертывания — это распределенные файловые системы, как, например, General Parallel File System (GPFS) или Lustre поверх ZFS для привязки дополнительных серверных узлов. Пользователи OpenStack могут развернуть ZFS в качестве базовой файловой системы для блочного хранилища Cinder и хранилища объектов Swift.
Ключевые особенности ZFS
Моментальные снимки. ZFS и OpenZFS могут создавать копии файловой системы в заданный момент времени буквально «на лету», поскольку система сохраняет все копии данных. Снимки представляют собой неизменяемые копии файловой системы, тогда как результаты клонирования системы можно изменять. Снапшоты интегрированы в загрузочные среды с ZFS на Solaris, что позволяет пользователям вернуться к любому состоянию системы, если что-то пойдет не так. Еще одно ключевое преимущество ZFS — это средство восстановления от программ-вымогателей.
Дедупликация. Встроенная в ZFS и OpenZFS функция дедупликации данных обеспечивает эффективность хранения за счет устранения избыточных данных. Файловые системы находят повторяющиеся данные, просматривая контрольную сумму блока, который может различаться по размеру. Пользователи также могут отключать встроенную дедупликацию при желании.
Отправка и загрузка снимков ZFS. ZFS и OpenZFS позволяют отправить моментальный снимок файловой системы на другой узел сервера, что открывает для пользователя возможность сохранять данные в отдельную систему для таких целей, как резервное копирование или перенос данных в облачное хранилище.
Безопасность. ZFS и OpenZFS поддерживают делегированные разрешения и детализированные списки управления доступом для управления тем, кто может выполнять административные задачи. Пользователи могут настроить ZFS как доступную только для чтения, поэтому данные нельзя будет изменить. Oracle также поддерживает шифрование в ZFS на Solaris.
Массивы RAID-Z в ZFS
Массив дисков RAID-Z позволяет хранить одни и те же данные в нескольких местах для повышения отказоустойчивости и производительности. Система восстанавливает данные на утерянном диске, используя информацию, хранящуюся на других дисках системы. Подобно RAID 5, в ZFS RAID-Z распределяет информацию параллельно по каждому диску, чтобы система хранения могла функционировать даже в случае выхода из строя одного диска. Однако в случае с RAID-Z чередующиеся данные представляют собой блок динамического объема.
Хоть RAID-Z обычно и сравнивают с RAID 5, некоторые операции он выполняет иначе: так, например, в RAID-Z известен так называемый «write hole effect», когда система не может определить, какие данные или блоки были записаны на диск по причине сбоя питания или внезапного прекращения работы системы. Вендоры, использующие традиционный RAID, обычно решают эту проблему при помощи источника бесперебойного питания или специального оборудования.
RAID-Z2 поддерживает потерю двух устройств хранения, аналогично RAID 6, а RAID-Z3 может выдержать потерю трех устройств хранения. Пользователи могут объединять диски в группы, как в обычном массиве RAID. Например, система с двумя группами по шесть дисков, настроенная как RAID-Z3, может выдержать потерю трех дисков в каждой группе.
Преимущества и недостатки ZFS
ZFS объединяет файловую систему и менеджер томов, поэтому пользователям не нужно использовать и изучать отдельные инструменты и наборы команд. ZFS бесплатно предлагает богатый набор функций и сервисов, так как он встроен в ОС Oracle — OpenZFS с открытым исходным кодом находится в свободном доступе. Файловую систему можно расширить, добавив диски в пул хранения. Традиционные файловые системы требуют изменения размера раздела диска для увеличения емкости, и пользователям зачастую требуется вспомогательный софт для управления томами.
Если распределенные файловые системы, в числе которых, например, GPFS и Lustre, можно масштабировать до нескольких серверов, то ZFS может работать только на одном сервере.
Богатый набор функций, предлагаемый ZFS, может усложнить использование и управление программным обеспечением. Такие функции, как встроенные алгоритмы контрольной суммы ZFS, могут потребовать дополнительной вычислительной мощности и негативно сказаться на производительности.
В сообществе Linux бытуют различные мнения о лицензировании в отношении распространения кода ZFS и бинарных модулей ядра. Например, производитель ПО Red Hat считает недопустимым распространять код, защищенный по CDDL, вместе с кодом, защищенным по общедоступной лицензии (GPL). Напротив, компания Canonical, распространяющая Ubuntu, пришла к выводу, что такой подход соответствует условиям лицензий CDDL и GPL.
ZFS и OpenZFS: в чем разница?
ZFS — файловая система, поддерживаемая компанией Oracle, тогда как OpenZFS — система с открытым исходным кодом. Обе они имеют общие корни, но последние несколько лет развиваются в разных направлениях: и Oracle, и сообщество разработчиков ПО добавили расширения и значительно улучшили производительность ZFS и OpenZFS соответственно. Обновления Oracle ZFS являются собственностью компании и доступны только в технологиях Oracle, тогда как обновления кода OpenZFS с открытым исходным кодом находятся в свободном доступе.
Список улучшений, которые Oracle внес в ZFS с 2010 года, включает:
В числе обновлений OpenZFS, внесенных сообществом разработчиков ПО с открытым исходным кодом:
Проблема лицензирования по-прежнему оставляет без встроенной поддержки ZFS Linux системы, однако это можно решить модификацией ядра одним из двух способов: путем динамической генерации модуля либо сборкой модуля ядра в бинарном виде.
Варианты использования
В каких же случаях в итоге следует прибегнуть к использованию ZFS, а когда стоит довольствоваться аппаратными решениями? Разберем на разных примерах.
Системный администратор среднего бизнеса тратит 20% своего времени на планирование, изменение, администрирование и ремонт дисковых массивов трех серверов. С ZFS это время сокращается вдвое.
Опытный пользователь имеет четырехдисковую рабочую станцию RAID-5. Вычисления четности делают настройку довольно медленной из-за большого количества операций записи небольших файлов. В итоге он переходит на ZFS и замечает прирост в производительности, поскольку вместо избыточных вычислений небольшие файлы просто зеркалируются.
У другого системного администратора есть диск, который частично вышел из строя. Наличие двух копий тома файловой системы позволит ему восстановить некоторые из своих последних личных данных, не рискуя их потерять безвозвратно.
Еще один пользователь настроил 18-дисковый массив SAS для работы в зеркальном режиме, каждая группа из девяти дисков содержит одну ветвь RAIDZ2. На одном из дисков отказала механика внутри гермоблока. Он удаленно деактивирует диск, заменяет его новым, активирует этот диск, а затем использует команду ZFS zpool replace для замены неисправного диска. ZFS автоматически восстанавливает данные на этом диске с нулевым временем простоя и минимальным влиянием на передачу данных или производительность массива.