| ZFS | |
| Коротка назва | Z File System і ZFS |
|---|---|
| Розробник | Sun Microsystems, Oracle Corporation і OpenZFSd |
| Час/дата початку | листопад2005 |
| Максимальний розмір або ємність | 16 ексабайт |
| Конструктор | 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 files per directory[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]Вихідний код для фінального реліза був інтегрований в головну гілку розробкиSolaris31 жовтня2005 р.[5] і реалізований як частина 27-ї збіркиOpensolaris16 листопада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 2008.05 використовує ZFS як файлову систему за умовчанням.
Pawel Jakub Dawidek адаптував ZFS дляFreeBSD у вигляді модуля для ядра системи. ZFS включена у версію FreeBSD 7.0 (вийшла27 лютого2008)[13] Інформація про налаштування доступна вFreeBSD Wiki[Архівовано 8 червня 2008 уWayback Machine.].
Для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 (ZFSPOSIX 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]
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].