стереть диск и использовать 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 on CentOS: работа над ошибками
Так как я довольно давно использую ZFS (ещё со времён OpenSolaris), и очень доволен данной ФС в Linux, несмотря на её «неправославную» лицензию, то естественно прочитал свежую статью об установке данной ФС на CentOS.
Заметив в руководстве к свершению подвига несколько ошибок, решил не пройти мимо, как я это делаю обычно. К сожалению, в комментариях отвечать не могу, по совершенно очевидной причине.
Работа над ошибками, и некоторые полезные советы под катом.
1. Устанавливать ZFS поверх mdadm массива — это излишнее расточительство ресурсов ЦПУ и излишний дисковый ввод-вывод. ZFS сама прекрасно создаст RAID-0/1/5/6(z2)/z3.
2. При использовании GRUB2 совершенно нет никакого смысла в отдельном разделе для /boot. GRUB2, с указанным в статье фиксом, прекрасно грузит ОС, расположенную на ZFS, а также без всяких проблем может прочитать содержимое директории /boot, расположенной в корневой файловой системе.
О том, как это делается
На дисках (предположим, что их два) вам потребуется всего две партиции: одна для GRUB2, одна для дискового пула. Пример разбивки дисков (GPT без UEFI, если будете использовать UEFI, то тип партиции выставляйте соответственно):
Где diskpool — имя пула, естественно название можно выбрать по вкусу/схеме именования пулов.
Проверяем созданный pool так:
Увидим среди прочего:
Если дисков много (например 4-е), и Вам важна производительность, можно создать RAID-10:
При проверке статуса пула увидим:
Если у вас много дисков и вам нужен более ёмкий RAID:
raidz — RAID-5. Oдна P-сумма — по xor
raidz2 — RAID-6. Oдна P-сумма — по xor, одна Q-сумма — код рида-соломона на GF(2^8). GF не честное, оптимизировано для производительности, поэтому содержит 0 и не имеет право называться RAID-6, однако raidz2 рассчитывает Q сумму в 8 раз быстрее, чем RAID-6.
raidz3 — с тройной чётностью (ни разу не заглянул в исходники, чтобы проверить, что используется для создания 3-й суммы)
Создадим RAID5 на 4-х дисках:
При проверке пула увидим:
Создадим RAID6 на 5-ти дисках:
Создадим RAID-50 на 12-ти дисках:
Принцип очевиден — любые комбинации доступны. Можете в одном пуле комбинировать разные типы RAID, но никакого смысла в этом естественно нет, a есть ограничения:
1. ARC2 SSD cashe недоступен для пулов, в которых есть зеркало.
2. Смешение разного типа RAID-ов в одном пуле гарантирует непредсказуемость производительности пула (в самом худшем смысле — бутербродом вниз).
Раз уж я упомянул о SSD ARC2 cache:
При проверке пула увидим:
При создании пула можно указать дополнительные опции так:
Все опции кроме ashift и некоторых feature@ вы сможете поменять уже после создания пула.
Внимание! Если вы используете zfs версии 0.6.5 и выше, то обязательно при создании пула отключите следующие фичи:
feature@spacemap_histogram
feature@enabled_txg
feature@hole_birth
feature@extensible_dataset
feature@embedded_data
feature@bookmarks
feature@filesystem_limits
feature@large_blocks
Если они будут включены, то GRUB2 загрузиться с такой ФС пока не сможет. Это новые плюшки, о которых GRUB2 пока ничего не известно.
Итак, создадим пул со всеми нужными нам параметрами:
1. Создать файловые системы правильно
2. Указать пулу основную корневую систему и при желании альтернативную (очень удобная штука)
3. Установить GRUB2 на все диски пула
4. Прочее
После создания пула у вас по умолчанию есть файловая система, ассоциированная с пулом:
Если команда zfs list в колонке MOUNTPOINT для этой ФС содержит не «legacy», то это нужно немедленно исправить:
Вообще это и есть корневая файловая система, но использовать её мы не будем, а создадим отдельную виртуально-корневую ФС так:
Эта ФС тоже не имеет точки монтирования, а также содержит ряд полезных опций, которые будут унаследованы всеми созданными в последствии ФС (если вы не укажете других опций).
Опции atime=off и relatime=on значительно повысят производительность ФС, соответственно пожертвовав метками времени доступа к файлам.
Опция compression=lz4 включит на ФС «очень производительную» версию алгоритма сжатия lzjb. Где-то даже есть тесты, и, помнится, меня они впечатлили. Включать компрессию или нет — дело не только вкуса, но и комфорта в работе, а также очень сильно зависит от назначения ФС. Об этом, возможно, напишу в последующей статье.
Хотите поддержки utf8 в именах файлов и отсутствие неприятностей с мултиязычHblми наименованиями? Лучший выбор — опция utf8only=on.
Ну и поддержка xattr нужна однозначно (xattr=on). Появление поддержки POSIX ACL (опция acltype=posixacl) в ZFSonLinux я лично встретил как праздник (убейте, но не помню в какой версии добавили эту фичу).
Далее укажем пулу, что это и есть наша загрузочная ФС:
Далее следуем инструкциям оригинальной статьи, в разделе инсталляции OS, со следующими отличиями:
1. Не создаём отдельную ФС /boot и ничего в каталог /boot не монтируем
2. Никаких /etc/fstab пока не используем
3. Выполнение установки GRUB2 на диски стоит изменить следующим образом:
4. Перед тем как начнёте пересобирать initramfs, обязательно удалите /mnt/etc/zfs/zpool.cache.
Далее опять всё по инструкции.
Использовать алиасы дисковых устройств из каталогов /dev/disk/by-* вовсе не обязательно (каждый диск знает состав пула по wwn). Вы также можете отредактировать /etc/zfs/vdev_id.conf и дать дискам собственные названия с помощью опции alias:
Если используете multipath, в том же файле добавьте следующие опции:
Естественно, заменив PCI ID для HBA на свой собственный.
Если честно, то установку ZFS на enterprise-дистрибутивы никогда не делал. Причины очевидны. Подвиг kvaps в этом деле также очевиден. Респект.
Стереть диск и использовать zfs что значит
ZFS (Zettabyte File System) — файловая система, разработанная компанией Sun Microsystems и обладающая такими характеристиками как возможность хранения больших объёмов данных, управления томами и множеством других. Первоначально файловая система была разработана для ОС Solaris, но впоследствии перенесена на ряд других операционных систем, в том числе на FreeBSD и Mac OS X.
Файловая система ZFS распространяется с открытым кодом по opensource-лицензии CDDL (несовместимой с GPL).
Появление ZFS наделало много шума, и до сих пор эта файловая является предметом горячих обсуждений. Причин у такой популярности несколько, в первую очередь:
Содержание
[править] Технические возможности 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 и использовать одни только возможности файловой системы.
Интеграция системы управления томами и файловой системы даёт дополнительную гибкость, что в свою очередь даёт:
Если говорить в общем, то возможности ZFS превышают аналогичные возможности системы управления томами LVM, однако в сравнении с EVMS, в некоторых вопросах она проигрывает.
[править] Контроль целостности данных с помощью контрольных сумм
Традиционные файловые системы предполагают, что устройства, на которых они расположены, надёжны и в дополнительном контроле не нуждаются. ZFS исходит из того что устройство может ошибаться, и дополнительно контролирует блоки данных с помощью 256-битных контрольных сумм.
Если сбой обнаружен на блоке RAIDZ или отзеркалированном разделе, он автоматически восстанавливается.
[править] Другие преимущества
Файловая система ZFS обладает и другими преимуществами, в числе которых:
[править] Портирование ZFS
Первоначально файловая система ZFS была разработана для Solaris.
В настоящий момент портирование выполнено:
Портирование 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:
Последний вариант наиболее вероятен, однако, не исключено, что он противоречит патентным ограничениям, в связи с многочисленными патентами, которые 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 (или поэкспериментировать с ней, если есть возможность) ниже приводится ряд команд по работе с файловой системой.
Рассмотрены наиболее тривиальные команды и несколько команд средней сложности. Для более полного знакомства с ZFS лучше использовать документацию по этой файловой системе (ссылки в разделе «Дополнительная информация»).
Ознакомиться с документацией
Создать несколько виртуальных устройств (virtual device, vdev). На месте этих файлов могут быть обычные дисковые разделы.
Создать пул и посмотреть информацию о нём.
Получить развёрнутую информацию о пуле
Попытка создать пул zfs с udev’ами разного размера не удаётся. Можно использовать ключ -f, в этом случае размер определяется наименьшим.
Создать зеркалированный пул.
Отключить устройство от зеркалированного пула:
Подключить устройство к пулу. Если пул раньше не был зеркальным, он превращается в зеркальный. Если он уже был зеркальным, он превращается в тройное зеркало.
Попробовать удалить устройство из пула. Поскольку это зеркало, нужно использовать «zpool detach».
Добавить запасное устройство горячей замены (hot spare) к пулу.
Удалить запасное устройство горячей замены из пула:
Вывести указанное устройство из эксплуатации (offline). После этого попыток писать и читать это устройство не будет до тех пор, пока оно не будет переведено в online. Если использовать ключ -t, устройство будет переведено в offline временно. После перезагрузки устройство опять будет в работе (online).
Перевести указанное устройство в online:
Заменить один диск в пуле другим (например, при сбое диска):
Выполнить скраббинг (scrubbing) пула для того чтобы знать, что там все контрольные суммы верны. Если используется зеркало или RAIDZ автоматически восстанавливаются сбойные блоки.
при скраббинге очень активный ввод/вывод
Экспортировать пул из системы для импорта в другую систему.
Импортировать ранее экспортированный пул. Если ключ -d не указан, команда ищет /dev/dsk. Поскольку в нашем примере используются файлы, нужно указать каталог, используемый пулом:
Пулы работают на версии 8:
Показать версию формата пулов. Ключ -v говорит, что нужно показать какие функции поддерживаются текущей версией. Ключ -a говорит, что нужно обновить до последней версии. Пулы не будут доступны в системах, работающих с более низкой версией.
Посмотреть статистику ввода/вывода для пула:
Создать файловую систему и проверить её с помощью df -h. Файловая система автоматически монтируется в /myzfs. Дополнительную информацию об этом можно найти в man’е zfs в разделе MOUNTPOINTS:
Показать список всех файловых систем ZFS:
Попытка добавить отдельный vdev к зеркалированному множеству (set):
Добавление зеркалированного множества vdev’ов:
Создание ещё одной файловой системы. Обратите внимание, что обе файловые системы как будто бы имеют 159M свободных, ибо квоты не установлены. Каждая может расти до тех пор, пока не заполнит пул:
Зарезервировано 20M для одной файловой системы, что гарантирует что остальные не заполнят всё место:
Установить и посмотреть квоты:
Включить сжатие и проверить, что оно включилось:
Создать снапшот (snapshot, снимок) test:
Откатиться на снапшот test:
Снапшот можно подмонтировать в обычном порядке:
Создание клона. Тип клона будет точно таким же как и у оригинала.
Уничтожить файловую систему:
Неудачная попытка удалить файловую систему, у которой есть дочерняя структура. В данном случае снапшот. Нужно или удалить снапшот или превратить его в клон.
После того как мы превратили снапшот в клон, он больне не зависит от своего источника. И его можно удалять:
Переименовать файловую систему и отдельно переименовать снапшот:
Показать свойства заданного датасета. Есть дополнительные опции.
Неудавшаяся попытка удалить пул с существующей и активной файловой системой:
Размонтировать смонтированную ранее файловую систему:
Смонтировать файловую систему. Обычно это делается при загрузке:
Создать потоковое представление снапшота и перенаправить его на zfs receive. В этом примере перенаправление выполняется на localhost в демонстрационных целях, вообще-то перенаправление должно быть на другой хост:
Посмотреть историю команд для всех пулов. Можно ограничить историю одним пулом, для этого надо указать его имя в командной строке. После того как пул уничтожен, его история теряется.
Уничтожить пул. Ключ -f говорит о том, что пул нужно удалить вместе с файловыми системами, которые в нём созданы.
[править] Дополнительная информация
Основные материалы о ZFS:
[править] Преимущества ZFS
Для того чтобы понять вокруг чего столько шума, и решить для себя, стоит ли вообще обращать на него внимание, стоит понять какие основные преимущества у ZFS есть в настоящий момент.
Обзор (поверхностный) некоторых преимуществ ZFS:
[править] Недостатки ZFS
Некоторые недостатки указаны на странице обсуждения.
[править] Сравнения
Считается, что одно из преимуществ ZFS это производительность. Для того чтобы лучше представлять, есть ли действительно это преимущество и, если есть, то в каких именно задачах и в сравнении с чем, можно познакомиться с результатами сравнений.
[править] ZFS и FreeBSD
[править] ZFS и Linux
Собственно, почему нельзя портировать ZFS под Linux, и если портировать, то с чем это сопряжено:
Несмотря на это, портирование идет полным ходом. http://zfsonlinux.org
Так же можно использовать ZFS через Fuse. Понятно, что это не совсем то, что хотелось бы, но поэкспериментировать и познакомиться с ZFS можно.
[править] ZFS и файловые серверы
Интересные возможности появляются при совместном использовании ZFS и Samba:
[править] ZFS и СУБД
Какие возможности появляются при размещении баз данных на ZFS?
[править] Интересные методы использования ZFS
Возможности файловой системы ZFS хорошо видны на некоторых элегантных решениях.
Простой способ организации резервного копирования данных находящихся на ZFS в удалённое хранилище Amazon S3:
Использование возможностей ZFS для организации транзакционных обновлений в Nexenta:
[править] Обсуждения
Некоторые обсуждения, которые позволяют сразу въехать в глубь проблемы:
Глава 1. Обзор ZFS
Содержание
Для работы с ZFS важно понимать все основы его технической стороны и реализации. Я наблюдал множество провалов, которые имели стержнем тот факт, что люди, которые пытались выполнять администрирование или даже исправлять неисправности файловых систем ZFS, в действительности не понимали что они делают и почему. ZFS проделывает длинный путь для защиты ваших данных, но ничто в мире не остановит пытливого пользователя. Если вы на самом деле серьёзно этим займётесь, вы сломаете её. Именно поэтому неплохой мыслью будет начать с основ.
В большинстве дистрибутивов Linux ZFS не доступна по умолчанию. Для информации о современном состоянии дел в отношении реализации ZFS в Linux, включая текущее сосотяние и дорожную карту, посетите домашнюю страницу проекта: http://zfsonlinux.org/. Начиная с Ubuntu Xenial Xerus, выпуска 16.04 LTS Ubuntu, Canonical сделал ZFS некоторой поддерживаемой на постоянной основе файловой системой. Хотя вы и не можете ещё пока применять её в процессе фазы установки, по крайней мере, простым способом, она готова в доступности для применения и является файловой системой по умолчанию для LXD (диспетчера контейнера системы следующего поколения).
В этой главе мы рассмотрим что из себя представляет ZFS и осветим некоторые ключевые технологии.
Что такое ZFS?
ZFS является копируемой- записью (CoW, copy- on- write) файловой системой, которая соединяет файловую систему, диспетчер логических томов и программный RAID. Работа с еноторой файловой системой CoW означает, что для каждого изменения определённого блока данных эти данные записываются в совершенно новое место на данном диске. Либо запись завершается целиком, либо она не регистрируется как выполненная. Это помогает вам сохранять вашу файловую систему чистой и не разрушенной в случае отказа электропитания. Соединение инструментов диспетчера логических томов и файловой системы совместно с программным RAID означает, что вы легко можете создавать некий том хранения, который имеет желаемые вами настройки и содержит некую готовую к использованию файловую систему. < Прим. пер.: строго говоря, многие авторы настаивают на том, что применяемый в ZFS механизм избыточности данных содержит в себе технологии RAID, но является более объемлющим, но пропустим пока автору такую неточность. >
Великолепные свойства ZFS не заменяют собой резервное копирование. Моментальные снимки, клоны, зеркала и т.п., всё это только защищает ваши данные на протяжении того времени пока данное хранилище доступно. Даже имея такие офигительные возможности в своей команде, вам всё ещё требуется выполнять резервное копирование и постоянно проверять его.
Объяснение принципов CoW
Архитектура Cow (Copy on Write, копирование записью) оправдывает быстрое пояснение, поскольку она является основной концепцией, которая делает возможной существенные свойства ZFS. Рисунок 1.1 отображает графическое представление некоторого возможного пула; четыре диска составляют два vdev (по два диска в каждом vdev). vdev является виртуальным устройством (virtual device), строящимся поверх дисков, разделов, файлов или LUN. Внутри такого пула, поверх vdev, имеется некая файловая система. Данные автоматически балансируются по всем vdev, для всех дисков.
Рисунок 1.1
Рисунок 1.2 представляет некий отдельный блок только записанных данных.
Рисунок 1.2
Когда это блок впоследствии изменяется, он не перезаписывается. Вместо этого ZFS записывает его по новой, в новом месте на диске, как это показано на Рисунок 1.3. Старый блок всё ещё размещается на этом диске и при этом готов к повторному использованию, если потребуется свободное пространство.
Рисунок 1.3
Давайте предположим, что прежде чем эти данные были изменены, оператор данной файловой системы создаёт некий моментальный снимок. Имеющийся блок DATA 1 SNAP помечается как относящийся к такому моментальному снимку файловой системы. Когда данные изменяются и записываются в новое место, имеющееся расположение старого блока записывается в таблице vnode моментального снимка. Всякий раз, когда некоей файловой системе понадобится выполнить восстановление к моменту времени данного моментального снимка (при откате назад или монтировании моментального снимка), имеющиеся данные восстанавливаются из vnode в текущей файловой системе до те пор, пока необходимый блок данных также не будет записан в данной таблице моментального снимка ( DATA 1 SNAP ), как это отображено на Рисунке 1.4.
Рисунок 1.4
Дедупликация является совершенно отдельным сценарием. Имеющиеся блоки данных подлежат сравнению на предмет того, что уже имеется представленным в данной файловой системе и, если обнаружено дублирование, в присутствующую таблицу дедупликации добавляется некая новая запись. Сами реальные данные не записываются в этот пул. Смотрите это на Рисунке 1.5.
Рисунок 1.5
Преимущества ZFS
В дикой природе имеется множество решений хранения как для крупных корпораций, так и для сред SoHo. Их подробное рассмотрение выходит за рамки данного руководства, однако мы рассмотрим все основные за- и против- ZFS.
Упрощённое администрирование
Благодаря слиянию воедино управления томами, RAID и файловой системы имеются всего лишь две команды, которые вам потребуются для создания томов, уровней избыточности, файловых систем, сжатия, точек монтирования и т.п. Это также упрощает мониторинг, так как имеется два или даже три меньших уровня, которые следует просматривать.
Проверенная стабильность
ZFS официально была выпущена в 2005 и на её основе было развёрнуто множество решений хранения. Я видел сотни больших хранилищ ZFS в крупных корпорациях и я уверен, что их общее число составляет сотни, если не тысячи. Я также видел небольшие массивы ZFS SoHo. Благодаря ZFS оба эти мира стали свидетелями великолепной стабильности и масштабируемости.
Целостность данных
ZFS была разработана с прицелом в уме на целостность данных. Она пришла с проверками целостности данных, метаданными контрольных сумм, обнаружением отказов данных (и, в случае присутствия установок избыточности, возможности их устранения), а также автоматического замещения вышедших из строя устройств.
Масштабируемость
ZFS отлично масштабируется с возможностью добавления новых устройств, управления кэшем и тому подобного.
Ограничения ZFS
Как и у любой файловой системы, у ZFS также имеется своя доля слабых мест, которые вам следует иметь в виду для успешной работы с этим хранилищем.
Принцип 80% или больше
Как и большинство прочих файловых систем, ZFS страдает от ужасной производительности при заполнении на 80% и более от своей ёмкости. Это общая проблема с файловыми системами. Запомните, что когда ваш пул начинает заполнять 80% ёмкости, вам необходимо либо расширить этот пул, либо выполнять миграцию на установку большего размера.
Вы не можете усекать данный пул, поэтому вы не можете удалять устройства или vdev из него после того как они были добавлены.
Ограниченность изменения типа избыточности
За исключением переключения пула отдельного диска в пул зеркалирования вы не можете изменять тип избыточности. Выбрав единожды тип избыточности, у вас есть единственный путь его разрушения и создания нового, восстанавливая данные из резервных копий или другого расположения.
Ключевая терминология
В наших последующих разделах перечисляются ключевые термины, с которыми вы будете сталкиваться.
Пул хранения
Пул хранения ( storage pool ) является комбинацией ёмкостей дисковых устройств. Некий пул может иметь одну или более файловых систем. Файловые системы создаются внутри конкретного пула, видящего всю ёмкость и могут расти вверх до достижения всего объёма данного пула. Любая из файловых систем способна получить всё доступное пространство, что сделает невозможным рост для прочих файловых систем в том же самом пуле и сохранение в них новых данных. Одним из способов обработки таких ситуаций состоит в применении резервирования и квот пространства.
vdev является неким виртуальным устройством, которое может состоять из одного или более физических устройств. vdev может быть неким пулом или быть частью какого- то пула большего размера. vdev может иметь уровень избыточности зеркала, тройного зеркала, RAIDZ, RAIDZ-2 или RAIDZ-3. Доступны даже более высокие уровни зеркальной избыточности, однако они не практичны и затратны. < Прим. пер.: на самом деле, имеется по крайней мере один вариант применения зеркалирования на большом числе дисков, а именно при решении задачи увеличения пропускной способности. >
Файловая система
Некая файловая система создаётся в рамках какого- то пула. Файловая система ZFS может относиться только к одному пулу, однако некий пул может содержать более одной файловой системы ZFS. Файловые системы ZFS могут иметь резервирования (минимально гарантированную ёмкость), квоты, сжатие и множество прочих свойств. Файловые системы могут быть встраиваемыми, что означает, что вы можете создавать одну файловую систему внутри другой. Пока вы не определите иное, файловые системы будут автоматически монтироваться внутри своих предков. Самая верхняя файловая система ZFS именуется также как сам пул и автоматически монтируется в своём корневом каталоге, если не определено иное.
Моментальные снимки
Клоны
Набор данных
Набором данных ( dataset ) является некий пул ZFS, файловая система, моментальный снимок, том или клон. Именно это является тем уровнем ZFS, это именно тот уровень, на котором могут храниться данные и с которого они могут извлекаться.
Том ( volume ) является некоторой файловой системой, которая эмулирует определённое блочное устройство. Он не может применяться как какая- то обычная файловая система ZFS. Для всех намерений и целей он ведёт себя как некое блочное устройство. Некоторые из них применяются для их экспорта через протоколы iSCSI или FCoE с целью монтирования в качестве LUN в каком- то удалённом сервере с последующим применением их как дисков.
Что касается меня самого, тома являются моими самыми не любимыми при применении ZFS. Многие из имеющихся свойств, которые мне больше всего нравятся в ZFS имеют ограничения в томах или вовсе не могут применяться к ним. Если вы применяете тома и выполняете их моментальные снимки, вы не сможете их монтировать простым способом локально для выемки файлов, как вы это могли бы делать при использовании некоторой простой файловой системы ZFS.
Восстановление амальгамы
Восстановление амальгамы является низкоприоритетным процессом системы. В очень занятой системы оно потребует большего времени.
Объяснение схемы пула
Схема построения пула является тем способом, которым диски группируются в vdev, а vdev группируются вместе в определённый пул ZFS.
Предположим, что у нас имеется некий пул, состоящий из шести дисков, причём все они находятся в конфигурации RAIDZ-2 (грубо: эквивалент RAID-6). Четыре диска содержат данные в двух находятся суммы восстановления данных (parity data). Устойчивость данного пула делает возможной утрату до двух дисков. Любое значение выше этого невозвратимо разрушит имеющуюся файловую систему и как результат нам потребуются резервные копии.
Рисунок 1.6 представляет данный пул. Хотя технически возможно создать некий vdev из меньшего число дисков, причём с различными размерами, это практически обязательно отобразится в проблемах с производительностью.
Рисунок 1.6
Рисунок 1.7
Единственным исключением из правила «вы не можете изменять уровень отказоустойчивости» является подключение диска единственного диска к отдельному vdev и это будет иметь результатом зераклированное vdev (см. Рисунке 1.8). Вы также можете подключить некий диск к зеркалу из двух устройств, создавая тем самым тройное зеркало. (см. Рисунке 1.9).
Рисунок 1.8
Рисунок 1.9
Общие опции регулировки
Хотя они и в самом деле могут предложить значительное увеличение производительности, их установка в слепую является существенной ошибкой. Как уже указывалось ранее, для надлежащего администрирования вашим сервером хранения вам необходимо понимать зачем вы применяете предлагаемые параметры.
ashift
Как вы можете заметить, я позволил ZFS автоматически определять установленные значения.
smartctl
Если вы не уверены в состоянии AL для своих дисков, воспользуйтесь командой smartctl :
Вы можете заметить, что мой диск имеет строку:
Она сообщает, что диск имеет физическую схему 4096 байт, однако сам диск предлагает 512 байт для обратной совместимости.
Дедупликация
Возмите за правило: не применяйте дедупликацию. Просто никогда. Если вам на самом деле требуется отыскать дисковое пространство, применяйте прочие способы увеличения ёмкости. Некоторые мои былые потребители получали гигантские проблемы применяя дедупликацию.
ZFS имеет некую интересную опцию, которая вызвала достаточно большой интерес при её введении. Включение дедупликации сообщает ZFS о необходимости отслеживать блочные данные. Всякий раз когда данные записываются на диски, ZFS будет сравнивать их с теми блоками, которые уже имеются в данной файловой системе и, если обнаруживает некий идентичный блок, он не будет записывать физические данные, а вместо этого добавит некие метаданные и тем самым сбережёт очень и очень много дискового пространства.
Хотя эта функция и выглядит великолепно в теории, на практике она она превращается в достаточную хитроумность для гадкого применения. Прежде всего, дедупликация привносит стоимость по цене, в которую вам обойдётся оперативная память и ЦПУ. Для каждого юлока данных, который подвергается дедупликации, ваша система добавит некую запись в DDT (deduplication tables, таблицах дедупликации), которые присутствуют в вашей оперативной памяти. По иронии судьбы, для идеальной дедупликации данных получаемые в результате в оперативной памяти DDT приводили к тому, что система падала из- за нехватки памяти и мощности ЦПУ для работы операционной системы.
Нельзя сказать, что дедупликация не применяется. Однако, прежде чем устанавливать её, вы должны изучить насколько хорошо ваши данные будут дедуплицированы. Я могу представить себе хранилище резервных копий, которое позволит сэкономить место благодаря дедупликации. В таком случае, несмотря на размер DDT, во избежание проблем необходимо предусмотреть свободную оперативную память и предоставление ЦПУ.
Загвоздка в том, что DDT постоянно. Вы можете в некий момент отключить дедупликацию, но однажды дедуплицированные данные остаются дедуплицированными и если вы из- за этого столкнётесь с проблемами стабильности, отключение и перезагрузка вам не помогут. При следующем импорте (монтировании) пула DDT будут загружены в оперативную память вновь. Существует два способа избавиться от этих данных: удалить этот пул, создать его по новой, и восстановить все данные или запретить дедупликациюи переместить данные в этот пул с тем, чтобы они стали не дедуплицированными при своих следующих записях. Оба варианта требуют времени, которое определяется самим размером ваших данных. В случае, когда дедуплицирование способно сберечь дисковое пространство, тщательно изучите эту возможность.
Вы можете проверить имеющиеся установки дедупликации опросив свойство дедупликации своей файловой системы:
Для файловой системы установлена дедупликация.
Сжатие
Опцией, которая сберегает дисковое пространство и добавляет скорость является сжатие ( compression ). Для применения в ZFS доступно несколько алгоритмов сжатия. Обычно вы можете просить имеющуюся файловую систему сжимать все блоки данных при их записи на диск. При современных ЦПУ вы обычно можете добавлять скорость при записи физических данных небольшого размера. Ваш процессор должен иметь возможность справляться с упаковкой и распаковкой данных на лету. Исключение могут составлять плохо пакуемые данные, такие как MP3, JPG или видео файлы. Текстовые данные (журналы регистрации приложений и т.п.) обычно хорошо проявляют себя при данной опции. Что касается моих личных предпочтений, я всегда включаю упаковку. Устновленным по умолчанию алгоритмом для ZFS является lzjb.
Сжатие может быть установлено на уровне файловой системы:
Значение соотношения сжатия моно определить запросив свойство:
Если этот флаг включён, вы можете установить compression=lz4 для дюбого выбранного набора данных (dataset). Вы можете вызвать его данной командой:
Теперь уже какое- то время lz4 является алгоритмом сжатия по умолчанию.
Состояние пула ZFS
сли вы вновь взглянете на перечень моего пула:
DEGRADED : Вероятно применим только для наборов с избыточностью, в которых были утрачены диски в зеркале, или RAIDZ, или в RAIDZ-2. Такой пул может потерять избыточность. Утрата дополнительных дисков приведёт к его разрушению. Имейте в виду, что тройное зеркалирование или RAIDZ-2 при утрате одного диска не приводит к отсутствию избыточности пула.
OFFLINE : устройство было отключено (выведено из рабочего сосотяния) администратором. Причины могут разниться, однако это не означает, что данный диск отказал.
Версия ZFS
ZFS был разработан для последовательно пошагового введения новых функций. Как часть данного механизма, в качестве отдельного номера были введены определённые версии ZFS. Отслеживая этот номер, конкретный оператор системы может определить, что его пул применяет самую последнюю версию ZFS, в том числе новые свойства и исправления ошибок. Обновления осуществляются прямо на месте и не требуют никакого времени простоя.
Если вы опять взглянете на вывод команды zpool в моём хосте:
(Для получения дополнительной информации по определённой версии, включая поддерживаемые выпуски, обращайтесь к ZFS Administration Guide.)
(Также поддерживаются следующие наследуемые версии:)
(Для получения дополнительной информации по определённой версии, включая поддерживаемые выпуски, обратитесь к ZFS Administration Guide)
Обе команды выводят информацию о максимальном уровне пула ZFS и версиях файловой системы, а также перечень всех доступных флагов свойств.
Вы можете проверить текущее состояние версии своих пула и файловой системы воспользовавшись командами zpool upgrade и zfs upgrade :