Ключевые слова:freebsd, disk, fs, raid, vinum, (найти похожие документы)
From: Андрей Черняк <d2mac@mail.univ.kiev.ua>
Subject: Настройка IDE RAID5 в FreeBSD с использованием vinum
Кратко о сути :
Статья является обобщением полученного опыта на протяжении нескольких дней в связи
с необходимостью настроить вышеупомянутую фичу.
Цель:
настроить RAID5 как хранилище даных на сервере.
Сервер: TYAN SERVER-WORKS 8025GN dual PIII 800MHz. Диски - в ожидании двух West
ern 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
Убедиться, что всё работает
Работает.
Но ОЧЕНЬ медленно.
4 SCSI объеденил в raid5.
Сами диски показывают скорость 50-60 Мб/с (без raid). При raid5 скорость записи/считывания 5-8 Мб/с, хотя должна увеличится раза в 3-4.
Вот ведь в чем вопрос.
Автор немного ошибся с терминологией. Цитирую: "...Для сплетения типа raid5 оно (размер этот,-мое) задает размер ГРУППЫ. Группа - это часть сплетения, хранящая биты четности на одном и том же поддиске. Размер сплетения должен быть кратен размеру группы (др. словами, результат деления размера сплетения на размер полосы должен быть целым числом), а размер группы должен быть кратен размеру сектора диска (512 байтов). Для оптим. производительности полосы должны быть размером минимум 128Кбайт: меньший размер приведет к существенному увеличению количества операций ввода/вывода из-за распределения отдельных запросов по нескольким дискам... Обычно рекомендуют выбирать размер полосы в диапазоне от 256 до 512 Кбайт. Степеней двойки при этом, однако, лучше избегать: обычно они приводят к размещению всех суперблоков на первом поддиске. Упрощенные команды используют размер полосы 279 Кбайт, что дает разумное распределение суперблоков..."М. Эбен, Б. Таймен "FreeBSD. Исс-во достиж. равновесия..."