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
----------------------------------------------