Настройка IDE RAID5 в FreeBSD с использованием vinum

14.04.2003 08:25

Статья является обобщением полученного опыта на протяжении нескольких дней в связи с необходимостью настроить вышеупомянутую функциональность. Ниже приводится текст статьи:

Цель: настроить RAID5 как хранилище даных на сервере. Сервер: TYAN SERVER-WORKS 8025GN dual PIII 800MHz. Диски - в ожидании двух Western Digital 120GB. А тем временем имеем QUANTUM FIREBALL 12GB. OS - FreeBSD4.7

Присупаем к работе:

Для Vinum-а подходят разделы a,e,f,g,h.... Не подходит с, который обозначает весь диск и b, который используется для свопа. Имеем 4 винчестера, при чём на одном из них стоит системма. Заметим, что на разделах, на которых нет раздела a (то есть нет / ), раздел е можно создать двумя способами: сначала выделить место под е раздел, а потом под своп, или же сначала под своп а потом под е-раздкл. Так вот, второй вариант не проходит (во всяком случае у меня). Разделы на дисках можно создавать как при начальной установке, так и после неё через /stand/sysinstall.

Установили системму, разбили на разделы. При чем, если веники большие, то раздел под корень можно сжелать даже гигабайт (в зависимости от полноты установки), а потом /usr, /var и всё, чё надо, перенести на RAID.

Я под корень выделил 1 гиг, под RAID 10 гиг(/raid0), под своп 128М. Подключаю остальные 3 диска. Запускаю /stand/sysinstall, выбираю Configure->Fdisk. Под раздел UFS беру весь объём каждого диска, на вопрос о BOOT Manager выбираю Standart. Когда это проделал со всеми дисками, захожу в Configure->Label. На каждом диске сначала делаю раздел на 10G(точно такого размера, как и на первом диске), с точкой монтирования (/raidx, где х - номер диска), поптом 128М под своп.

В результате имеем конфигурацию:

 ad0s1a / ad0s1b swap ad0s1e /raid0 ad1s1e /raid1 ad1s1b swap ad1s1e /raid2 ad2s1b swap ad3s1e /raid3 ad3s1b swap  Создаём дирректорию /bootvinum cd /bootvinum disklabel ad0s1 > ad0s1 
и так для всех дисков, (соответственно ad1s1 в ad1s1 и т.д.).

Теперь редактируем эти файлы, изменяя fstype с ufs на vinum и adxs1e на adxs1h( если бы мы не включали наш первый, системный диск, то менять имена разделов трёх дисков не надо (во всяком случае, как я не пытался объединить в RAID разделы е несистемных и е раздел системного, ничего не получилось)).

Теперь немного теории и терминологии. В vinum принято любую законченную структуру называть volume(том). Том состоит из сплетений даных (plex-ов). Считайте, что сплетение - это одно устройство, которое видится как один диск и в нём находится точно такая же информация, как и на всех остальных дисках(plex-ах) и они одинакового размера. Например, зеркализации,(RAID1), вам нужно хранилище (volume), которое по своей сути - 2 носителя(plex). Фактически, создание 2-х plex-ов автоматически означает их зеркализацию. Томы, которые содержат более двух сплетений увидеть не приходилось (возможно, пока). Plex состоит из subdisk-ов - фактически, собственно, носителей информации.

При создании RAID5 нам к нас будет 1 том, в котором будет одно сплетение, состоящее из 4 носителей. При чём, информация будет разбиваться на блоки, и записываться следующим образом. Берётся обьём информации, равный (n-1)*размер блока, где n - число дисков, из которых состоит RAID5. Первый блок даных записывается на первый диск, второй - на второй и т.д. На последний диск записывается блок контрольной суммы, который формируется следующим образом: по методу дополнения до 0, то есть, первый бит первого блока на первом диске складывается по модулю 2 с такими же первыми битами первых блоков остальных n-1 дисков. Если в результате получилась 1, то первым битом первого блока контрольной суммы будет 1, если 0 - то 0. После заполнения первого ряда блоков, блок контрольной суммы запишется на 1-й диск, на следующем круге - на 2-й, и т.д. Наличие блока контрольной суммы даёт возможность при выходе одного из дисков восстановить информацию какого-то ряда блоков.

Ну, довольно теории, пора заняться практикой.

Оптимальный размер блока в RAID5 в районе 256-512kb. В /bootvinum создаём файл raid

 drive vinumdrive0 devive /dev/ad0s1h drive vinumdrive1 device /dev/ad1s1h drive vinumdrive2 device /dev/ad2s1h drive vinumdrive3 device /dev/ad3s1h volume raid  plex name raid.p0 org raid5 512k   sd name raid.p0.s0 length 10g drive vinumdrive0   sd name raid.p0.s1 length 10g drive vinumdrive1   sd name raid.p0.s2 length 10g drive vinumdrive2   sd name raid.p0.s3 length 10g drive vinumdrive3 

Следует заметить, что для RAID5 нужно минимум 3 диска, разделы на которых одинакового размера.

 /sbin/shutdown -r now Когда появится приглашение  Hit [ENTER] .. , нажмите любую клавишу, не ENTER. boot -s cd /bootvinum disklabel -R ad0s1 ad0s1 Для остальных то же самое. fsck / mount / vi /etc/fstab Удалить все записи относительно тех разделов, на которых меняли файловую систему и которые сейчас в томе.  Ctrl+D /sbin/shutdown -r now boot -s cd /bootvinum mount / vinum create -v raid vinum init raid.p0 (записывае нули в разделы RAID-а) newfs -v /dev/vinum/raid fsck -n /dev/vinum/raid Ctrl+D /sbin/mount /dev/vinum/raid (точка монтирования) vi /etc/rc.conf добавить строчку  start_vinum="YES" vi /etc/fstab добавить строчку  /dev/vinum/raid (точка монтирования) ufs rw 2 2 /sbin/shutdown -r now  Убедиться, что всё работает