За технологією «CoW» нові дані не перезаписують старі, а пишуться у вільний простір і змінюється тільки покажчик. Правда у неї є і зворотна сторона медалі, при надмірному заповненні пулу відбувається падіння продуктивності. Тому рекомендується активно користуватися квотуванням і не допускати заповнення більше, ніж на 80% .Враховуючи, такі фактори, як розподіл навантаження між усіма дисками, що входять в пул, використання швидкого кеша і блоку зі змінним розміром, можна очікувати від ZFS порядного швидкодії.
Дійсно, що ZFS може зробити на старенькому P4 3Гц, c 2 ГБ пам'яті і одним жорстким диском SATA. Хоча в процесі тестування я і намагався налаштовувати різні параметри продуктивності ZFS (їх ми розглянемо трохи нижче), але кращі результати все одно виявилися наступними ZFS - 26, 35 сек проти UFS - 19,67 сек.
Тому віддаємо собі звіт, що ZFS призначена для досить потужного і сучасного обладнання з 64-бітної архітектурою і з не менш, ніж 4 Гб пам'яті. Але на старому залозі звичайно теж буде працює, перевірено особисто. Але який результат і навіщо мучити свій старенький комп?
І так, приступимо до препарування.
B ZFS немає понять томів і слайсів, як в традиційних ФС. Є пул, всередині якого створюються файлові системи або як їх ще називають датасета. Розмір файлових систем не фіксується і може бути легко збільшений в результаті приєднання нового диска до пулу. Тому тут не може наступити критичної ситуації повного заповнення диска.
Зменшити розмір ZFS пулу вже не можливо! Наприклад не можна вилучити диск, якщо це не дзеркало. Це відразу призведе до виходу з ладу всього пулу! Замінити диск на інший, більшого розміру, завжди будь ласка. Тому єдине, як можна зменшити пул, це зберегти всі дані на зовнішньому носії, зруйнувати пул і створити новий.
Установка FreeBSD на ZFS
Потрібно завантажитися з CD-диска або USB Memstick і почати установку як зазвичай. У FreeBSD 10 установка на ZFS вже повністю автоматизована через bsdinstaller. На етапі розмітки дисків досить вибрати пункт ZFS і система все зробить за вас. Ну а якщо хочете зробити це руками, то заходите в shell.
Тут слід звернути увагу на наступне: тип пулу (stripe, mirror або raidz1, raidz2, raidz3), далі вибрати потрібні диски для його створення. Пункт «forse 4k sectors» встановлює вирівнювання по 4К для кожного створеного розділу. Це важливо, якщо у вас нові жорсткі диски великого об'єму з розміром сектора 4K, а не 512Б. Якщо немає, то вкажіть NO.
Давайте розберемо, які кроки виконує установник і заодно навчимося працювати з пулами. Описані команди так само можна виконувати в ручному режимі, результат буде однаковий.
Установник автоматично створює три розділи GPT: один для завантажувача, розділ swap і основний розділ під пул.
Подивимося спершу на структуру диска
# Gpart show ada0
Так видаляється стара таблиця розділів
# Gpart destroy ada0
Створюється нова таблиця GPT
# Gpart create -s GPT ada0
Додаються три розділи
# Gpart add -s 512 -a 4k -t freebsd-boot -l boot0 ada0
# Gpart add -s 4g -a 4k -t freebsd-swap -l swap0 ada0
# Gpart add -a 4k -t freebsd-zfs -l disk0 ada0
Тут за допомогою опції -a задається вирівнювання розділів по 4Кб. Якщо у вас старі гвинти з фізичним сектором 512б, то опцію пропускаємо.
# Gpart bootcode -b / boot / pmbr -p / boot / gptzfsboot -i 1 ada0
Тут використовуються два завантажувача, перший pmbr в області Protective MBR перед GPT, він передає управління другому gptzfsboot, він на першому секторі розділу freebsd-boot. А вже на третьому етапі викликається loader.
Якщо раптом ви вирішите не використовувати ZFS, а повернетеся до UFS, то треба використовувати інший завантажувач
# Gpart bootcode -b / boot / pmbr -p / boot / gptboot -i 1 da0
Для роботи з ZFS завантажуємо модуль
При використанні дисків з сектором 4К важливо задати розмір блоку ZFS. Оскільки диск для сумісності рапортує про сектор 512Б. І за замовчуванням такий розмір встановлюється автоматично для блоку при створенні пулу. Тому обов'язково перед створенням пулу потрібно зробити наступне!
Поверх диска створюється пристрій gnop з розміром сектора 4К
# Gnop create -S 4096 / dev / gpt / disk0
# Zpool create -o altroot = / mnt -O canmount = off -m none zroot /dev/gpt/disk0.nop