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