Интернет магазин китайских планшетных компьютеров



Компьютеры - ZFS - История

11 июня 2011


Оглавление:
1. ZFS
2. История
3. Ограничения
4. Платформы



ZFS была спроектирована и создана командой Sun Microsystems, лидером которой является Джеф Бонвик. Файловая система была анонсирована 14 сентября 2004 года. Исходный код для финального релиза был интегрирован в главную ветку разработки Solaris 31 октября 2005 года и реализован как часть 27-й сборки OpenSolaris 16 ноября 2005 года. Sun заявила, что ZFS была интегрирована в 6/06 обновление для Solaris 10 в июне 2006 года, по прошествии одного года с момента открытия сообщества OpenSolaris.

Изначальное название было «Zettabyte File System», но сейчас оно превратилось в простую аббревиатуру.

Специфика

Максимальные возможности

ZFS — это 128-битная файловая система, что позволяет ей хранить в 18,4 × 10 раз больше данных, чем нынешние 64-битные системы. ZFS спроектирована так, чтобы её ограничения были настолько малы, что они никогда не встретятся на практике. Как заявил руководитель проекта Бонвик, «заполнение 128-битных файловых систем превысит квантовые возможности хранения данных на Земле. Вы не сможете заполнить и хранить 128-битный объём, не вскипятив при этом океан.»

Некоторые теоретические пределы в ZFS:

  • 2 — Количество снимков в любой файловой системе
  • 2 — Количество файлов в любой индивидуальной файловой системе
  • 16 эксабайт — Максимальный размер файловой системы
  • 16 эксабайт — Максимальный размер одного файла
  • 16 эксабайт — Максимальный размер любого атрибута
  • 3 × 10 петабайт — Максимальный размер любого пула хранения
  • 2 — Количество атрибутов файла
  • 2 — Количество файлов в директории
  • 2 — Количество устройств в любом zpool
  • 2 — Количество zpool’ов в системе
  • 2 — Число файловых систем в zpool

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

В ответ на вопрос о заполнении ZFS без кипячения океанов, Бонвик пишет:

Хотя мы все хотели бы, чтобы Закон Мура выполнялся бесконечно долго, квантовая механика накладывает некоторые фундаментальные ограничения на скорость вычислений и информационную вместимость любого физического устройства. В частности, было показано, что 1 килограмм материи, ограниченный 1 литром пространства, может выполнять не более 10 операций в секунду над не более чем 10 бит информации. Целиком заполненный 128-битный объём будет содержать 2 блоков = 2 байт = 2 бит; поэтому минимальная масса, необходимая для хранения этого количества бит, будет / = 136 млрд кг.

Пулы хранения

В отличие от традиционных файловых систем, которые располагаются на одном устройстве и, следовательно, при использовании более чем на одном устройстве для них требуется менеджер томов, ZFS строится поверх виртуальных пулов хранения данных, называемых zpool. Пул построен из виртуальных устройств, каждое из которых является либо физическим устройством, либо зеркалом одного или нескольких устройств, либо — группой из двух или более устройств. Емкость всех vdevs затем доступна для всех файловых систем в zpool.

Для ограничения пространства, доступного конкретной файловой системе, может быть установлена квота. Кроме того, возможно использование дискового резервирования — это гарантирует, что всегда будет оставаться некоторый доступный объём для конкретной файловой системы.

Версии пула ZFS

Существуют различные версии файловой системы ZFS и версии пула ZFS, в зависимости от версии меняется и функциональность.

Посмотреть текущую версию пула ZFS и доступные версии можно командой:

# zpool upgrade -v
This system is currently running ZFS pool version 28.
VER  DESCRIPTION
---  --------------------------------------------------------
1   Initial ZFS version
2   Ditto blocks
3   Hot spares and double parity RAID-Z
4   zpool history
5   Compression using the gzip algorithm
6   bootfs pool property
7   Separate intent log devices
8   Delegated administration
9   refquota and refreservation properties
10  Cache devices
11  Improved scrub performance
12  Snapshot properties
13  snapused property
14  passthrough-x aclinherit
15  user/group space accounting
16  stmf property support
17  Triple-parity RAID-Z
18  Snapshot user holds
19  Log device removal
20  Compression using zle
21  Deduplication
22  Received properties
23  Slim ZIL
24  System attributes
25  Improved scrub stats
26  Improved snapshot deletion performance
27  Improved snapshot creation performance
28  Multiple vdev replacements

