Проект переехал на новый домен!  [[ перейти ]]

GEOM (Модульная инфраструктура преобразования дисковых запросов)
Используем для создания программных RAID массивов.

Из модулей geom-* у меня есть вот что:
sh# ls /boot/kernel | grep geom | grep -v sym
---------------------------------------------
geom_bde.ko
geom_bsd.ko
geom_cache.ko
geom_ccd.ko
geom_concat.ko
geom_eli.ko
geom_fox.ko
geom_gate.ko
geom_journal.ko
geom_label.ko
geom_mbr.ko
geom_md.ko
geom_mirror.ko
geom_multipath.ko
geom_nop.ko
geom_pc98.ko
geom_raid3.ko
geom_shsec.ko
geom_stripe.ko
geom_sunlabel.ko
geom_uzip.ko
geom_vinum.ko
geom_virstor.ko
geom_vol_ffs.ko
geom_zero.ko
---------------------------------------------

RAID 0 (У меня два винта на SCSI, одного размера)
Нам нужен для этого дела модуль geom_stripe.ko

sh# gstripe label -v st0 /dev/da0 /dev/da1
------------------------------------------
Metadata value stored on /dev/da0.
Metadata value stored on /dev/da1.
Done.
------------------------------------------

Если система сопративляется, то:
# sysctl kern.geom.debugflags=16
--------------------------------
kern.geom.debugflags: 0 -> 16
--------------------------------

И так...
У нас создаётся устройство /dev/stripe/st0
Его по обыкновеню и размечаем, форматируем и т.д.
sh# bsdlabel -w /dev/stripe/st0
sh# ls /dev/stripe/
--------------------
st0     st0a    st0c
--------------------
sh# newfs /dev/stripe/st0a
sh# mkdir /work
sh# mount /dev/stripe/st0a /work

Чтобы автоматом при перезапуске схватывалось:
sh# echo "/dev/stripe/st0a /work ufs rw 2 2" >> /etc/fstab
sh# echo 'geom_stripe_load="YES"' >> /boot/loader.conf

Вот у нас и есть щастье в качестве RIAD0
sh# reboot

Берём другой модуль geom_mirror.ko и ваяяем зеркало (RAID1):
sh# gmirror label -vnb round-robin gm0 /dev/da0
-----------------------------------------------
Metadata value stored on /dev/da0.
Done.
-----------------------------------------------
Дальше подгружаем модуль
sh# gmirror load
И у нас появляется:
sh# ls /dev/mirror/
-------------------
gm0
-------------------

Дальше инициализируем и размечаем:
sh# fdisk -vI /dev/mirror/gm0
sh# bsdlabel -w /dev/mirror/gm0s1
sh# ls /dev/mirror/
------------------------------
gm0     gm0s1   gm0s1a  gm0s1c
------------------------------

sh# newfs -U -O2 /dev/mirror/gm0s1a
-------------------------------------------------------------------------------------
/dev/mirror/gm0s1a: 35001.0MB (71681948 sectors) block size 16384, fragment size 2048
        using 191 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
        with soft updates
-------------------------------------------------------------------------------------

Снова стандарт:
sh# echo "/dev/mirror/gm0s1a /work ufs rw 2 2" >> /etc/fstab
sh# echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf

Вот у нас и RAID1
sh# reboot

Зеркало из двух дисков состоит а мы только один загнали) Исправляем:
sh# gmirror insert gm0 /dev/da1

Смотрим результат )))
sh# gmirror list
---------------------------------
Geom name: gm0
State: DEGRADED
Components: 2
Balance: round-robin
Slice: 4096
Flags: NOAUTOSYNC
GenID: 0
SyncID: 1
ID: 1975911984
Providers:
1. Name: mirror/gm0
   Mediasize: 36703933952 (34G)
   Sectorsize: 512
   Mode: r0w0e0
Consumers:
1. Name: da0
   Mediasize: 36703934464 (34G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 2335031599
2. Name: da1
   Mediasize: 36703934464 (34G)
   Sectorsize: 512
   Mode: r1w1e1
   State: STALE
   Priority: 0
   Flags: SYNCHRONIZING
   GenID: 0
   SyncID: 1
   ID: 1886430419
---------------------------------

Но почему-то диски не синхронизируются! Вот напасть.
Задаю автоматическую синхрониацию.
sh# gmirror configure -a gm0 

Опа! пропал второй диск da1! Делаю реконнект:
sh# gmirror forget gm0
... и снова подключаю!
sh# gmirror insert gm0 /dev/da1

Смотрим! Пошла синхронизация! Ура пля... работает!
sh# gmirror status
--------------------------------
      Name    Status  Components
mirror/gm0  DEGRADED  da0
                      da1 (16%)
--------------------------------

PS: Если убивать девайсы, то:
sh# gstripe destroy st0
sh# dd if=/dev/zero of=/dev/da0 bs=512 count=32
sh# dd if=/dev/zero of=/dev/da1 bs=512 count=32

С зеркалом:
sh# gmirror stop gm0

И если у нас система на зеркале стоит то в ядро:
----------------------------------------------
options    GEOM_MIRROR
----------------------------------------------