ZFS

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

ZFS (Zettabyte File System) — файлова система, створена в корпорації Sun Microsystems для операційної системи Solaris. Ця файлова система підтримує великі об'єми даних, об'єднує концепції файлової системи і менеджера логічних дисків (томів), інноваційну структуру даних на дисках, легковагі файлові системи (англ. lightweight filesystems), а також просте управління об'ємами зберігання даних. ZFS є проектом з відкритим сирцевим кодом і ліцензується під CDDL (Common Development and Distribution License). Основна перевага ZFS — відсутність фрагментації даних, що дозволяє динамічно виділяти або звільняти дисковий простір логічній файловій системі, причому цей простір може бути як в рамках фізичного накопичувача, так і розосередженим по декількох мережевих дисках. Крім того, 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 біт інформації. Цілком заповнений 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 можуть бути перенесені між різними платформами навіть якщо ті мають інший порядок байт. Формат блоків ZFS дозволяє автоматично визначати і міняти порядок байт на льоту при читанні метаданих.

При цьому різний порядок байт на різних системах ніяк не відбивається на роботі забезпечення, файли для нього так і залишаються простими послідовностями байтів. Таким чином програмне забезпечення відповідальне за формат даних самих файлів.

Обмеження[ред.ред. код]

  • ZFS не підтримує розподіл квот для кожного користувача або групи. Замість цього, можна створювати ФС для користувачів, кожна з яких матиме своє обмеження розміру. Низький рівень накладних витрат ZFS робить це практичним навіть для багатьох користувачів (але це може значно уповільнити запуск системи). В дійсності, немає жодного практичного рішення проблеми квоти в системах, де файлові системи розділені серед декількох користувачів (як наприклад проекти групи), де дані не можуть бути відокремлені для кожного користувача, хоча це можна здійснити поверх стека ZFS.
  • Розширення ємкості зазвичай досягається додаванням груп дисків як віртуальний пристрій (смуга, RAID-Z, RAID-Z2, або дзеркало). Знов записані дані динамічно починатимуть використовувати всі доступні пристрої. Також можливо розширити масив ітераційно замінюючи диски меншої ємкості на диски більшої ємкості та чекаючи на ZFS, щоб полагодити себе — час полагодження залежатиме від кількості збереженої інформації, не розмір дисків. Якщо протягом цього процесу зробити знімок, це викличе перезапуск полагодження.
  • Зараз не можливо скоротити число пристроїв в накопичувачі або зменшити ємкість накопичувача. Проте, в цьому напрямку ведеться робота. Така можливість ще не була доступною в Solaris 10 05/08.
  • Не можливо додати диска до пристроїв RAID-Z або RAID-Z2 . Ця особливість здається дуже важкою для здійснення. Проте є можливість створити новий RAIDZ пристрій і додати його до пулу.
  • Не можливо додавати до пулу пристрої різних типів. Наприклад, якщо ви маєте смуговий ZFS накопичувач, що складається з дисків на SAN, ви не можете додати локальні диски як дзеркальний пристрій.
  • Переконфігурація накопичувача вимагає копіювання даних, знищування пулу, і відтворення накопичувача з новою конфігурацією.
  • ZFS не є кластером, розподіленою файловою системою або паралельною файловою системою і не може забезпечити одночасний доступ для багатьох клієнтів таким же чином як до локальної файлової системи. Розподілена файлова система Lustre корпорації Sun може використати ZFS як для зберігання даних, так і метаданих, у починаючи з версії 1.8, який планується бути випущеною в другому кварталі 2008 р. [9].

Платформи[ред.ред. код]

ZFS є частиною ОС Solaris компанії Sun і доступна для обох платформ — SPARC і x86. Оскільки код ZFS є відкритим програмним забезпеченням (ліцензія CDDL), порти для інших операційних систем і платформ можуть вироблятися без участі Sun.

OpenSolaris[ред.ред. код]

OpenSolaris 2008.05 використовує ZFS як файлову систему за замовчанням.

FreeBSD[ред.ред. код]

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

Linux[ред.ред. код]

Для Linux розроблений ZFSonLinux, реалізації файлової системи ZFS, оформленої у вигляді модуля для ядра Linux. Проект заснований на оригінальному коді ZFS, імпортованому з проекту OpenSolaris і розширеному поліпшеннями і виправленнями від спільноти Illumos. Реалізована в ZFSonLinux версія пулу і файлової системи сумісна з ZFS зі складу Illumos і FreeBSD. Проект розвивається за участю співробітників Ліверморської національної лабораторії за контрактом з Міністерством енергетики США.

У рамках ZFSonLinux підготовлена ​​стабільна і повнофункціональна реалізація підтримки компонентів ZFS, пов'язаних як з роботою файлової системи, так і з функціонуванням менеджера томів. Зокрема, реалізовані компоненти: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) і ZPL (ZFS POSIX Layer). Додатково проектом забезпечена можливість використання ZFS в якості бекенду для кластерної файлової системи Lustre.

Код розповсюджується під вільною ліцензією CDDL, яка несумісна з GPLv2, що не дозволяє домогтися інтеграції ZFSonLinux до складу основної гілки ядра Linux, бо змішування коду під ліцензіями GPLv2 і CDDL неприпустимо. Для обходу цієї ліцензійної несумісності було вирішено поширювати продукт цілком під ліцензією CDDL у вигляді окремо завантажувального модуля, який поставляється окремо від ядра.

Mac OS X[ред.ред. код]

Apple Computer переносить ZFS на свою систему Mac OS X, відбувається активне обговорення в списках розсилки ZFS і попередні снапшоти для наступної версії Apple Mac OS X [11]. Попри те, що Mac OS X 10.5 (Developer Seed 9A321) підтримує ZFS, відсутня можливість використовувати ZFS на кореневих розділах (root partition), що вказане вище. Також спроба форматування локальних дисків під Mac OS під згадану файлову систему будуть безуспішні. Це баг [12].

Посилання[ред.ред. код]

Виноски[ред.ред. код]