(Оригінал)
Тюнінг
Питання новачка по 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 - це принципово нова технологія в індустрії файлових систем.