Ключевые слова:gmirror, raid, disk, (найти похожие документы)
From: Алексей Кеда (lissyara) <admin@lissyara.su.>
Date: Mon, 23 Nov 2007 18:21:07 +0000 (UTC)
Subject: Использованеи gmirror для создания программного зеркалирования дисков
Оригинал: http://www.lissyara.su/?id=1272
Досталась мамка с кривым S-ATA контроллером - SiL3112. До
того, как выяснилось что он кривой, успел заказать два S-ATA харда :).
Поколупавшись день, понял, что на ней ниего не светит, и взял со склада
два P-ATA. Тока вот RAID-контроллер на маме был лишь новомоднявого
формата Serail ATA. Поэтому, ввиду того, что машина ответственная,
решил сделать зеркало софтверное. Вначале, хотел забульбенить
по-старинке, через atacontrol, но после некоторого размышления,
решил что лучше мутить на gmirror. Основной причиной стало то, что
за зеркалом на atacontrol надо присматирвать больше, чем на gmirror.
Ненамного, но больше.
Итак, для начала добавляем строку в /boot/loader.conf
/usr/home/lissyara/>echo 'geom_mirror_load=YES' >> /boot/loader.conf
/usr/home/lissyara/>
После чего создаём зеркало:
/usr/home/lissyara/>gmirror label -v -b round-robin gm0 /dev/ad0
Can't store metadata on /dev/ad0: Operation not permitted.
/usr/home/lissyara/>
Не даёт писать на диск который используется. Правиться при помощи
sysctl:
/usr/home/lissyara/>sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16
/usr/home/lissyara/>
Снова пробуем:
/usr/home/lissyara/>gmirror label -v -b round-robin gm0 /dev/ad0
Metadata value stored on /dev/ad0.
Done.
/usr/home/lissyara/>
Сделали зеркало из одного диска. Надо добавить второй, но вначале
правим /etc/fstab из такого:
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s2b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1e /jails/eliron ufs rw 2 2
/dev/ad0s1f /jails/gptel ufs rw 2 2
/dev/ad0s1g /jails/grand-prix ufs rw 2 2
/dev/ad0s1d /tmp ufs rw 2 2
/dev/ad0s1h /usr ufs rw 2 2
/dev/ad0s1b /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
# NULLFS - for ports
/usr/ports /jails/eliron/usr/ports nullfs rw 0 0
#/usr/ports /jails/gptel/usr/ports nullfs rw 0 0
#/usr/ports /jails/grand-prix/usr/ports nullfs rw 0 0
В такой (это просто пример, что должно меняться, а что не должно,
хотя и взят он с реальной машины)
/usr/home/lissyara/>df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/mirror/gm0s1a 372M 60M 282M 18% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/mirror/gm0s1e 1.9G 363M 1.4G 20% /jails/eliron
/dev/mirror/gm0s1f 1.9G 4.0K 1.8G 0% /jails/gptel
/dev/mirror/gm0s1g 1.9G 4.0K 1.8G 0% /jails/grand-prix
/dev/mirror/gm0s1d 1.9G 14K 1.8G 0% /tmp
/dev/mirror/gm0s1h 271G 6.0G 243G 2% /usr
/dev/mirror/gm0s1b 9.3G 34M 8.5G 0% /var
/usr/ports 271G 6.0G 243G 2% /jails/eliron/usr/ports
devfs 1.0K 1.0K 0B 100% /var/named/dev
devfs 1.0K 1.0K 0B 100% /jails/eliron/dev
procfs 4.0K 4.0K 0B 100% /jails/eliron/proc
/usr/home/lissyara/>
После чего перезагружаемся. Если всё нормально, и ошибок нет, то
надо втыкать второй хард в зеркало. Если ошибки, и не грузится, то
монтируем корневую ФС руками, и исправляем ошибки в /etc/fstab. Итак,
втыкаем второй хард в зеркало:
/usr/home/lissyara/>gmirror insert gm0 /dev/ad1
/usr/home/lissyara/>
Смотрим логи:
/usr/home/lissyara/>tail -2 /var/log/messages
Nov 2 11:04:00 router kernel: GEOM_MIRROR: Device gm0: provider ad1 detected.
Nov 2 11:04:00 router kernel: GEOM_MIRROR: Device gm0: rebuilding provider ad1
.
/usr/home/lissyara/>
И статус массива:
/usr/home/lissyara/>gmirror status
Name Status Components
mirror/gm0 DEGRADED ad0
ad1 (1%)
/usr/home/lissyara/>
Полные данные можно получить такой командой:
/usr/home/lissyara/>gmirror list
Geom name: gm0
State: DEGRADED
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 875211574
Providers:
1. Name: mirror/gm0
Mediasize: 320072932864 (298G)
Sectorsize: 512
Mode: r9w8e10
Consumers:
1. Name: ad0
Mediasize: 320072933376 (298G)
Sectorsize: 512
Mode: r1w1e1
State: ACTIVE
Priority: 0
Flags: DIRTY
GenID: 0
SyncID: 1
ID: 4187229399
2. Name: ad1
Mediasize: 320072933376 (298G)
Sectorsize: 512
Mode: r1w1e1
State: SYNCHRONIZING
Priority: 0
Flags: DIRTY, SYNCHRONIZING
GenID: 0
SyncID: 1
Synchronized: 1%
ID: 2887372520
/usr/home/lissyara/>
А влогах ядра такое:
/usr/home/lissyara/>dmesg | grep GEOM_MIRROR
GEOM_MIRROR: Device gm0 created (id=875211574).
GEOM_MIRROR: Device gm0: provider ad0 detected.
GEOM_MIRROR: Device gm0: provider ad0 activated.
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
GEOM_MIRROR: Device gm0: provider ad1 detected.
GEOM_MIRROR: Device gm0: rebuilding provider ad1.
/usr/home/lissyara/>
После сборки будет так:
/usr/home/lissyara/>gmirror status
Name Status Components
mirror/gm0 COMPLETE ad0
ad1
/usr/home/lissyara/>
Это описание не претендует на полноту, или ещё что-то, делалось оно
по горячим следам, в процессе работы. Может кому и пригодится.
Тему поднимали не раз.
Тут описание совсем не самое удачное.
Один из моментов - слайсы. Про которые ничего вообще не сказано, при том, что правильнее миррорить именно их, а не весь диск.