Создаем программный RAID1 в FreeBSD 8.2

31.03.2011 - 11:33

Решил попробовать софт-рейд в FreeBSD, как раз под рукой оказалось 2 идентичных винта (желательно одного производителя и объема).
При установке FreeBSD, первый определился как ad10, другой - ad12.

[X] ad10 - на него будем устанавливать систему.
[ ] ad12 - будет выступать зеркалом.

raid1.png

Для построения зеркала, необходимо добавить в переменную sysctl значение:
fs1# sysctl kern.geom.debugflags=17
kern.geom.debugflags: 0 -> 17
fs1#

Создаем зеркало, в результате в "/dev/mirror/gm" будут созданы устройства:
fs1# gmirror label -v -b round-robin gm0 /dev/ad10
Metadata value stored on /dev/ad10.
Done.
fs1#

Загрузим модуль ядра или при необходимости, можно скомпилировать ядро с его поддержкой "options GEOM_MIRROR".
fs1# gmirror load

Смотрим загрузился ли?
fs1# kldstat
Id Refs Address    Size     Name
 1    3 0xc0400000 bd97b4   kernel
 2    1 0xc6230000 15000    geom_mirror.ko
fs1#

Включите автоматическую загрузку модуля geom_mirror.ko при старте ОС:

fs1# echo 'geom_mirror_load="YES"' >> /boot/loader.conf

В результате в /dev/mirror вы увидете новые разделы(например):

gm0     gm0s1   gm0s1a  gm0s1b  gm0s1d  gm0s1e  gm0s1f

Редактируем fstab
Первоначальный вид /etc/fstab после установки ОС:

# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad10s1b            none            swap    sw              0       0
/dev/ad10s1a            /               ufs     rw              1       1
/dev/ad10s1e            /tmp            ufs     rw              2       2
/dev/ad10s1f            /usr            ufs     rw              2       2
/dev/ad10s1d            /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0

Вид после редактирования (заменяем /dev/ad10XXX на /dev/mirror/gm0XXX):

# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/mirror/gm0s1b              none            swap    sw              0       0
/dev/mirror/gm0s1a              /               ufs     rw              1       1
/dev/mirror/gm0s1e              /tmp            ufs     rw              2       2
/dev/mirror/gm0s1f              /usr            ufs     rw              2       2
/dev/mirror/gm0s1d              /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0

Перезагружаемся:

fs1# shutdown -r now

При загрузке вы должны увидеть:

Starting file system checks:
/dev/mirror/gm0s1a: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/mirror/gm0s1a: clean, 924756 free (3556 frags, 115150 blocks, 0.4% fragmentation)
/dev/mirror/gm0s1e: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/mirror/gm0s1e: clean, 1013009 free (49 frags, 126620 blocks, 0.0% fragmentation)
/dev/mirror/gm0s1f: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/mirror/gm0s1f: clean, 141380597 free (39757 frags, 17667605 blocks, 0.0% fragmentation)
/dev/mirror/gm0s1d: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/mirror/gm0s1d: clean, 5076043 free (371 frags, 634459 blocks, 0.0% fragmentation)

или
fs1# mount
/dev/mirror/gm0s1a on / (ufs, local)
devfs on /dev (devfs, local, multilabel)
/dev/mirror/gm0s1e on /tmp (ufs, local, soft-updates)
/dev/mirror/gm0s1f on /usr (ufs, local, soft-updates)
/dev/mirror/gm0s1d on /var (ufs, local, soft-updates)
fs1#

Добавляем ваш другой диск в зеркало для синхронизации (у меня это "ad12"):

fs1# gmirror insert gm0 /dev/ad12

Проверить статус нашего RAID1 можно с помощью:
fs1# gmirror status
      Name    Status  Components
mirror/gm0  DEGRADED  ad10
                      ad12 (20%)

или
fs1# gmirror list
Geom name: gm0
State: COMPLETE
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 1292398990
Providers:
1. Name: mirror/gm0
   Mediasize: 320072932864 (298G)
   Sectorsize: 512
   Mode: r5w5e14
Consumers:
1. Name: ad10
   Mediasize: 320072933376 (298G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: DIRTY
   GenID: 0
   SyncID: 1
   ID: 2183162714
2. Name: ad12
   Mediasize: 320072933376 (298G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: DIRTY
   GenID: 0
   SyncID: 1
   ID: 4069705096

После полной синхронизации:

fs1# gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ad10
                      ad12

Ps:
Предположим, что один из дисков отвалился(ad12), его необходимо заменить новым. После его установки необходимо выполнить замещение старого диска в зеркале на новый:
fs1# gmirror forget gm0
fs1# gmirror insert gm0 /dev/ad12

Нагрузку на винты рейда можно посмотреть с помощью утилиты - gstat.
Для проверки RAID1, можно по очередности отсоединить каждый винт и проверить загрузку ОС с него. При последующем подсоединении двух винтов они синхронизируются между собой автоматически.

Ваша оценка: Нет Средняя: 3.6 (9 votes)