ZFS (Zettabyte File System)

Материал из BeneWiKi.

Перейти к: навигация, поиск

Содержание

ZFS (Zettabyte File System) — файловая система, изначально созданная в Sun Microsystems для операционной системы Solaris. Эта файловая система поддерживает большие объёмы данных, объединяет концепции файловой системы и менеджера логических дисков (томо́в), инновационную структуру данных на дисках, легковесные файловые системы (lightweight filesystems), а также простое управление объёмами хранения данных. ZFS является проектом с открытым исходным кодом и лицензируется под CDDL (Common Development and Distribution License). Основное преимущество ZFS — отсутствие фрагментации данных, что позволяет динамически выделять или освобождать дисковое пространство логической файловой системе, причем это пространство может быть как в рамках физического накопителя, так и рассредоточено по нескольким сетевым дискам. Кроме того, имеет место переменный размер блока, что лучшим образом влияет на производительность, параллельность выполнения операций чтения-записи, а также 64-разрядный механизм использования контрольных сумм, сводящий к минимуму вероятность разрушения данных.

[править] История

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

Изначальное название было «Zettabyte File System», но сейчас оно превратилось в псевдо-инициализм.[4]

[править] Потенциал

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

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

  • 248 — Количество снимков (snapshot) в любой файловой системе (2 × 1014)
  • 248 — Количество файлов в любой индивидуальной файловой системе (2 × 1014)
  • 16 эксабайт (264 byte) — Максимальный размер файловой системы
  • 16 эксабайт (264 byte) — Максимальный размер одного файла
  • 16 эксабайт (264 byte) — Максимальный размер любого атрибута
  • 3 × 1023 петабайт — Максимальный размер любого пула хранения (zpool)
  • 256 — Количество атрибутов файла (фактически ограничивается 2 48 на количество файлов в файловой системе ZFS)
  • 256 — Количество файлов в директории (реально ограничен 2 48 на количество файлов в файловой системе ZFS)
  • 264 — Количество устройств в любом zpool
  • 264 — Количество zpool’ов в системе
  • 264 — Число файловых систем в zpool

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

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

Хотя мы все хотели бы, чтобы Закон Мура выполнялся бесконечно долго, квантовая механика накладывает некоторые фундаментальные ограничения на скорость вычислений и информационную вместимость любого физического устройства. В частности, было показано, что 1 килограмм материи, ограниченный 1 литром пространства, может выполнять не более 1051 операций в секунду над не более чем 1031 бит информации [см. Seth Lloyd, «Ultimate physical limits to computation.» Nature 406, 1047—1054 (2000)]. Целиком заполненный 128-битный объём будет содержать 2128 блоков = 2137 байт = 2140 бит; поэтому минимальная масса, необходимая для хранения этого количества бит будет (2140 бит) / (1031 бит/кг) = 136 млрд кг.

[править] Пулы хранения

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

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

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

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

[править] Снимки и клоны

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

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

[править] Динамическое разделение

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

[править] Различные размеры блока

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

Если сжатие включено, используются переменные размеры блока. Если блок был сжат он может влиться в блок меньшего размера, то есть используется меньшее пространство на диске и повышается пропускная способность (Input/Output) (хотя ценой расширенного использования процессора и оперативной памяти для операций компрессии и декомпрессии)

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

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

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

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

[править] Создание легковесной файловой системы

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

[править] Дополнительные возможности

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

[править] Управление кэшем

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

[править] Ограничения

В реализации ZFS в Solaris 10 отсутствует прозрачное шифрование, как в NTFS, хотя существует его реализация в рамках проекта OpenSolaris.[9]

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

[править] Платформы

ZFS является частью OC Solaris, компании Sun и доступна для обеих платформ — SPARC и x86. Поскольку код ZFS является открытым (лицензия CDDL), порты для других операционных систем и платформ могут производиться без участия Sun.

[править] GNU/Linux

