Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  mount_nullfs
  badsect
  clri
  bsdlabel
  dump (rdump)
  dumpfs
  ffsinfo
  fsirand
  mount_nfs
  mount_smbfs
  swapon
  tunefs
  umount
  recovery files
  growfs
  Pax
  clonehdd
  Мониторинг RAID
  gstripe
  fusefs-ntfs
  UFS->ZFS
  RAID5
  freebsd lvm
  root ZFS, GPT
  FreeBSD on flash
  Восстановление ZFS
  Лечим FFS
  gmirror
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> Файловая система —> RAID5

Настройка RAID5

Автор: McSeem.


На днях понадобилось хранить большой объём данных, да так, чтобы максимально надежно. По сей день использовалось соaтовое зеркало, но существующего объёма уже не хватало, и решено было соорудить RAID5 из трёх дисков по терабайту. В моём случае избыточность составит 1/3 против 1/2 (зеркало).

Погуглив, нормальных руководств по настройке софтового рейда на FreeBSD не нашел. Поэтому решил написать сам, то, что у меня получилось.

Судя по тому, что мне удалось узнать, 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 - это виртуальный диск (можно придумать тоже любое название). Система его будет видеть как одно физическое устройство, хотя в моем случае это массив из 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 в функции "[i]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, так что делаем так.[/i]

После того как исправили,снова делаем компиляцию модуля:

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 на крах(отключением питания и отсоединением шлейфа от одного из дисков в режимах чтение\запись, после этого записывал\удалял данные с битого массива, перегружался, добавлял снова диск, восстанавливал всё работает замечательно! ...но это уже тема для другой статьи...)



размещено: 2010-07-28,
последнее обновление: 2010-07-28,
автор: McSeem

оценить статью:

adre, 2010-08-25 в 17:40:27

Сие поделие, Райд5 (Vinum) на 3 дисках, под нагрузкой тормозит =( если самбу привернуть сюда, вешайся - тяжело ему, минимум 4 диска на 6 вообще хорошо становиться...

108, 2011-03-18 в 12:09:48

А на 8.2 при загрузке по умолчанию gvinum грузит какой то конфиг, где его поправить я так и не понял :(

Ivan, 2011-07-08 в 15:39:17

У меня по 8,2 такой же вопрос. И еще как узнать реальный размер диска чтоб прописать в len

McSeem, 2011-07-08 в 18:48:04

2 Ivan > На 8.2 попробую, отпишусь, а размер, без разницы, например fdisk -l, если что пиши в личку

Ivan, 2011-07-09 в 1:54:53

Спасибо! Еще такой вопросик, raid5 из 5 хардов, один сдох (например), купил новый размером такой же или больше, воткнул, как пересобирается райд? Есть специалная команда или автоматом?
Если сдох диск с системой, поставли новый диск, поставил систему, как подтянуть к ней уже существующий рэйд?
Заранее спасибо!

Саша, 2012-04-12 в 9:15:35

Старий забрать новий добавить до рейда (команда - сlear). Размер реида остатьотся тотже. потом пишет статус рейда -REBUILDING . И у меня так уже три недели.У меня проблеми били з двумя хардами.Один поменял геометрию.через две недели свободно места стало меньше рейд сам востанавливается.

nikola93, 2012-08-23 в 13:51:38

Мучился с VINUM 2 дня, в итоге скорость маленькая raid валился после смены винта. Сделал на zfs из плюсов хорошая скорость +raid ни рушится при замене винта.


в /etc/rc.conf zfs_enable="YES" (freebsd8 и выше помоему можно не ставить)
1) gpart show
просмотр разделов  диска

2) создаем  диск
gpart create -s GPT ad6

3) смотрим блоки
gpart show da1
=>     34  3145661  ad6  GPT  (1.5G)
      34  3145661       - free -  (1.5G)

4)размечаем
gpart add -b 34 -s 3145661 -i 1 -t freebsd-zfs  ad6

для freebsd8 и выше выставляем метки на каждый диск
gpart add -b 34 -s 3145661 -i 1 -t freebsd-zfs -l disk1 ad6
gpart add -b 34 -s 3145661 -i 1 -t freebsd-zfs -l disk2 ad10


5)создаем райд массив
zpool create storage raidz ad6 ad10 ad12

для freebsd8 монтируем метки

zpool create storage raidz gpt/disk1 gpt/disk2 gpt/disk3

6)
test# zpool status
 pool: storage
state: ONLINE
scrub: resilver completed with 0 errors on Tue Aug 21 15:14:35 2012
config:

       NAME        STATE     READ WRITE CKSUM
       storage     ONLINE       0     0     0
         raidz1    ONLINE       0     0     0
           ad6     ONLINE       0     0     0
           ad12    ONLINE       0     0     0
           ad10    ONLINE       0     0     0

errors: No known data errors

7) востоновление raid

zpool status
 pool: storage
state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
       the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
  see: http://www.sun.com/msg/ZFS-8000-2Q
scrub: none requested
config:

       NAME           STATE     READ WRITE CKSUM
       storage        DEGRADED     0     0     0
         raidz1       DEGRADED     0     0     0
           gpt/disk1  ONLINE       0     0     0
           gpt/disk2  UNAVAIL      0     0     0  cannot open
           gpt/disk3  ONLINE       0     0     0
видим что gpt/disk2  UNAVAIL

8) подсовываем новый диск 1-й диск в пуле 2-й на что меняем
zpool replace storage ad6 ad12

(для freebsd8 имена меток
zpool replace storage gpt/disk2 gpt/disk4)

patzub, 2012-09-06 в 0:52:46

Срабатывает!
Но при размере каждого hdd 3 Tb возникает проблемма! Мелкие каталоги и файлы сохраняются и удаляются с рейда  нармально. Но файла около 200МБ вызывают зависание и не копируются. ПровереноЖ это не из-за самбы и не из-зи сетевухи.

Товарищщи!, 2014-09-08 в 15:36:58

Это поля для ввода комментариев к статье, а не для вопросов. Сюда пишите найденные баги, или какие-то фичи :)


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 30 чел.
За последние 30 мин было: 68 человек
За сегодня было
2369 показов,
580 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0371 секунд
Из них PHP: 28%; SQL: 72%; Число SQL-запросов: 77 шт.
Исходный размер: 104698; Сжатая: 19749