Настройка огромных дисков с помощью GPT под FreeBSD


Вот на работе встала необходимость создания о-о-очень большого файлообменника,
куда люди должны собирать всё-всё-всё и даже больше. Для этой цели был специально
куплен сервер Intel SSR212MC2R2 - этакий монстр, в который вставляется аж 12
терабайтных дисков SATA. Штука очень тяжелая - и в лифт еле-еле влезла. А в
стойку мы ее втроём запихивали. И вот первый запуск. Оказалось что всё это
работает под контроллером LSI - противоречивая штука. С одной стороны надежная,
а с другой - тормозная. Но в принципе, сервер-то бюджетный. Эконом-класс для
малого и среднего офиса наших дней. Зато LSI позволяет сделать много разных
комбинаций RAID - а с 12-ю дисками этих комбинаций просто реально много.

Первый блин - комом. FreeBSD 7 не видит таких больших дисков - выдает ошибки
геометрии уже на стадии sysinstall. Оно и понятно: fdisk, disklabel, df - до сих
пор не заточены под такие объемы - об этом сказано и на официальном сайте. Идея -
отрезать от массива один диск под ОС, а остальные одиннадцать - объединить в RAID
тоже провалилась. Точнее, я так и сделал - но когда стал заливать реальные
данные, то проверка показала, что производительность системы крайней низка -
10-15Mb/s. Для сервера, пусть даже буджетного, это неприемлемо. Поэтому корпус
пришлось разобрать и внутри компьютера поковыряться. Как и ожидалось нашлись
крайне любопытные вещи.

Итак, внутри нашлось специально выделенное место для двух загрузочных дисков
SAS/SATA размером 2'5 и разъем для подключения флешки прямо на материнской плате.
Причем, судя по биосу - грузиться можно было с чего угодно. Быстро купил Seagate
SAS объемом 70Gb и поставился на него. Остальные 12 дисков были объединены в
RAID5, который, на проверку, оказался не самым быстрым решением. Быстрее (оно и
понятно) - RAID0 (зеркалирование), но оно сокращает объем массива в два раза, а
главным требованием всё-таки был большой объем. FreeBSD встала и обновилась за
5 минут, а вот с мутантским RAID-диском пришлось повозиться. Решение для этого -
GPT. Загрузившись с устройства /dev/ad0 я вижу свой многострадальный RAID как
/dev/mfid0 и разбиваю его таким образом:

# gpt create mfid0
# gpt add mfid0
# gpt label -a -le mfid0
# newfs /dev/mfid0p1

Последняя операция пишет много-много разных чисел и делает это больше часа.
Но, в итоге, все получается:

# tunefs -n enable /dev/mfid0p1
# mount /dev/mfid0p1 /mnt
# df -h

Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/mfid0p1   9.8T    4.0K    9.8T     0%    /mnt

Обратите внимание, что перед монтирование я сделал tunefs - включил флажок
SoftUpdates, тем самым немного ускорив работу своей файловой системы. Эта
операция делается 1 раз на размонтированном диске и сохраняется во время
перезагрузок. Еще примечательно вот что. Когда мы всталяем 12 терабайтных дисков
в массив, то ожидаем, что получим объем в 12Тб. А вот и нет. 1Тб целиком уходит
на формирование RAID5. И еще один терабайт - на newfs, т.е файловая система на
таком большом массиве сама занимает почти терабайт! Это, конечно, можно
варьировать наводя детальный тюнинг, но по умолчанию происходит именно так.

И напоследок вот о чем. Сервер удался не сразу - несколько дней я точно
помучался, изучая вопрос. Эффективных решений под FreeBSD для таких массивов
на самом деле только два:

* либо мы используем UFS2 и GPT (но с GPT пока нельзя загрузиться -
  в стандартных загрузчиках этот метод не реализован)
* либо мы используем ZFS (и тогда нас предупреждают, что множественные операции
  чтения-записи могут приводить к дедлокам и задержкам)

Все другие варианты - либо беты, либо сырые, либо нестабильные. Я выбрал первый
вариант как более консервативный. Судя по различной докуменации он уступает
второму по скорости, но потребляет меньше ресурсов и как-то "роднее" самой фряхе.

== Примечание ==

Как утверждают официальные источники, в версии FreeBSD 6.4 появилась долгожданная
возможность грузиться с gpt-дисков, а также исправлены многие глюки с zfs-системой.
Теперь работать с большими дисками будет проще. Аналогичные возможности будут
добавлены к FreeBSD 7.1.