Zfs файлова система на одному диску. ZFS в порядку стиснення і дедуплікаціі linux. Файлові системи ZFS

(Оригінал)

  • Нестримне порушення принципу багаторівневості? (Оригінал)
  • Карти простору (оригінал)
  • ZFS Deduplication (англ.)
  • Тюнінг

    Питання новачка по zfs

    Які апаратні вимоги для zfs?

    Мінімальні, щоб тільки включилося - 512 М пам'яті і 32 біт процесор. Мінімальні робочі - 64 біт процесор (напр двох ядерний атом) і 1Гб пам'яті. Бажано - процесори Sandy або Ivy Bridge, можна молодші. Пам'яті чим більше, тим краще, але в домашніх умовах більше 8 Гб навряд чи потрібно. (Не забудьте зробити тюнінг, якщо пам'яті багато, см нижче.) Часто доводиться чути рекомендацію "гігабайт пам'яті на терабайт масиву". Але поки ні в одному з заслуговують на довіру цієї рекомендації знайти не вдалося. Так що, можливо, це міська легенда. В ідеалі і в production пам'ять ECC, але у переважної більшості камрадів пам'ять звичайна. Прим. Для режиму дедуплікаціі потрібні дуже великі, іноді непередбачувано великі, обсяги пам'яті, див нижче.

    Спроби використання в домашніх умовах SSD для кешування як читання, так і записи не дали помітних позитивних результатів. MikeMac

    Які є варіанти масивів (пулів) zfs?

    Масив будується як набір віртуальних пристроїв (vdev). Часто пул складається з одного vdev. Види vdev (Прим. Для стислості говоримо, що vdev складаються з дисків, хоча це можуть бути і розділи дисків і файли та ін.)

    • stripe - страйп, щось середнє між RAID0 і JBOD. Не має надмірності, вся інформація втрачається при смерті кожного з дисків.
    • mirror - дзеркало, приблизний аналог RAID1. Кожен диск дзеркала містить повну копію всієї інформації. Витримує смерть одного будь-якого диска. Можливо і потрійне дзеркало.
    • raidz1 - приблизний аналог RAID5, вимагає мінімум 3 дисків, обсяг одного диска йде на надмірність. Витримує смерть одного будь-якого диска.
    • raidz2 - приблизний аналог RAID6, вимагає мінімум 4 диска, обсяг двох дисків йде на надмірність. Витримує смерть двох будь-яких дисків.
    • raidz3 - вимагає мінімум 5 дисків, обсяг трьох дисків йде на надмірність. Витримує смерть трьох будь-яких дисків.

    Якщо в пул входить кілька vdev, то вони об'єднуються в страйп з vdev. Так можна зробити приблизний аналог RAID10 (страйп з дзеркал) або RAID60 (страйп з raidz2). Вхідні в пул vdev можуть мати різний розмір, але строго рекомендуються одного типу (хоча технічно можливо зібрати пул з різних типів vdev). Наприклад, не рекомендується об'єднувати в пул raidz1 і страйп через падіння надійності. MikeMac

    Які порівняльні переваги і недоліки різних типів vdev?

    • stripe
      • + Використовується весь простір дисків; збільшення продуктивності аналогічно RAID0
      • - низька надійність, вся інформація втрачається при смерті кожного з дисків.
    • mirror
      • + Висока продуктивність і надійність
      • - половина обсягу йде на надмірність (2/3 для потрійного дзеркала)
    • raidz1
      • + Економне використання дискового простору при забезпеченні надмірності
      • - деяке зниження продуктивності в порівнянні з дзеркалом; при смерті одного з дисків до закінчення перестроювання на новий диск маємо страйп в сенсі надійності
    • raidz2
      • + Висока надійність, розрахунки показують, що більш висока, ніж у дзеркала - якщо ви і втратите масив, то не через виходу дисків з ладу, а через проблеми з іншими компонентами
      • - два диска йдуть на надмірність
    • raidz3
      • + Параноїдальна надійність, зайва практично завжди
      • - три диска на надмірність. MikeMac

    І який варіант мені віддати перевагу?

    • stripe для малоцінної або легко відновлюваної інформації (оцініть і витрати свого часу)
    • mirror для високого навантаження випадкового читання / запису
    • raidz1 як базовий варіант для файлопомойка
    • raidz2 як преміум варіант

    NB: Ніякої RAID не замінює Backup. Важлива, невідновні інформація повинна бути збережена кудись назовні. MikeMac

    Детальніше про vdev

    Стиснення включати?

    Oleg Pyzhov : Які розділи стискати, які ні визначив досвідченим шляхом. Проц у мене атомний тому без варіантів тип стиснення lzjb

    • storage1 / system 6,74G compressratio 1.71x (тут лежать скрипти, а також каталоги для FreeBSD: / usr / src, / usr / obj, / usr / ports)
    • storage1 / soft 61,6G compressratio 1.17x (тут дістрібьютіви)
    • storage1 / document 302G compressratio 1.16x (тут багато дрібних файлів: DWG, DOC, XLS, JPG)
    • storage1 / timemachine стиск не іспольщуєт, тк неефективно .. MacOSX і так походу стискає свій Backup)
    • storage1 / media не стискується, тк неефективно

    Sergei V. Sh : Розміри датасета з купою фото

    • 93.2G (ashift \u003d 9 compresion \u003d on)
    • 95.0G (ashift \u003d 9 compresion \u003d off)
    • 94.5G (ashift \u003d 12 compresion \u003d on)
    • 96.1G (ashift \u003d 12 compresion \u003d off)

    Як перейменувати пул?

    zpool export poolname zpool import poolname newname

    Як видалити файл, якщо немає місця на диску з ZFS

    dd if \u003d / dev / null of \u003d file.avi rm file.avi

    UPD від MikeMac На практиці виявилося, що першим пунктом слід перевірити наявність снапшотов

    zfs list -t snapshot

    Якщо снапшоти є, то їх слід видаляти (http://docs.oracle.com/cd/E19253-01/819-5461/gbcya/index.html), починаючи з найбільш древніх, поки не з'явиться місце (або поки не будуть видалені всі).

    Якщо ж проводити операцію по усіканню файлу як вище - то в разі наявності його копії в снапшотов операція не вивільнить місця.

    Крім того, практика показує що усічення файлу краще проводити над невеликими файлами.

    Як дізнатися точний розміри пулу?

    • Як визначити повний обсяг пулу, доступний користувачеві (тобто за вирахуванням пішов на надмірність)?

    USED \u200b\u200b- обсяг зайнятого простору AVAIL - скільки залишилося

    • Сиди складовій USED + AVAIL?
    • в байтах для датасета zpool / var:

    zfs get -Hp -o value avail, used zpool / var | awk "(s + \u003d $ 1;) END (print s;)"

    • в терабайт:

    zfs get -Hp -o value avail, used zpool / var | awk "(S + \u003d $ 1;) END (printf"% .3f Tb. \\ N ", s / (1048576 * 1048576);)"

    від WearWolf.

    Замінив все диски на більші, але розмір пулу не змінився, що робити?

    Найбільш простий для новачка спосіб - перезавантажити систему. Якщо це не допомагає

    zpool online -e<имя пула> <имя любого диска из этого пула>

    Якщо задати автоувеліченіе за допомогою команди

    zpool set autoexpand \u003d on<имя пула>

    Пул буде сам виростати. Sergei V. Sh

    Автозбільшення пулу не працював перепробував все трюки - включення autoexpand \u003d on, Експорт-імпорт, ребут імпорт пулу був неможливий поки не деінсталіровал VirtualBox - розташований на пулі і при спробі примусового експорту просто веде весь нас в ребут.

    Дана рекомендації, як видно, не актуальна для нових версій ZoL.

    Для справжніх знавців збочень :)

    Q. Купити разом все хдд не маю можливості, а погіршувати конфиг не хочу
    A. мій випадок ... я зробив собі 8 + 2 (raidz2 з 10 дисків) - але дисків відразу не маю

    Q. А якими командами FreeBSD поділити 2T диск на половинки для цього?
    A. наприклад, так

    Q. маю raidz1 на 2T дисках. Замінити кожен на 4T - нуль проблем. Але в вихлопі залишається кілька шт 2T дисків. Журбинка.
    A.

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

    Установка ZFS трохи відрізняється від інших файлових систем, і в залежності від того, що ви використовуєте, може знадобитися невелике ноу-хау. Якщо ви новачок в цій файлової системи, найкраще йти по маршруту Ubuntu. Починаючи з Ubuntu 16.04, Canonical спрощує роботу з ZFS. Ще краще, Ubuntu - безумовно найбезпечніша реалізація ZFS в Linux, із простими налаштуваннями і процесом складання, який, як відомо, дуже надійний (в той час як інші дистрибутиви Linux мають високий ризик порушення ZFS).

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

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

    Налаштування ZFS

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

    Створення нової файлової системи ZFS трохи складніше, ніж просто відкриття редактора розділів Gparted. Замість цього вам потрібно буде взаємодіяти з ним на рівні командного рядка. У вікні терміналу запустіть lsblkкоманда. Запуск команди «list block» виведе всі накопичувачі на вашому ПК Linux.

    Пройдіть і вирішіть, які жорсткі диски використовувати для вашого Z-пулу, і пам'ятайте імена. У цьому підручнику наші три диска в пулі ZFS / DEV / SDB, / DEV / SDCі / DEV / SDD.

    Потім вам потрібно повністю обнулити жорсткі диски, вибрані для Z-пулу, щоб у них більше не було даних. З використанням dd команду, повторно кожен з дисків. Це займе деякий час.

    Примітка: зміна / DEV / SDx з ідентифікатором диска, знайденим за допомогою lsblkкоманда ( SDBІ т.д.).

    Sudo dd if \u003d / dev / zero of \u003d / dev / sdX bs \u003d 8M

    коли ddзакінчується, запускає FDISKкоманда. Запуск fdisk покаже багато інформації про жорстких дисках, включаючи інформацію про файлову систему для кожного. Перегляньте свідчення і переконайтеся, що жоден з дисків, які ви видалили, не має файлової системи. Цей крок має вирішальне значення, оскільки ZFS не використовує традиційний формат розбиття.

    Суду FDISK-л

    Якщо ж лінія індикатора FDISKзчитування виглядає добре, безпечно створити новий Z-пул ZFS. Для простого налаштування Z-пулу виконайте наступні дії:

    Sudo zpool create -f newzpool / dev / sdb dev / sdc / dev / sdd

    Базова установка дозволить більшості користувачів задовольнити свої потреби в сховищах. Однак ті, які цінують свої дані і потребують захисту, не повинні йти з такою базовою налаштуванням. Замість цього подумайте про створення пулу ZFS з RaidZ.

    Використання RaidZ в поєднанні з вашим ZFS-пулом гарантує, що ваші дані будуть надмірними, з безліччю резервних копій. Щоб створити пул ZFS з RaidZ, запустіть:

    Sudo zpool create -f newzpool raidz / dev / sdb dev / sdc / dev / sdd

    Щоб додати файли в новий пул зберігання ZFS, відкрийте диспетчер файлів і перейдіть в корінь файлової системи. Помістіть файли всередині папки з ім'ям ZFS Zpool.

    Додати диски в ZFS Zpool

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

    У цьому прикладі ми додамо ще два диска в Zpool (/ dev / sde і / dev / sdf).

    Примітка: якщо ваша установка ZFS не використовує RaidZ, видаліть її з команди.

    Sudo zpool add -f newzpool raidz / dev / sde / dev / sdf

    Видалити пул ZFS

    Найчастіше обсяги ZFS ламаються і стають непридатними. Коли це станеться, вам може знадобитися видалити пул зберігання. Щоб видалити пул зберігання, відкрийте термінал і використовуйте zfs destroy команда.

    Sudo zpool знищити newzpool

    біг zpool знищитизаймає досить багато часу, в залежності від того, скільки даних знаходиться в вашому пулі зберігання. Ви дізнаєтеся, що Zpool повністю знищений, коли термінал знову використовується.

    Перевірити статус ZFS

    Швидкий спосіб перевірити статус вашого Zpool за допомогою статус zpoolкоманда. З його допомогою користувачі можуть бачити базове зчитування томи ZFS, як він це робить і чи є які-небудь помилки. Щоб перевірити статус, виконайте наступну команду.

    ZFS в порядку стиснення і дедуплікаціі linux

    який порядок запису даних в файлову систему zfs в linux?

    єдиний конкретний документ я знайшов на http://docs.oracle.com/cd/E36784_01/html/E36835/gkknx.html каже: When a file is written, the data is compressed, encrypted, and the checksum is verified. Then, the data is deduplicated, if possible.

    але якщо це правда, то дедуплікація НЕ буде дедуплікаціі блоків, стиснутих за різними алгоритмами стиснення.

    Я тестував mysqlf, і я вважаю, що порядок наступний: dedup, compress, encrypt.

    мій тест-настройка:

    Zpool create tank / dev / sdb zfs create tank / lz4 zfs create tank / gzip9 zfs set compression \u003d lz4 tank / lz4 zfs set compression \u003d gzip9 tank / gzip9 zfs set dedup \u003d on tank

    вихід zfs list

    NAME USED AVAIL REFER MOUNTPOINT tank 106K 19,3G 19K / tank tank / gzip9 19K 19,3G 19K / tank / gzip9 tank / lz4 19K 19,3G 19K / tank / lz4

    згенеруйте випадковий файл за допомогою dd if \u003d / dev / urandom of \u003d random.txt count \u003d 128K bs \u003d 1024

    131072 + 0 Datensätze ein 131072 + 0 Datensätze aus 134217728 Bytes (134 MB) kopiert, 12,8786 s, 10,4 MB / s

    висновок списку zpool в порожній пул:

    NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT tank 19,9G 134K 19,9G - 0% 0% 1.00x ONLINE -

    потім скопіюйте файли в набори даних з різними алгоритмами стиснення:

    Cp random.txt / tank / lz4 cp random.txt / tank / gzip9

    вихід zfs list після копіювання:

    NAME USED AVAIL REFER MOUNTPOINT tank 257M 19,1G 19K / tank tank / gzip9 128M 19,1G 128M / tank / gzip9 tank / lz4 128M 19,1G 128M / tank / lz4

    вихід zpool list afer копіювання:

    NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT tank 19,9G 129M 19,7G - 0% 0% 2.00x ONLINE -

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

    будь ласка, хто-небудь може перевірити, чи правильно це?

    1 відповідей

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

    моє припущення з випадковим файлом було невірним. Здається, що ZFS перериває стиснення, якщо не може досягти певного мінімального коефіцієнта стиснення.

    інша певна річ, котор потрібно зауважити що уявлення LZ4 на нестискуваних даних дуже високо. Це досягається шляхом включення механізму "раннього переривання", який спрацьовує, якщо LZ4 не може відповідати очікуваному мінімального коефіцієнта стиснення (12,5% на ZFS).

    У світі * nix-систем все більш популярними стають файлові системи ZFS і Btrfs. Популярність ця цілком заслужена - на відміну від своїх попередників, вони позбавлені деяких проблем і мають безліч незаперечних переваг. А не так давно їм присвоєно статус стабільних. Все це і спонукало написати цю статтю.

    WARNING!

    Деякі описувані тут команди здатні необоротно знищити твої дані. Тричі перевіряй введене, перш ніж натискати Enter.

    Мабуть, перш ніж перейти до практики, потрібно дати деякі пояснення, що собою представляють файлові системи нового покоління. Почну з ZFS. Ця ФС була розроблена для Solaris і в даний час, оскільки Oracle закрила вихідний код, форкнута в версію OpenZFS. Надалі під ZFS буде матися на увазі саме форк. Ось лише деякі з ключових особливостей ZFS:

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

    Btrfs почала розроблятися в пику ZFS компанією Oracle - ще до покупки Sun. Я не буду описувати її особливості - вони в ZFS і Btrfs, в общем-то, схожі. Відмінності ж від ZFS такі:

    • підтримка версій файлів (в термінології Btrfs званих поколіннями) - є можливість переглянути список файлів, які змінювалися з моменту створення снапшотов;
    • відсутність підтримки zvol, віртуальних блокових пристроїв, на яких можна розмістити, наприклад, розділ підкачки, - але дане відсутність цілком компенсується loopback-пристроями.

    Знайомство з ZFSonLinux

    Для установки ZFSonLinux потрібно 64-розрядний процесор (можна і 32, але розробники не обіцяють стабільності роботи в такому випадку) і, відповідно, 64-розрядний дистрибутив з ядром не нижче 2.6.26 - я використовував Ubuntu 13.10. Пам'яті теж має бути достатньо - не менше 2 Гб. Передбачається, що основні пакети, необхідні для збирання і компіляції модулів і ядра, вже встановлені. Накочується додаткові пакети і качаємо потрібні тарболли:

    $ Sudo apt-get install alien zlib1g-dev uuid-dev libblkid-dev libselinux-dev parted lsscsi wget $ mkdir zfs && cd $ _ $ wget http://bit.ly/18CpniI $ wget http://bit.ly/ 1cEzO0V

    Розпаковуємо обидва архіву, але спершу збираємо SPL - шар сумісності з Solaris, а вже потім власне ZFS. Зазначу, що, оскільки ми ставимо найсвіжішу версію ZFSonLinux, DKMS (механізм, що дозволяє автоматично перебудовувати поточні модулі ядра з драйверами пристроїв після оновлення версії ядра) недоступний, і в разі поновлення ядра доведеться збирати пакети заново вручну.

    $ Tar -xzf spl-0.6.2.tar.gz $ tar -xzf zfs-0.6.2.tar.gz $ cd spl-0.6.2 $ ./configure $ make deb-utils deb-kmod

    Перш ніж компілювати ZFS, потрібно поставити Хідер, заодно поставимо і інші свіжозібране пакети:

    $ Sudo dpkg -i * .deb

    Нарешті, збираємо і ставимо ZFS:

    $ Cd ../zfs-0.6.2 $ ./configure $ make deb-utils deb-kmod $ sudo dpkg -i * .deb


    Перенесення кореневої ФС на ZFS з шифруванням і створенням RAIDZ

    Припустимо, ти хочеш отримати безпечну, зашифровану, але в той же час отказоустойчивую файлову систему. У випадку з класичними ФС старого покоління тобі довелося б вибирати між шифруванням і отказоустойчивостью, оскільки ці речі кілька несумісні. У ZFS, однак, існує можливість «склеїти» їх між собою. Сучасна пропріетарна реалізація цієї ФС підтримує шифрування. Відкрита реалізація з версією пулу 28 це не підтримує - але ніщо не заважає за допомогою cryptsetup створити том (або кілька томів) LUKS і вже поверх них розгортати пул. Що до відмовостійкості ZFS, підтримується створення мультідіскових масивів. Технологія ця називається RAIDZ. Різні її варіанти дозволяють пережити відмову від одного до трьох дисків, і вона, в силу деяких особливостей ZFS, вільна від одного з фундаментальних недоліків традиційних stripe + parity RAID-масивів - write hole (ситуація з RAID 5 / RAID 6, коли при активних операціях записи і відключенні харчування дані на дисках в результаті відрізняються).

    INFO

    Шифрування уповільнює роботу з даними. Не варто його використовувати на старих комп'ютерах.

    Звичайно, найпростіше, якщо у тебе не стоїть ніякої системи - в цьому випадку морочитися доведеться менше. Але живемо ми не в ідеальному світі, тому розповім про те, як перенести вже встановлену систему без розділу / boot на масив RAIDZ поверх томів LUKS.

    Насамперед потрібно створити сам цей розділ - без нього перенесення буде неможливий, оскільки система банально не завантажиться. Припустимо для простоти, що на диску є єдиний розділ з Ubuntu, а хочемо ми створити RAIDZ першого рівня (аналог RAID 5, для нього потрібно мінімум три пристрої, RAIDZ же високих рівнів в домашніх умовах сенсу робити я не бачу). Створюємо за допомогою пріоритетного редактора розділів два розділи - один розміром 256-512 Мб, де і буде розміщений / boot, і ще один, з розміром не менше поточного кореневого, причому останню процедуру повторюємо на всіх трьох жорстких дисках. Перечитаємо таблицю розділів командою

    # Partprobe / dev / disk / by-id / ata-VBOX_HARDDISK_VB203f5b52-a7ff5309

    і створимо файлову систему (ext3) на розділі поменше:

    # Mke2fs -j / dev / disk / by-id / ata-VBOX_HARDDISK_VB203f5b52-a7ff5309-part2 -L boot

    Зрозуміло, в твоєму випадку ідентифікатори жорстких дисків будуть іншими. Слідом за цим потрібно зашифрувати розділ, на якому буде знаходитися те LUKS, і повторити цю процедуру для всіх інших розділів, на яких в кінцевому рахунку буде знаходитися масив RAIDZ:

    # Cryptsetup -h \u003d sha512 -c \u003d aes-cbc-essiv: sha256 -s \u003d 256 -y luksFormat / dev / disk / by-id / ata-VBOX_HARDDISK_VB203f5b52-a7ff5309-part3 # cryptsetup -h \u003d sha512 -c \u003d aes- cbc-essiv: sha256 -s \u003d 256 -y luksFormat / dev / disk / by-id / ata-VBOX_HARDDISK_VB2fdd0cb1-d6302c80-part1 # cryptsetup -h \u003d sha512 -c \u003d aes-cbc-essiv: sha256 -s \u003d 256 -y luksFormat / dev / disk / by-id / ata-VBOX_HARDDISK_VB781404e0-0dba6250-part1

    Підключаємо зашифровані томи:

    # Cryptsetup luksOpen / dev / disk / by-id / ata-VBOX_HARDDISK_VB203f5b52-a7ff5309-part3 crypto0 # cryptsetup luksOpen / dev / disk / by-id / ata-VBOX_HARDDISK_VB2fdd0cb1-d6302c80-part1 crypto1 # cryptsetup luksOpen / dev / disk / by- id / ata-VBOX_HARDDISK_VB781404e0-0dba6250-part1 crypto2

    І створюємо пул ZFS:

    # Zpool create -o ashift \u003d 12 zroot raidz dm-name-crypto0 dm-name-crypto1 dm-name-crypto2

    Слідом створюємо дві вкладені одна в одну файлові системи:

    # Zfs create zroot / ROOT # zfs create zroot / ROOT / ubuntu-1310-root

    Отмонтіруем все файлові системи ZFS і встановлюємо деякі властивості ФС і пулу:

    # Zfs umount -a # zfs set mountpoint \u003d / zroot / ROOT / ubuntu-1310-root # zpool set bootfs \u003d zroot / ROOT / ubuntu-1310-root zroot

    Нарешті, експортуємо пул:

    # Zpool export zroot



    Перенесення і конфігурація системи

    Спочатку копіюємо каталог / boot на нешифрований розділ, щоб слідом встановити туди завантажувач:

    # Mkdir / mnt / boot # mount / dev / disk / by-label / boot / mnt / boot # cp -r / boot / * / mnt / boot / # umount / mnt / boot

    Після цього перенесемо grub на окремий розділ / boot, для чого додамо в / etc / fstab cтрочку

    # <...> LABEL \u003d boot / boot ext3 errors \u003d remount-ro 0 0

    Монтуємо і перегенеріруем конфиг grub:

    # Grub-mkconfig -o /boot/grub/grub.cfg

    Для перевірки перезавантажуємося. Якщо все нормально, видаляємо старе вміст каталогу / boot, не забувши попередньо отмонтировать розділ.

    Прийшов час клонувати Ubuntu. Весь процес клонування описаний в повній версії статті, яку можна знайти на сайті] [, тут же торкнуся деякі тонкощі, які стосуються ZFS. Для нормального завантаження з пулу ZFS потрібні деякі скрипти initramfs. На щастя, винаходити їх не потрібно - вони лежать на GitHub. Викачуємо репозиторій (всі дії виробляємо в chroot):

    # Git clone http://bit.ly/1esoc8i

    І копіюємо файли в необхідні місця. Я вніс єдину правку: замість пулу rpool поставив zroot. Тепер потрібно записати hostid в файл / etc / hostid. Це потрібно зробити через те, що ZFS портирована з Solaris, і шар сумісності вимагає його наявності:

    # Hostid\u003e / etc / hostid

    Нарешті, потрібно згенерувати initramfs. Ні в якому разі не використовуй update-initramfs. Він перезаписує існуючий файл, і, якщо виникнуть труднощі, завантажитися з нормальної системи буде проблематично. Замість нього використовуй команду

    # Mkinitramfs -o /boot/initrd.img-$(uname -r) -crypto-zfs

    Розділ / boot повинен бути подмонтіровать.

    Потім потрібно додати пункт меню в grub. Через досить хитрою конфігурації (ще б пак: три кріптотома, поверх яких розташована не зовсім типова для Linux файлова система) в chroot це зробити не вийшло, тому виходимо з нього в основну (поки ще) систему і додаємо приблизно такі рядки:

    # Vi /etc/grub.d/40_custom menuentry "Ubuntu crypto ZFS" (#<...> linux /vmlinuz-3.11.0-14-generic boot \u003d zfs rpool \u003d zroot initrd /initrd.img-3.11.0-14-generic-crypto-zfs)

    Запускаємо update-grub, перезавантажується, вибираємо новий пункт меню і радіємо.

    Тюнінг ZFS і корисні трюки c Btrfs

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

    У разі ж використання Btrfs ніяких особливих проблем не спостерігається. Проте якісь тонкощі все ж мають місце - особливо якщо є бажання не просто «поставити і забути», а задіяти нові можливості. Про деякі з них я і розповім нижче.

    Відключення зміни часу доступу до файлів та оптимізація для SSD-накопичувачів

    Як відомо, в * nix-системах кожен раз при зверненні до файлів час доступу до них змінюється. Це щоразу провокує запис на носій. Якщо ти працюєш одночасно з безліччю файлів або у тебе SSD-накопичувач, це може виявитися неприйнятним. У класичних файлових системах для відключення записи atime потрібно було додати параметр noatime в опції команди mount або в / etc / fstab. У ZFS ж для відключення використовується наступна команда (звичайно, в твоєму випадку ФС може бути інший):

    # Zfs set atime \u003d off zroot / ROOT / ubuntu-1310-root

    У Btrfs, крім вищезгаданої опції noatime, є опція ssd і більш оптимізує ssd_spread. Перша з них починаючи з ядра 2.6.31, як правило, встановлюється автоматично, друга призначена для дешевих SSD-накопичувачів (прискорює їх роботу).

    ZFS - дублювання файлів

    При роботі з дуже важливими даними часом виникає лякає думка, що відключать електроенергію або вийде з ладу один з жорстких дисків. Перше в російських умовах дуже навіть можливо, а друге хоч і малоймовірно, але теж трапляється. На щастя, розробники ZFS, мабуть, стикалися з подібним не раз і додали опцію дублювання даних. Файли при цьому, якщо можливо, розміщуються на незалежних дисках. Припустимо, у тебе є ФС zroot / HOME / home-1310. Для установки прапора дублювання набери наступну команду:

    # Zfs set copies \u003d 2 zroot / HOME / home-1310

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

    Відключення автомонтірованіе в ZFS

    При підключенні пулу за замовчуванням автоматом монтуються всі вкладені файлові системи. Це може викликати деякий конфуз, оскільки, наприклад, у випадку з наведеної вище конфігурацією користувачеві не потрібен доступ ні до zroot, ні до zroot / ROOT. Існує можливість відключити автомонтірованіе за допомогою двох наступних команд (для даного випадку):

    # Zfs set canmount \u003d noauto zroot / ROOT # zfs set canmount \u003d noauto zroot

    стиснення даних

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

    # Zfs set compression \u003d on zroot / ROOT / var-log

    У Btrfs для включення стиснення потрібно поставити опцію compress в / etc / fstab.

    Автоматичне створення снапшотов в ZFS

    Як відомо, ZFS дозволяє створювати снапшоти. Ручками, однак, їх створювати ліниво, та й є ймовірність просто забути про це. У Solaris для автоматизації цієї процедури є служба Time Slider, але вона - от халепа! - хоч і використовує функції ZFS, в її склад не входить, тому в ZFSonLinux її немає. Але засмучуватися не варто: є скрипт для автоматичного їх створення і для Linux. Завантажити його і встановимо потрібні права:

    # Wget -O /usr/local/sbin/zfs-auto-snapshot.sh http://bit.ly/1hqcw3r # chmod + x /usr/local/sbin/zfs-auto-snapshot.sh

    Змінимо спершу префікс для снапшотов, оскільки за замовчуванням він не особливо «говорить». Для цього змінимо в скрипті параметр opt_prefix з zfs-auto-snap на snapshot. Потім встановимо деякі змінні файлової системи:

    # Zfs set com.sun: auto-snapshot \u003d true zroot / ROOT / ubuntu-1310-root # zfs set snapdir \u003d visible zroot / ROOT / ubuntu-1310-root

    Перший параметр потрібен для скрипта, другий же відкриває прямий доступ до снапшотов, що теж потрібно для скрипта.

    Тепер можна вже створювати скрипт для cron (/etc/cron.daily/autosnap). Розглянемо випадок, коли потрібно створювати снапшоти кожен день і зберігати їх протягом місяця:

    #! / Bin / bash ZFS_FILESYS \u003d "zroot / ROOT / ubuntu-1310-root" /usr/local/sbin/zfs-auto-snapshot.sh --quiet --syslog --label \u003d daily --keep \u003d 31 " $ ZFS_FILESYS "

    Для перегляду створених снапшотов використовуй команду zfs list -t snapshot, а для відновлення стану - zfs rollback імя_снапшота.

    ZFS - комплексний приклад

    Нижче будуть приведені команди, що створюють кілька ФС в пулі для різних цілей і демонструють гнучкість ZFS.

    # Zfs create -o compression \u003d on -o mountpoint \u003d / usr zroot / ROOT / usr # zfs create -o compression \u003d on -o setuid \u003d off -o mountpoint \u003d / usr / local / zroot / ROOT / usr-local # zfs create -o compression \u003d on -o exec \u003d off -o setuid \u003d off -o mountpoint \u003d / var / crash zroot / ROOT / var-crash # zfs create -o exec \u003d off -o setuid \u003d off -o mountpoint \u003d / var / db zroot / ROOT / var-db # zfs create -o compression \u003d on -o exec \u003d off -o setuid \u003d off -o mountpoint \u003d / var / log zroot / ROOT / var-log # zfs create -o compression \u003d gzip -o exec \u003d off -o setuid \u003d off -o mountpoint \u003d / var / mail zroot / ROOT / var-mail # zfs create -o exec \u003d off -o setuid \u003d off -o mountpoint \u003d / var / run zroot / ROOT / var-run # zfs create -o exec \u003d off -o setuid \u003d off -o copies \u003d 2 -o mountpoint \u003d / home zroot / HOME / home # zfs create -o exec \u003d off -o setuid \u003d off -o copies \u003d 3 -o mountpoint \u003d / home / rom zroot / HOME / home-rom

    Дефрагментація Btrfs

    Дефрагментація в Btrfs не такі вже й необхідна, але в окремих випадках дозволяє звільнити зайняте простір. Вона може бути проведена тільки на змонтованій системі. Зауважу, що доступ до даних під час дефрагментації зберігається - як на читання, так і на запис. Для запуску процедури дефрагментації використовуй наступну команду:

    # Btrfs filesystem defrag /

    На старих ядрах ця процедура видаляла все COW-копії, такі як снапшоти і дедупліцірованние дані, так що, якщо ти їх використовуєш на ядрах старше 2.6.37, дефрагментація тобі тільки зашкодить.

    RAID на Btrfs

    Як і у випадку з ZFS, Btrfs підтримує багатотомні масиви, але на відміну від ZFS називаються вони класично. На даний момент, однак, підтримуються тільки RAID 0, RAID 1 і їх комбінація, RAID 5 і раніше на етапі альфа-тестування. Для створення нового масиву RAID 10 попросту використовуй таку команду (з твоїми пристроями):

    # Mkfs.btrfs / dev / sda1 / dev / sdb1 / dev / sdc1 / dev / sdd1

    Ну а якщо потрібно конвертувати існуючу ФС в RAID, то і для цього є команди:

    # Btrfs device add / dev / sdb1 / dev / sdc1 / dev / sdd1 / # btrfs balance start -dconvert \u003d raid10 -mconvert \u003d raid10 /

    Перша команда додає пристрою до файлової системи, друга ж саме і перебалансірует всі дані і метадані для перетворення цього набору томів у масив RAID 10.

    снапшоти Btrfs

    Природно, Btrfs підтримує снапшоти - причому крім звичайних снапшотов доступні снапшоти з можливістю запису (більш того, вони і створюються за замовчуванням). Для створення снапшотов використовується наступна команда:

    # Btrfs subvol snap -r / /.snapshots/2013-12-16-17-41

    Детальніше про створення снапшотов, як ручному, так і автоматичному, можна прочитати в статті «Подушка безпеки», опублікованій в квітневому номері] [за 2013 рік. Тут же я розповім, як при наявності снапшотов відстежити, які файли змінилися з моменту його створення. Для цього в Btrfs є так зване покоління файлів. Можливість ця використовується для внутрішніх цілей, але є команда, що дозволяє дивитися список останніх змін - нею і скористаємося. Спочатку дізнаємося поточне покоління файлів:

    # Btrfs subvol find-new / 99999999

    Якщо такого покоління немає (у чому можна практично не сумніватися), виведеться останнім. Тепер цю ж саму команду виконаємо над снапшотов:

    # Btrfs subvol find-new /.snapshots/2013-12-17-14-28 99999999

    Якщо покоління будуть відрізнятися, а вони будуть, то дивимося, які ж файли змінювалися з часу створення снапшотов. У моєму випадку команда була наступною:

    # Btrfs subvol find-new / 96 | awk "(print $ 17)" | sort | uniq

    NILFS2 - ще одна файлова система з підтримкою COW

    Починаючи з ядра 2.6.30 в Linux з'явилася підтримка ще однієї ФС - NILFS2. Абревіатура ця розшифровується як new implementation of a log-structured file system. Основна особливість даної ФС полягає в тому, що раз в декілька секунд в ній автоматично створюються чек-пойнти - приблизний аналог снапшотов з однією відмінністю: через якийсь час вони видаляються складальником сміття. Користувач, проте, може перетворити як чек-пойнт в снапшот, в результаті чого для збирача сміття він стає невидимим, так і навпаки. Таким чином, NILFS2 можна розглядати як своєрідну «Вікіпедію», де фіксуються будь-які зміни. Через цю особливість - писати будь-які нові дані не поверх існуючих, а в нові блоки - вона прекрасно підходить для SSD-накопичувачів, де, як відомо, перезапис даних не вітається.

    Так, NILFS2 не так відома, як ZFS або Btrfs. Але в деяких випадках її застосування буде більш виправданим.

    висновок

    Може бути, я здамся суб'єктивним, але ZFS, якщо її порівнювати з Btrfs, виграє. По-перше, деякі можливості Btrfs досі перебувають в зародковому стані, не дивлячись на те, що їй вже більше п'яти років. По-друге, ZFS, при інших рівних умовах, більш обкатана. І по-третє, як просто інструментів для роботи з ZFS, так і її можливостей більше.

    З іншого боку, як би не була хороша ZFS, за ліцензійними міркувань вона навряд чи коли-небудь буде включена в mainline kernel. Так що, якщо не з'явиться який-небудь ще конкурент, доведеться користуватися Btrfs.

    Facebook і Btrfs

    У листопаді 2013 року лідер команди розробників Btrfs Кріс Мейсон перейшов на роботу в Facebook. Це ж зробив і Джозеф Бацік, мейнтейнера гілки btrfs-next. Вони увійшли до складу відділу компанії, що спеціалізується на низькорівневих розробках, де і займаються нині ядром Linux - зокрема, працюють над Btrfs. Розробники заявили також, що Facebook зацікавлена \u200b\u200bу розвитку Btrfs, так що причин хвилюватися у співтовариства немає рішуче ніяких.

    Для операційної системи, перенесення якої на інші платформи викликало сплеск діаметрально різних емоцій у розробників: від бурхливого захоплення і тріумфування, до прямо протилежного - роздратування і люті.

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

    • 128-бітна файлова система, що дає можливість зберігання практично необмежених обсягів інформації. На практиці це означає, що ZFS теоретично може зберігати обсяги інформації, які перевищують сьогоднішні технологічні можливості, за умови використання поточного підходу до організації зберігання даних;
    • Дуже велика увага приділяється цілісності і надійності зберігання, як призначених для користувача даних, так і метаданих ФС, для цього використовуються просунуті алгоритми хешування;
    • Підтримка снапшотов (snapshot) і пулів зберігання (storage pools), завдяки чому ZFS поєднує в собі можливості файлової системи і системи управління томами (нова концепція storage-пулів);
    • Відсутність необхідності в fsck завдяки цій ФС;
    • Традиційно вважається, що ZFS - це досить продуктивна файлова система. Втім, це твердження іноді ставиться під сумнів. Як мінімум, конкретні цифри дуже сильно залежать від типу завдання, на якій проводиться подібне порівняльне тестування продуктивності;
    • Можливості для виборчого стиснення і / або шифрування окремих файлів або файлових систем;
    • Підтримка автоматичного розпізнавання і об'єднання (виключення) файлів-дублікатів;
    • ZFS не підтримує квоти. Вірніше сказати, її підтримка квот кілька своєрідна: поняття «виділення квоти» означає в термінології ZFS то, що ви обмежуєте розмір створюваної файлової системи. Дизайн системи такий, що кожному користувачеві ZFS слід виділяти свою власну файлову систему з усіма супутніми обмеженнями;
    • Певні проблеми створює не технічна особливість ФС - несумісна з GPL ліцензія на код (CDDL);
    • Щоб показати інноваційність ZFS не тільки в галузі технічних рішень, приведу, як приклад, можливість управляти основними можливостями ФС через веб-інтерфейс;
    • І, так як, повторюся - ZFS надзвичайно великий в своїх можливостях і особливостях, і перерахувати всіх їх тут просто не представляється можливим.

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

    Якщо додати сюди її щодо зрілий вік і дуже хороший стан в плані стабільності коду - стають зрозумілі ті бурі емоцій, які викликали новини про публікація її коду під відкритою ліцензією, а також портування цієї інноваційної ФС на такі популярні ОС, як FreeBSD, Linux, MacOS X.

    Що стосується різко негативних відгуків на цю, поза всякими сумнівами, вже знамениту файлову систему, то вони зводяться в основному до наступних тез. Один з провідних розробників Linux, до речі, відповідальний за підтримку її дискової підсистеми, (Andrew Morton), вибухнув гнівними викриттями ZFS в «жахливому порушенні рівнів реалізації».

    Ендрю Мортал, Провідний розробник дискової підсистеми ядра Linux

    Деякі інші розробники приєдналася до його звинуваченнями в «страшному дизайні» ZFS, і на даний момент можна констатувати, що Андрія Мортана на адресу ZFS - « жахливе порушення рівнів дизайну»І« необгрунтована мішанина з коду»- стали вже свого роду інтернет-мемами, на які заочно вже спробували відповісти розробники з Oracle, Linux, RedHat, FreeBSD та інших відомих проектів.

    В якості відповіді на ці випади, провідного розробника ZFS (Jeff Bonwick):

    «Всі ці звинувачення в порушенні дизайну рівнів реалізації файлової системи, тому, що ZFS комбінує в собі одночасно функціональність файлової системи, менеджера томів і програмного RAID-контролера. Я вважаю, що відповідь на цю претензію буде залежати від того, що розуміти під звинуваченням "порушує дизайн рівнів".

    В процесі розробки ZFS ми встановили, що стандартний дизайн абстрагованих рівнів дискового стека провокує дивовижне кількість непотрібної складності і надлишкової логіки. В процесі рефакторінга ми прийшли до думки, що єдине рішення проблеми - це фундаментальний перегляд кордонів шарів і їх відносин, - що робить все відразу набагато простішим ».

    Яку б позицію щодо ZFS не посідали особисто ви, слід визнати як мінімум одне: ZFS - це принципово нова технологія в індустрії файлових систем.