По состоянию на Июнь 2011 существует 28 версий ZFS.

ZFS Pool Версия 1

Это начальная реализация дискового формата ZFS. Впервые была внедрена 31 октября 2005 года и в течение шести месяцев использовалась для внутренних целей компании SUN. Первая официально поддерживаемая версия появилась в:

  • Solaris Nevada Build 36
  • Solaris 10 Update 2

ZFS Pool Версия 2

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

Данная функция была представлена 10 апреля 2006 года и доступна в:

  • Solaris Nevada Build 38
  • Solaris 10 Update 2

ZFS Pool Версия 3

Включена поддержка следующих технологий:

  • Технология Hot Spare
  • RAID-Z двойной четности
  • Улучшенный учет RAID-Z

Данные функции были представлены в:

  • Solaris Nevada Build 42
  • Solaris 10 Update 3 Build 3

ZFS Pool Версия 4

Добавлена поддержка ведения истории пула ZFS, названная zpool history

Данная функция представлена в:

  • Solaris Nevada Build 62
  • Solaris 10 Update 4

ZFS Pool Версия 5

Добавлена поддержка сжатия на лету для наборов данных ZFS методом gzip

Данная функция представлена в:

  • Solaris Nevada Build 62
  • Solaris 10 Update 6

ZFS Pool Версия 6

Включает поддержку свойства bootfs в пуле

Данная функция представлена в:

  • Solaris Nevada Build 62
  • Solaris 10 Update 6

ZFS Pool Версия 7

В этой версии включена поддержка: ZFS Intent Log — Целевой лог ZFS — удовлетворяет требованиям некоторых приложений, которым необходимо знать, что данные, ими измененные, находятся на стабильном хранилище, по возврату из системного вызова. Intent Log хранит записи этих системных вызовов, они воспроизводятся заново, если произошёл сбой питания или критическая ошибка, при которой основной пул не подтвердил их выполнение. Когда Intent Log находится вне основного пула, он выделяет блоки, которые идут цепочкой через пул.

Данная версия добавляет возможность ведения Intent Log на отдельном устройстве или устройствах.

Данные функции доступны в:

  • Solaris Nevada Build 68
  • Solaris 10 Update 6

ZFS Pool Версия 8

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

Данная функция представлена в:

  • Solaris Nevada Build 69
  • Solaris 10 Update 6

ZFS Pool Версия 9

В этой версии включена поддержка:

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

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

     $ zfs set refquota
     $ zfs set refreservation

Резервирование автоматически устанавливается, когда созданный non-sparse том ZFS соответствует размеру раздела. Этот релиз предоставляет немедленную функцию резервации, так чтобы вы установили резервацию на non-sparse томе с достаточным размером пространства для снятия снимков и изменения содержимого тома.

  • Поддержка CIFS сервера OpenSolaris

Данные функции появилиь в:

  • Solaris Nevada Community Edition, Build 77
  • Solaris 10 Update 6

ZFS Pool Версия 10

Добавлена следующая функциональность:

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

Функциональность доступна в:

  • Solaris Nevada Community Edition, Build 78
  • Solaris 10 Update 6

ZFS Pool Версия 11

Улучшена производительность механизма скраббинга zpool

     $ zpool scrub

Это изменение доступно в:

  • Solaris Nevada Build 94

ZFS Pool Версия 12

Появилась следующая опция:

  • Свойства снапшотов

Впервые появилось в версии:

  • Solaris Express Community Edition, build 96

ZFS Pool Версия 13

Стали доступны следующие свойства:

  • usedbysnapshots
  • usedbychildren
  • usedbyrefreservation
  • usedbydataset

Реализовано в:

  • Solaris Express Community Edition, build 98
  • FreeBSD 8.0-RELEASE

ZFS Pool Версия 14