В GNU/Linux перенос ZFS на уровень ядра [10] юридически невозможен из-за несовместимости лицензий CDDL, под юрисдикцией которой находится ZFS и GNU GPL, под юрисдикцией которой находится Linux. Тем не менее, программа Google Summer of Code спонсирует адаптацию ZFS на ОС GNU/Linux с использованием FUSE, в которой Файловая система ZFS работает в пользовательском пространстве (userspace).[11] Однако считается что это решение теоретически черевато потерями производительности[12]. Но пример с реализацией NTFS (NTFS-3G) через FUSE показывает хорошую производительность по сравнению с другими системами [13].

[править] Nexenta OS

Nexenta OS это ОС OpenSolaris с GNU-окружением (userspace), в версии alpha1 в ядро была включена поддержка ZFS.

[править] FreeBSD

Pawel Jakub Dawidek адаптировал ZFS для FreeBSD в виде модуля для ядра системы. ZFS включена в версию FreeBSD 7.0 (вышла 27 февраля 2008).[14] Информация о настройке доступна во FreeBSD Wiki.

[править] Mac OS X

Apple Computer переносят ZFS на свою систему Mac OS X, ведётся активная дискуссия в списках рассылки ZFS и предварительные снапшоты для следующей версии Apple Mac OS X.[15] Не смотря на то, что Mac OS X 10.5 (Developer Seed 9A321) поддерживает ZFS, отсутствует возможность использовать ZFS на корневых разделах (root partion), что указано выше. Также попытка форматирования локальных дисков под Mac OS в упомянутую файловую систему будут безуспешны. Это баг (источник — [16])

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

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

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

[править] Примечания

  1. 1,0 1,1 ZFS: the last word in file systems (ZFS: последнее слово в файловых системах) Sun Microsystems. Проверено 2006-04-30 г.
  2. Jeff Bonwick ZFS: The Last Word in Filesystems Jeff Bonwick's Blog (Блог Jeff'a Bonwick'а). Проверено 2006-04-30 г.
  3. Sun Celebrates Successful One-Year Anniversary of OpenSolaris (Sun празднует успешную первую годовщину OpenSolaris) Sun Microsystems.
  4. Jeff Bonwick You say zeta, I say zetta (Ты скажешь zeta, я скажу zetta) Jeff Bonwick's Blog (Блог Jeff'а Bonwick'а). Проверено 2006-09-08 г.
  5. Data integrity доклад CERN. Проверено 2008-01-28 г.
  6. Smokin' Mirrors Блог Jeff'a Bonwick'a. Проверено 2007-02-23 г.
  7. Распределение блоков ZFS Блог Jeff'а Bonwick'а. Проверено 2007-02-23 г.
  8. Те же блоки - Удивительная репелент лента Flippin' off bits Weblog. Проверено 2007-03-01 г.
  9. Проект OpenSolaris: Поддержка шифрования дисков в ZFS. Проект OpenSolaris. Проверено 2008-01-28 г.
  10. На данный момент реализация файловой системы на уровне ядра является традиционным и считается наиболее высокопроизводительным способом поддержки файловой системы.
  11. Ricardo Correia Announcing ZFS on FUSE/Linux Проверено 2006-07-15 г.
  12. Реализация файловой системы на уровне задач пользовательского пространства может нести в себе дополнительные затраты, к примеру переключение контекста. Но такая реализация является основой целой теории микроядерных систем (см. Minix) и отличается б́ольшей надежностью по сравнению с реализацией внутри ядра.
  13. Szabolcs Szakacsits NTFS-3G Read/Write Driver Performance Проверено 2008-01-20 г.
  14. Dawidek, Pawel ZFS committed to the FreeBSD base Проверено 2007-04-06 г.
  15. Портирование ZFS в OSX zfs-дискуссии. Проверено 2006-04-30 г.
  16. Mac OS X 10.5 9A326 Seeded InsanelyMac Forums. Проверено 2006-12-14 г.

[править] См. также

[править] Ссылки