Понадобилось организовать надежное хранение большого объёма данных. По сей день использовалось софтовое зеркало, но существующего объёма уже не хватало и решено было соорудить RAID5 из трёх дисков по терабайту. В моём случае избыточность составит 1/3 против 1/2 (зеркало).Судя по тому, что мне удалось узнать FreeBSD поддерживает организацию RAID5 двумя менеджерами дискового пространства: VINUM и GEOM.
Попробуем каждый из них:
++ I. VINUM.
Начиная с FreeBSD5 VINUM была переписана для совместимости с архитектурой GEOM, и теперь новая подсистема называется GVINUM, а модуль ядра сменил название с vinum.ko на geom_vinum.ko.
Создадим директорию к которой будем монтировать наш RAID5:
snap# mkdir /raid5
Теперь создаём конфигурационный файл нашего массива(расположить его можно где угодно):
snap# touch /usr/local/gvinum.conf
После этого непосредственно конфигурируем наш массив(как я говорил, в моем случае будет 3 диска по терабайту):
snap# vi /usr/local/gvinum.conf
Пишем в файле следующее:
drive raid51 device /dev/ad5
drive raid52 device /dev/ad6
drive raid53 device /dev/ad7
volume raid5
plex org raid5 256k
sd len 1t drive raid51
sd len 1t drive raid52
sd len 1t drive raid53Где:
- drive raid51/raid52/raid53 - это просто псевдонимы физических дисков (можно придумать любое). Используются чисто для удобства. С этими псевдонимами мы будем работать во всём файле и поменяв физический диск, нам не придётся менять его название во всём конфигурационном файле, а достаточно лишь изменить в описании.
- volume raid5 - это виртуальный диск (можно придумать тоже любое название). Система его будет видеть как 1 физическое устройство, хотя в моем случае это массив из 3х дисков с полезным объёмом равным ~2м терабайтам. Отображаться будет как /dev/gvinum/raid5 (Назовёте volume terminator, отображаться будет /dev/gvinum/terminator).
- plex - это набор, который предоставляет полное адресное пространство тома. Нам нобходим набор RAID5, поэтому организуем набор RAID5: org raid5, причем организовываем со страйпом в 256кВ (судя документации это самый оптимальный размер полосы).
- sd - это поддиски(SubDisk), VINUM может организовывать массивы не только из отдельных физических дисков, но и используя разделы UNIX. Я же использую 3 отдельных физических устройства, каждый по 1 терабайту, поэтому указываем размер: len 1t.
На этом описание конфигурационного файла закончилось. Теперь создаём сам RAID массив:
snap# gvinum create /usr/local/gvinum.conf
Создаётся устройство /dev/gvinum/raid5. На нём необходимо создать файловую систему. Создаём:
snap# newfs /dev/gvinum/raid5
Стандартное ядро FreeBSD(GENERIC) не включает Vinum. Можно пересобрать ядро с поддержкой Vinum, но этого делать не рекомендуют. Обычный способ активации Vinum - загрузка модуля для ядра (kld). Так и поступим, только использовать команду kldload не будем, да и нет необходимости, при первом вызове gvinum проверит наличие поддержки Vinum в ядре и при необходимости загрузит модуль автоматически. Я сделаю так чтобы модуль Vinum был доступен на этапе загрузки, для этого делаем так:
snap# echo geom_vinum_load="YES" >> /boot/loader.conf
И последний момент, нужно смонтировать наш массив (Точку монтирования мы указываем /raid5, ту, что создали изначально):
snap# echo /dev/gvinum/raid5 /raid5 ufs rw 2 2 >> /etc/fstab
Перегружаемся и всё должно работать.
:( У меня сервер уходит в Fatal trap 12(Kernel panic) и перегружается до бесконечности. Ничего страшного. Выключаем, ждём 5 минут и включаем, если не получится, выключаем, ждём ещё 5 минут и включаем, в конце концов включается всё норм! Называется размечтался... 1t = 1024G, смотрю свой диск... а там всего 953869m... В общем нужно в конфиге уменьшить размер - len! И после этого всё замечательно работает!!!
Можно выводить диски из массива и т.д., но как-то долго... проще сбросить конфиг:
snap# gvinum resetconfig
На что, он нас спрашивает, вы мол в своё уме? подтвердите что вы это делаете осмысленно! И просит ввести текст "NO FUTURE", ну чтож, вводим:
Enter text -> NO FUTURE
Я поменял в конфиге размеры дисков на:
len 953869m
После этого, повторяем команды:
snap# gvinum create /usr/local/gvinum.conf
snap# newfs /dev/gvinum/raid5Перегружаемся ещё раз...И вуаля!!! Всё работает!!!
++ II. GEOM:Пробуем второй вариант. GEOM RAID5 в FreeBSD не входит, поэтому придётся скачивать с сайта. На сайте видим, что есть 3 версии это:
- Компромисс скорости и использования памяти: geom_raid5
- Самая стабильная, но и самая медленная: geom_raid5 TNG
- Улучшенная скорость, но и памяти соответственно потребляет больше: geom_raid5 PPВсе версии доступны тут:
geom_raid5: http://wgboome.homepage.t-online.de./geom_raid5.tbz
geom_raid5 TNG: http://wgboome.homepage.t-online.de./geom_raid5-eff.tbz
geom_raid5 PP: http://wgboome.homepage.t-online.de./geom_raid5-pp.tbzЯ выбрал "geom_raid5", поэтому переходим в папку с источниками:
snap# cd /usr/src
И скачиваем архив:
snap# wget http://wgboome.homepage.t-online.de./geom_raid5.tbz
Архив необходимо распаковать. Действуем:
snap# tar -xf geom_raid5.tbz
Архив распакован,переходим к процессу инсталляции. Первым делом необходимо собрать модуль. Переходим в папку с конфигом:
snap# cd /usr/src/sys/modules/geom/geom_raid5
И запускаем компиляцию:
snap# make
упс... :( у меня вылезли ошибки...читаем...пробуем исправить... Для этого делаем следующее:
snap# cd /usr/src/sys/geom/raid5
И правим в файле g_raid5.c (если у вас ошибки будут такие же как и у меня) кому каким редактором удобнее:
1. Ошибка: в строке 2015 в функции "kthread_exit" много аргументов
исправляем: меняем в строке 2015 kthread_exit(0); на kthread_exit();
2. Ошибка: в строке 2444 в функции "kthread_exit" много аргументов
исправляем: меняем в строке 2444 kthread_exit(0); на kthread_exit();
3. Ошибка: в строке 2635 нету описания функции "kthread_create"
исправляем: меняем в строке 2635 kthread_create (остальное не трогаем), на kproc_create
4. Ошибка: в строке 2639 нету описания функции "kthread_create"
исправляем: меняем в строке 2639 kthread_create (остальное не трогаем), на kproc_create
Примечание: Ошибка 4 другая, и ссылается на строку 2635, но изменив строку 2635 необходимо изменить и 2639, так что делаем так.После того как исправили,снова делаем компиляцию модуля:
snap# cd /usr/src/sys/modules/geom/geom_raid5
snap# makeПоявляется нужный нам файл: "*geom_raid5.ko". Его необходимо скопировать ко всем модулям. Копируем:
snap# cp geom_raid5.ko /boot/kernel/geom_raid5.ko
Теперь устанавливаем сам geom_raid5:
snap# cd /usr/src/sbin/geom/class/raid5
snap# make && make install && make cleanСобственно после инсталляции GEOM_RAID5 собираем RAID массив:
snap# graid5 label -v -s 256k graid5 /dev/da0 /dev/da1 /dev/da2
И создаём устройство:
snap# graid5 load
Создаётся устройство /dev/raid5/graid5. На нём необходимо создать файловую систему. Создаём:
snap# newfs /dev/raid5/graid5
Создаём точку монтирования:snap# mkdir /graid5
Добавляем запись в /etc/fstab, для автоматического монтирования нашего массива RAID5 при загрузке системы:
snap# echo /dev/raid5/graid5 /graid5 ufs rw 2 2 >> /etc/fstab
Не забываем добавить загрузку модуля при старте системы:
snap# echo 'geom_raid5_load="YES" >> /boot/loader.conf
P.S. В конечном итоге остановил свой выбор на GVINUM. В основном из-за того, что он входит в состав FreeBSD, а разработчики, раз решили что GEOM_RAID5 ещё рано(или уже поздно) входить в релиз, то значит так и есть. Протестировал GVINUM на крах (отключением питания и отсоединением шлейфа от одного из дисков в режимах чтение\запись, после этого записывал\удалял данные с битого массива, перегружался, добавлял снова диск, восстанавливал всё работает замечательно! ...но это уже тема для другой статьи...)
URL:
Обсуждается: http://www.opennet.ru/tips/info/2415.shtml
Спасибо!
В общем, хорошо, конечно, что всё это во фре есть, но уж больно всё как-то через... В Линуксе, впрочем md тоже не супер просто делается. В ZFS всё как-то сильно по-проще, безо всяких подготовок дисков предварительных.
>В общем, хорошо, конечно, что всё это во фре есть, но уж
>больно всё как-то через... В Линуксе, впрочем md тоже не супер
>просто делается. В ZFS всё как-то сильно по-проще, безо всяких подготовок
>дисков предварительных.для zfs диск тоже лучше подготовить - и строить массив, используя метки glabel
ZFS ничего не знает про метки glabel и перезатирает их. Поэтому нужно бить диски gpart и добавлять в пул метки gparta.
>ZFS ничего не знает про метки glabel и перезатирает их. Поэтому нужно
>бить диски gpart и добавлять в пул метки gparta.угу. забыл "развернуть" мысль. по любому это есть в wiki
как вариант - метки gpart
Полезная статья, спасибо!
ни фря, ни салярис пока не умеют грузиться с raidz :(
откуда дровишки?
http://wiki.freebsd.org/RootOnZFS - вот тут написано, что умеетps. и с соляркой Вы тоже наверняка напутали. может с опенсолярисом? тот год назад или больше вроде как не умел
10ка до сих пор не умеет бутиться с raidz. опен хз, может и умеет. про фряху, да, откровение.
Фряха 100% умеет.
Настроил в 8.1 и 9.0
>ни фря, ни салярис пока не умеют грузиться с raidz :(Спасибо, поржал! У меня как раз загрузочный ;)
> zpool statuspool: test
state: ONLINE
scrub: none requested
config:NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
raidz1 ONLINE 0 0 0
gpt/disk0 ONLINE 0 0 0
gpt/disk1 ONLINE 0 0 0
gpt/disk2 ONLINE 0 0 0
gpt/disk3 ONLINE 0 0 0
spares
gpt/disk4 AVAILerrors: No known data errors
И никакого мошенства :)
Итого имеем, что кроме варианта с использованием выкидыша от Sun RAID5 в BSD - это фантастика, поскольку для продакшна с такими косяками не годно.
>Итого имеем, что кроме варианта с использованием выкидыша от Sun RAID5 в
>BSD - это фантастика, поскольку для продакшна с такими косяками не
>годно.вообще косяк я заметил только один - автор ошибся при указании размера диска в gvinum'e.
ну и мог бы замерить скорость записи и чтения на разных реализациях
да, жаль, что graid5 не внесен в базовую систему - но тут косяки естественны и делать серьезное на нем - действительно боязно. а винум - достаточно проверенная временем технология
С GVINUM вообще проблем не было никаких! я когда покупал диски, покупал на терабайт :) и когда писал конфиг по привычке написал 1t..даже не посмотрел реальный объем :) и всё! других проблем НЕ БЫЛО! используйте GVINUM, ну не зря geom_raid5 не в релизе,да и посмотрите на сайте, когда последние обновления этого geoma ;) там даже функции другие..про geom_mirror никто ничего против не имеет, у самого на 3х серваках настроено, дык он и входит в релиз (даже geom_raid3 входит в релиз,но это не то, что raid5)
Утилиты mdraid, к примеру, просто не дадут такого сделать, ибо это бессмысленно. И даже если помучаться и соорудить - ядро в panic не упадет, скорее просто не подключит разделы. Так что ваш "проверенный временем механизм" - не более, чем сырая наколенная поделка. Терять удаленный сервер по управлению из-за ошибки в цифре при конфигурировании нового диска - это очень замечательно.
>Утилиты mdraid, к примеру, просто не дадут такого сделать, ибо это бессмысленно.
>И даже если помучаться и соорудить - ядро в panic не
>упадет, скорее просто не подключит разделы. Так что ваш "проверенный временем
>механизм" - не более, чем сырая наколенная поделка. Терять удаленный сервер
>по управлению из-за ошибки в цифре при конфигурировании нового диска -
>это очень замечательно."скорее всего просто не подключит разделы" - в результате результат то будет тот-же - система не загрузиться. тоже, получается, сырая наколенная подделка? :)
т.е. корень в raid не разместить получаецца? ой, все на костылях..
> т.е. корень в raid не разместить получаецца? ой, все на костылях..почему не получиться?
на geom_mirror можно, думаю и тут можно - главное правильно загрузчику указать откуда грузиться, с другой стороны для системы особо нет необходимости работать с RAID5 - там и зеркала за глаза
Корень на soft raid5? Зачем? На soft raid1 (gmirror) - запросто.
чтоб был всего один раздел. ну типа того:
/dev/md0 on / type ext3 (rw)/dev/sda1 * 1 19457 156288321 fd Linux raid autodetect
>чтоб был всего один раздел. ну типа того:
>/dev/md0 on / type ext3 (rw)
>
>/dev/sda1 *
> 1 19457
> 156288321 fd Linux raid autodetectа зачем всего один раздел???
мне линухах жутко не нравится эта система создание рейда по разделам/slice
как правильно сказал предыдущий товарищ для /,/usr,/var,/tmp,/var/db разделов с головой зеракала, которое можно сделать из slice'ов
а зачем терять гигабайты дискового пространства пустыми? сколько сделать /var? а /tmp?
а если /var кончится? понимаю что для этого есть zfs.
а так создал все что есть одним куском и отлично живет этакий storage
>а зачем терять гигабайты дискового пространства пустыми? сколько сделать /var? а
>/tmp?
>а если /var кончится? понимаю что для этого есть zfs.Если понимаете, то почему не пользуетесь? Фряха действительно прекрасно грузится с raidz, и очень шустро работает. Я считаю, если уж внедрили zfs на таком уровне, то глупо этим не пользоваться.
>а зачем терять гигабайты дискового пространства пустыми? сколько сделать /var? а
>/tmp?
>а если /var кончится? понимаю что для этого есть zfs.
>а так создал все что есть одним куском и отлично живет этакий
>storageмдя, забить тебе нафек /tmp для прочистки моска .
в линухе есть lvm - со своим raID{JBOD,0,1,4,5,6} - т,е то же 2 технологии
что ты мелешь? что будет быстрее забито, один монолитный раздел, или мелкий кусочек /tmp? тем более /tmp вообще удобен в виде tmpfs.
10% все равно никто не даст забить, так что система не упадет. так что чисти себе мозги=)
угу, поговорим когда тебе таки напихают терабайт в /tmp на твоем общем для всего разделе и различные программы начнут обнулять файлики при попытке записи.
так же советую почитать о флагах монтирования (noexec,nosuid,nosymfollow...) и думать когда создаешь сервак, а не с закрытыми глазами плюхать все в один раздел.
и да, во фре на корне нельзя включить квоты.
кто из пенгвинятников мог знать, что у фри нельзя квоты в корне настроить?
флаги монтирования актуальны в /home, а /tmp в других осях, прекрасно живет в /tmpfs
ну для тебя только в /home - может быть. в принципе и не удивительно, если ты все в кучу сваливаешь.
не все в кучу. вот разделы рабочего хоста:
/dev/sda1 on / type ext3 (rw,noatime,nodiratime,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
А зачем корень raid5?
Я говорю - на raid1 (gmirror) оно есть.
>А зачем корень raid5?
>Я говорю - на raid1 (gmirror) оно есть.Конечно, оно есть. Но у человека в условиях задачи три одинаковых диска, из которых он хочет сделать raid5, так зачем ему городить еще зеркало, если все можно разместить на одном массиве?
Спасибо!
Вообще не знал, что бывает программный RAID 5 во Фре или Линаксе. :) Век живи - век учись...Но скажите, а нельзя ли при помощи GVINUM сделать ВСЮ систему на RAID5, а не только отдельную точку монтирования?
Нет, нельзя. Загрузчик в любом случае должен располагаться на отдельном разделе, а в случае gvinum в отдельном разделе должен находиться и корень. В случае с raidz на zfs, отдельный раздел нужен только для загрузчика, корневой раздел можно разместить на самом рейде.
Спасибо.
Эх... а в gmirror можно.
>Спасибо.
>Эх... а в gmirror можно.можно
http://old.nabble.com/graid5-after-reboot-problem-ts10327403...
Последний пост от Dawidek , по поводу write-hole на RAID3 и RAID5
Потому я и советую zfs, что она избавлена от такого рода ошибок. Сам ее использую недавно, но пока вижу только плюсы этой fs.
на фре zfs работает только модулем, с PAE нет.
>Появляется нужный нам файл: "*geom_raid5.ko". Его необходимо скопировать ко всем модулям. Копируем:
> snap# cp geom_raid5.ko /boot/kernel/geom_raid5.koкопировать нужно в /boot/modules
Есть вопрос по теме. Собрал RAID5 по этому мануалу на 3 х 2TB дисках (WDC WD20EARS). Перед установкой с дисками ничего не делал. На запись всё работает ОООЧЕНЬ медленно - около 100Кб/с, на чтение около 50Мб/с. Система: Intel E3400, GA-G31M-ES2L, 2Gb RAM. Есть идеи? Диски новые, advanced format, может их перед этим надо было как-то форматировать?
В мане по GVINUM так и написано, что RAID5 не является флагманом и не оптимален в части записи
> В мане по GVINUM так и написано, что RAID5 не является флагманом
> и не оптимален в части записиОно понятно, но не на столько же всё плохо должно быть! 80 - 100Кб - это не скорость, это издевательство.. RaidZ на тех же диских даёт 50Mb минимум.
У меня та же проблема. Собрал как тут написано 5х500ГБ в raid5.
Intel Dual Core 2.53GHz, 2 ГБ ОЗУ, MB Gigabyte Ga-ep35c-ds3d# gvinum list
5 drives:
D d4 State: up /dev/ad5 A: 0/476938 MB (0%)
D d3 State: up /dev/ad4 A: 1/476939 MB (0%)
D d2 State: up /dev/ad3 A: 1/476939 MB (0%)
D d1 State: up /dev/ad2 A: 1/476939 MB (0%)
D d0 State: up /dev/ad1 A: 0/476938 MB (0%)
1 volume:
V raid5 State: up Plexes: 1 Size: 1863 GB
1 plex:
P r5 R5 State: up Subdisks: 5 Size: 1863 GB
5 subdisks:
S r5.s4 State: up D: d4 Size: 465 GB
S r5.s3 State: up D: d3 Size: 465 GB
S r5.s2 State: up D: d2 Size: 465 GB
S r5.s1 State: up D: d1 Size: 465 GB
S r5.s0 State: up D: d0 Size: 465 GBпроверяю скорость:
# dd if=/dev/zero of=/dev/gvinum/raid5 bs=1M count=100
104857600 bytes transferred in 7.585339 secs (13823720 bytes/sec)
# dd if=/dev/zero of=/dev/gvinum/raid5 bs=1M count=10000
10485760000 bytes transferred in 767.519787 secs (13661876 bytes/sec)
При тестировании процесс GV_WORKER забирает порядка 17% ресурсов ЦП.~13 МБ/с - маловато для 5-ти дисков но терпеть можно.
Далее создаю файловую систему (newfs -S 4096 -b 32768 -f 4096 -O 2 -U -m 8 -o space /dev/gvinum/raid5 - так или просто newfs /dev/gvinum/raid5) монтирую и пробую скопировать данные. И вот тут возникает проблема - скорость записи ~150 Кб/с !.. И при этом процессор простаивает, индикатор работы дисковой системы (на передней панели) изредка моргает, память ничем не занята... (vmstat показывает ~1.5 ГБ свободно)Подумал, что контроллер дисков тупит - сделал Raid0 (stripe) на тех же винтах. Так dd показал ~190МБ/с, а копирование данных около 60 МБ/с (копирование данных во всех случаях выполнял через сеть - 1Гб/с)
Если кто сталкивался - поделитесь опытом.
Заранее спасибо!
> У меня та же проблема. Собрал как тут написано 5х500ГБ в raid5.Я, после недели мучений, рытья в манах, чтения форумов, просто забил и сделал raidz. Теперь со скоростью порядок.
Аналогичная ситуация. Долго мучился безрезультатно... И тут сижу я значит, бездумно втыча в монитор, тыцкая по /usr/ports/ . И тут у меня чуть шары не выпали (есть ньюанс - у мя фря 9.0) /usr/ports/sysutils/graid5!!!!!!!!!! make install clean - без ошибок! Таки добавили грейд5 в новой фре!
Дальше всё сделал по инструкции (пропуская установку "левого" graid5), он гараздо дольше собирался, чем gvinum. Записываю файл - ВУАЛЯ!! 160 - 180 МБ/С!!!!! Чтение чуть по медленнее, но не существенно. Проверил на reset - работает. Выдернул шнурок с винта - матюгнулось типа "ада3 из даун и....", но чтение/запись проводится без проблем, после перезагрузки проверил - все данные наместе. Остался один, но ООООЧЕНЬ важный вопрос: КАК ВЕРНУТЬ ЭТОТ ВИНТ НАЗАД В РЕЙД (ТИПА ОН НОВЫЙ)? Гуру, помогите, плиз!