ZFS
Коротка назва Z File System і ZFS
Час/дата початку листопад 2005
Максимальний розмір або ємність 16 ексабайт
Розробник Sun Microsystems, Oracle Corporation і OpenZFSd
Конструктор Jeff Bonwickd
Операційна система Solaris, macOS, illumosd, Berkeley Software Distribution, OSvd, Linux, Windows і FreeBSD[1][2]
Версія 0.7.13 (zfs) 0.7.13 (spl)
Ліцензія Common Development and Distribution License version 1.0d
Статус авторських прав захищено авторським правомd
Максимальне значення 256 000 000 000 000 файл[3]
Офіційний сайт(англ.)

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 р.[4] Вихідний код для фінального реліза був інтегрований в головну гілку розробки Solaris 31 жовтня 2005 р.[5] і реалізований як частина 27-ї збірки Opensolaris 16 листопада 2005 р. Sun заявила, що ZFS була інтегрована в оновлення 6/06 для Solaris 10 в червні 2006, після одного року з моменту відкриття Інтернет-спільноти Opensolaris[6].

Початкова назва була «zettabyte File System», але зараз воно перетворилося на псевдо-ініциалізм[7].

Потенціал

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

ZFS — це 128-бітна файлова система, що дозволяє їй зберігати в 18 мільярдів (18.4 * 109) разів більше даних, ніж нинішні 64-бітні системи. ZFS спроєктована так, щоб її обмеження були настільки великі, що вони ніколи не зустрінуться на практиці. Як заявив керівник проєкту Бонвік, «заповнення 128-бітних файлових систем перевищить квантові можливості зберігання даних на Землі. Ви не зможете заповнити і зберігати 128-бітовий об'єм, не закип'ятивши при цьому океан»[4].

Деякі теоретичні межі в ZFS:

Приклад того, наскільки великі ці цифри: якби 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, ні іншого), то помилку вже не виправиш, та зате зіпсовані дані не будуть видані за достеменні.

Сенс наскрізного контролю цілісності даних в тому, щоб запобігти прихованому непомітному псуванню даних в результаті збою устаткування або вбудованого програмного забезпечення диска або контролера. Попри те, що ймовірність такої події здається низькою, деякі дослідження показують, що вона сповна значима для організацій будь-якого масштабу[8].

Створення легковагової файлової системи

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

У ZFS маніпулювати файловою системою в пулі легше, ніж у традиційних файлових системах; час і зусилля, потрібні для створення чи зміни файлової системи ZFS, більше нагадують об'єми робіт пов'язані з новим каталогом, ніж з маніпулюванням розділами в інших технологіях.

Додаткові можливості

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

Управління кешем

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

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

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

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

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

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

Обмеження

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

Платформи

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

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)[13] Інформація про налаштування доступна в FreeBSD Wiki [Архівовано 8 червня 2008 у Wayback Machine.].

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 у вигляді окремо завантажувального модуля, який поставляється окремо від ядра.

У 2013-му році було анонсовано альтернативний проєкт, OpenZFS[en] як повністю відкритий проєкт за участі розробників Illumos, FreeBSD, Linux, OS X та різних компаній, які використовують ZFS. OpenZFS також розповсюджується під ліцензією CDDL.

Лінус Торвальдс не рекомендував користуватися модулем zfs через несумісність ліцензій CDDL і GPLv2. Ситуація така, що через ліцензійну політику компанії Oracle шанси, що ZFS колись зможе увійти до основного складу ядра дуже малі. Лінус вважає прагнення використовувати ZFS лише даниною моді, а не технічними перевагами. Тести продуктивності, які вивчав Лінус, не свідчили на користь ZFS, а відсутність повноцінного супроводу не гарантує стабільність в довгостроковій перспективі.[14]

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 partition), що вказане вище. Також спроба форматування локальних дисків під Mac OS під згадану файлову систему будуть безуспішні. Це баг[16].

Примітки

[ред. | ред. код]
  1. http://bxr.su/f/sys/cddl/contrib/opensolaris/common/zfs/
  2. http://bxr.su/f/sys/cddl/boot/zfs/
  3. https://docs.oracle.com/cd/E19253-01/819-5461/zfsover-2/
  4. а б ZFS: the last word in file systems (ZFS: останнє слово в файлових системах). Архів оригіналу за 28 квітня 2006. Процитовано 7 липня 2008.
  5. ZFS: The Last Word in Filesystems, Jeff Bonwick's Blog. Архів оригіналу за 13 жовтня 2012. Процитовано 7 липня 2008.
  6. Sun Celebrates Successful One-Year Anniversary of OpenSolaris (Sun святкує успішну першу річницю OpenSolaris). Архів оригіналу за 28 вересня 2008. Процитовано 7 липня 2008.
  7. You say zeta, I say zetta (Ти скажеш zeta, я скажу zetta); (Блог Jeff'а Bonwick'а). Архів оригіналу за 23 лютого 2017. Процитовано 11 серпня 2014.
  8. Data integrity; доповідь CERN. Архів оригіналу за 13 жовтня 2012. Процитовано 7 липня 2008.
  9. Smokin' Mirrors; Блог Jeff'a Bonwick'a. Архів оригіналу за 13 жовтня 2012. Процитовано 7 липня 2008.
  10. Розподіл блоків ZFS; Блог Jeff'а Bonwick'а. Архів оригіналу за 13 жовтня 2012. Процитовано 7 липня 2008.
  11. Ті ж блоки — Дивна репелент стрічка; Flippin' off bits Weblog. Архів оригіналу за 13 жовтня 2012. Процитовано 7 липня 2008.
  12. Sun Microsystems. Архітектура ZFS для Lustre. Архів оригіналу за 22 січня 2009. Процитовано 8 липня 2008.
  13. Pawel Dawidek. ZFS committed to the FreeBSD base. Архів оригіналу за 13 жовтня 2012. Процитовано 7 липня 2008.
  14. Линус Торвальдс пояснил, в чём проблемы реализации ZFS для ядра Linux [Архівовано 10 січня 2020 у Wayback Machine.] // opennet.ru 10.01.2020
  15. Портування ZFS в OSX; zfs-дискусії. Архів оригіналу за 13 жовтня 2012. Процитовано 7 липня 2008.
  16. Mac OS X 10.5 9A326 Seeded; InsanelyMac Forums. Архів оригіналу за 13 жовтня 2012. Процитовано 7 липня 2008.

Посилання

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