У цій статті мова піде про побудову системи зберігання даних на основі OS FreeBSD і файлової системи ZFS.
Історія ця почалася з того, що було потрібно сховище даних обсягом більш 20TB. Дані періодично (не часто) повинні були записуватися туди з інших носіїв, при цьому звичайні користувачі тільки зчитували інформацію, нічого туди не записуючи. Важлива була швидкість доступу, збереження даних була не так критична, оскільки копії цих даних зберігалися в іншому місці.
Під сховище було виділено сервер HP Proliant з 12 дисками по 2TB кожен, які були об'єднані в RAID0 апаратним контролером.
Замовник спочатку планував розгорнути на цій апаратній платформі MS Windows Server. Однак з цим виникли певні труднощі.
Виявилося, що на завантажувальному диску MS Windows може використовувати не більше 2TB.
Єдина версія MS Windows (на момент написання цієї статті), яка не має цього обмеження, це система для платформи Itanium (UEFI засновані системи) [1], для нашої апаратури вона не годилася.
Для того, що б розгорнути на нашому сервері MS Windows можна було "вийняти" один диск з RAID0 і встановити туди цю ОС. В цьому випадку у нас виходило 2 логічних диска: системний на 2TB і додатковий на 22TB. Таким чином ми виділяємо під ОС цілий диск 2TB, при цьому ОС займає не більше 5GB, інший простір фактично не використовується.
Марнотратне рішення, до того ж дані могли і не поміститься в останніх 22TB. Не кажучи вже про те, що на відміну від FreeBSD і Linux, MS Windows Server - вільно не поширюється і ліцензії для неї стоять додаткових грошей.
Замість MS Windows Server цілком можна використовувати FreeBSD, яка позбавлена описаних вище недоліків, тобто цю ОС цілком можна розгорнути поверх 24TB RAID0, до того ж вона поширюється безкоштовно.
Перш ніж описувати процедуру установки ОС FreeBSD на наш сервер, розглянемо докладніше деякі особливості пристрою великих (2TB і більше) вінчестерів.
HDD складається з одного або декількох дисків і магнітних головок. Диски (металеві або керамічні) покриті шаром феромагнітного матеріалу. Магнітні головки з двох сторін кожного диска зчитують або залишають магнітні мітки безконтактним способом [2].
На заключному етапі складання HDD виконується т.зв. низькорівневе форматування - на поверхню дисків наносяться спеціальні магнітні мітки. За допомогою них на дисках формуються концентричні, замкнуті смуги - доріжки. які діляться на частини - сектори (рис.1). Доріжки на двох сторонах всіх дисків рівновіддалені від центру, тобто розташовані точно один над одним, об'єднуються в т.зв. циліндри.
Рис.3: чи не вирівняні розділи.
Якщо межі розділів обрані невдало то з'являються блоки файлової системи 512KB, які потрапляють на кордон між 4KB секторами, тобто зміщення таке, що розрізає 512B блок на 2 частини - перша частина належить одному сектору, а друга вже потрапляє в сусідній сектор. Через це обробка такого блоку 512B вимагає два циклу читання / запису замість одного, тобто крім поточного 4KB сектора необхідно обробити ще й його сусіда. Таким чином швидкість доступу до HDD може відчутно падати.
Перед тим як розвернути файлову систему і інсталювати OC на жорсткий диск (або масив з жорстких дисків), його необхідно розмітити тобто створити розділи і завантажувальний запис. Для ОС MS Windows звичайним способом розмітки є MBR (master boot record), максимальний розмір диска, який можна розмітити таким способом - 2TB. Для дисків об'ємом більше 2TB цей спосіб не годиться. Існує альтернативний спосіб - GPT, він дозволяє розмічати диски об'ємом до 9ZB (9 x 10 21 байт).
ОС MS Windows може використовувати розмічені GPT диски, однак завантажуватися вміє тільки з дисків розмічених MBR. Як вже говорилося вище, виняток становить лише версія цієї ОС для платформи Itanium.
ОС FreeBSD працює як з дисками MBR так і з дисками GPT.
Детальніше про MBR і GPT можна прочитати в [4, 5].
інсталяція FreeBSD
Замість звичайної для FreeBSD файлової системи UFS будемо використовувати файлову систему ZFS. Вона була розроблена компанією Sun Microsystems для операційної системи Solaris. ZFS призначена для зберігання великих обсягів даних, має порівняно простим управлінням томами, підтримує механізм снапшотов і контроль цілісності даних, і має ще багато корисних властивостей. ZFS є проектом з відкритим вихідним кодом і розповсюджується під ліцензією CDDL (Common Development and Distribution License). Детальніше про цю файлову систему можна прочитати в [6, 7].
Будемо встановлювати ОС FreeBSD 9.0-RELEASE, нам знадобитися DVD образ відповідної архітектури, який можна завантажити з сайту FreeBSD.
Завантажуємося з DVD, обираємо режим "Live CD" і входимо в систему як root (без пароля).
На першому етапі необхідно створити розділи і завантажувальний запис. Для цього скористаємося утилітою gpart. Для прикладу розмітимо диск на 20GB в GPT. Тут ми створюємо 3 розділу: завантажувальний запис, розділ swap, і основний розділ. Межі розділів вказуються з урахуванням вирівнювання по 4KB секторам, тобто значення меж в блоках повинні бути кратними 8. Після розмітки розділів створюємо завантажувальний запис і виводимо результат.
Далі в основному розділі створюємо файлову систему. Тут необхідно виконати ще одну додаткову операцію. Файлова система FreeBSD UFS має фіксований розмір блоку даних (16KB) і для усунення ефекту 512-4, описаного вище, вирівнювання розділів цілком достатньо. На відміну від UFS, файлова система ZFS має блоки даних не фіксованого розміру, тому при створенні ФС необхідно вказати фактичний розмір сектора (4096 байт). Це можна зробити за допомогою утиліти gnop [8].
Після цього створюємо розділи файлової системи і встановлюємо їх параметри (компресія даних і т.п.).
Розгортаємо файли ОС (в прикладі вказана установка для i386), створюємо основні конфіги і копіюємо файл zpool.cache для коректної роботи ZFS. Завершальний етап установки, размонтіруем ФС, встановлюємо квоти і точки монтування розділів. Установка завершена. Завантажуємо свіжовстановленому систему c HDD, оновлюємо порти і дерево початкових кодів системи, збираємо оновлений світ і ядро системи в потрібній конфігурації. Для доступу користувачів до файлів сховища по мережі можна використовувати samba або ftp, опис процедури установки і настройки цих сервісів виходить за рамки цієї статті.
Приклад скрипта інсталяції системи можна скачати [тут].