Появилась поддержка:

  • поддержка свойства passthrough-x aclinherit

Реализовано в:

  • Solaris Express Community Edition, build 103
  • FreeBSD 8.1-RELEASE

ZFS Pool Версия 15

Включает поддержку:

  • userused@… и groupused@… свойств
  • userquota@… и groupquota@… свойств

Представлено в:

  • Solaris Express Community Edition, build 114
  • FreeBSD 8.2-RELEASE

ZFS Pool Версия 16

Появилась следующая опция:

  • поддержка свойства STMF

Реализовано в:

  • Solaris Express Community Edition, build 116
  • FreeBSD 8.2-STABLE

ZFS Pool Версия 17

This page describes the feature available with version 17 of the ZFS on-disk format. This version includes support for the following feature: Реализовано следующая функция

  • triple-parity RAID-Z

Возможно использовать в:

  • Solaris Express Community Edition, build 120
  • FreeBSD 8.2-STABLE

ZFS Pool Версия 18

Поддержка следующей опции:

  • ZFS snapshot holds

Возможно использовать в версии, начиная с:

  • Solaris Express Community Edition, build 121
  • FreeBSD 8.2-STABLE

ZFS Pool Версия 19

Появилась следующая возможность:

  • удаление ZFS log device

Функция доступна в:

  • Solaris Express Community Edition, build 125
  • FreeBSD 8.2-STABLE

ZFS Pool Версия 20

This page describes the feature available with version 20 of the ZFS on-disk format. Эта версия включает алгоритм сжатия zle, который необходим для поддержки ZFS нераздвоения свойств в ZFS Pool версии 21.

Обе версии реализованы в:

  • Solaris Express Community Edition, build 128
  • FreeBSD 8.2-STABLE

ZFS Pool Версия 21

Эта версия включает поддержку ZFS нераздвоения свойств

Доступно в:

  • Solaris Express Community Edition, build 128
  • FreeBSD 8.2-STABLE

ZFS Pool Версия 28

Доступно в:

  • FreeBSD 8.2-STABLE

Модель транзакций копия-по-записи

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

Снимки и клоны

Модель копия-по-записи в ZFS обладает ещё одним мощным преимуществом: когда ZFS записывает новые данные — вместо освобождения блоков, содержащих старые данные — она может сохранять их, создавая снимки файловой системы. Снимки в ZFS создаются очень быстро, так как все данные в составе снимка уже сохранены; они также эффективно размещены в пространстве, поскольку любые неизмененные данные разделяются между файловой системой и её снимком.

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

Динамическое разделение

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

Различные размеры блока

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

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

Сквозной контроль целостности данных

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

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

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

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

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

Дополнительные возможности

  • Конкретный I/O приоритет со сроком планирования.
  • Оптимальный в глобальном масштабе I/O сортировки и агрегации.
  • Несколько независимых потоков с упреждением автоматического обнаружения длины и шага.
  • Параллельная, постоянная времени операций с каталогами.
  • Интеллектуальная очистка и коррекция.
  • Загрузка и совместное использование дисков в пуле.
  • Те же блоки: Метаданные воспроизводятся внутри пула, два или три раза. Если пул состоит из нескольких устройств, ZFS будет пытаться воспроизводить данные на разных устройствах. Даже в пуле без избыточности можно потерять данные, но даже если Вы обнаружите поврежденные секторы, то метаданные должны создать достаточную безопасность, даже при таком сценарии.
  • Дизайн ZFS даёт большую безопасность при использовании дисков с возможностью записи в кэш, то есть если они реагируют и повинуются на кэш-флэш команды выданные ZFS. Эта особенность обеспечивает безопасность и значительное повышение производительности по сравнению с другими ФС.
  • Учитывая предыдущий пункт, когда все диски находятся в ZFS пуле, ZFS автоматически включает функцию записи в кэш для них. Это не применимо, если не только ZFS одновременно управляет дискретными разделами диска, например если вы используете ФС без функции безопасной записи в кеш, например UFS.

Управление кэшем

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

Адаптивный порядок байт

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

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



Просмотров: 3563


<<<