Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> главная —> Архив —> gmirror

Использование gmirror для создания программного зеркалирования дисков

Автор: lissyara.


    Досталась мамка с кривым 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/>

   Это описание не претендует на полноту, или ещё что-то, делалось оно по горячим следам, в процессе работы. Может кому и пригодится.



размещено: 2006-11-02,
последнее обновление: 2014-07-27,
автор: lissyara


vad73, 2006-11-09 в 14:28:43

Как-то у меня вылетел второй диск в зеркале - и после гарантийной замены я подключил новый - но gmirror видимо помнил предыдущий диск и зеркало не хотело автоматически восстанавливаться.

Спасли меня вот эти строчки:
# gmirror forget gm0
# gmirror insert gm0 /dev/ad1

Не дай бог конечно - но вдруг кому пригодится.

Artem Za..., 2006-11-11 в 23:10:03

Вот еще один момент, если только создается массив нужно при разметке зеркала  добавить -n, это даже описывается в хэндбуке FreeBSD
/usr/home/lissyara/>gmirror label -v -n -b round-robin gm0 /dev/ad0
Если этого не зделать второй диск не подцепитца (хотя он подцепица но будет висеть с режиме STALE), и вообще будет работать не стабильно, тоесть удалить, остановить массив будет невозможно, только каменты в конфиг файлах и ребут. После чего gmirror clear <оба диска>. А дальше как сказал выше, а может есть другой способ выхода???

AlexS, 2006-11-13 в 19:54:00

В http://people.freebsd.org/~rse/mirror/ рекомендуют обнулять MBR перед добавлением диска в зеркало

# dd if=/dev/zero of=/dev/ad1 bs=512 count=79

В моем случае действительно помогло. Без этого обнуления диск не хотел влезать в зеркало.
На счет того, что обязательно нужна опция "n" не уверен. Это всего лишь отключает автосинхронизацию массива и всегда может быть настроена

# gmirror configure -a gm0

Я забыл подпейсаца, асёл, 2006-12-06 в 22:42:23

Не упомянуто про команду gmirror load
В хэндбуке есть, в статье нет
Пока не запустил - рэйд не начал работать

Владимир, 2006-12-11 в 15:52:01

вот только, если после ребута не загружается, то монтируешь руками корневую ФС и грузишься дальше, НО!!!
Монтируеться ТОЛЬКО корневая ФС, остальные не дает монтировать. Соответсвенно, файл /etc/fstab исправить нельзя.

Алексей, 2007-01-18 в 11:25:52

насчет только корневой FS - /sbin/mount никто не отменял 8)

Александр, 2007-06-11 в 19:04:19

Есть зеркало на gmirror из 2-х дисков. Изначально был /dev/ad0, вторым подключен /dev/ad2. Первый диск начал загибаться, и я хочу его заменить. Насколько я понимаю, надо включить /dev/ad2 как /dev/ad0, а на место /dev/ad2 установить новый диск. Но точно ли система после этого загрузится? Т.е. MBR и прочее там отзеркалено или нет?

smilealex, 2007-09-22 в 18:39:02

читаю всё подряд)) вот дошёл до этой статьи и тут меня осенило!)) а gmirror insert gm0 /dev/ad5 я не сделал ))) забыл!
и спокойненько так сижу уже с неделю - растяпа!
оффтоп, но сайт высший! вообще фряха ФОРЕВА)).. книг и хендбуков как-то недостаточно для полноценного освоения, но лиссярин ресурс дал мне ощутимый прирост в освоении этой замечательной ОС!

paix, 2007-10-16 в 0:08:41

Товарисчи, анука поведайте темнате о работе gmirror.
Если накрывается один из дисков, то второй диск "вытягивает" пока сбойный не заменят?
Если на одном из дисков повреждается файловая (например софт апдейтс еррос) то диск тоже предеает управление другому? Меня интересует именно восстановление в случае сбоев.

Также насколько глюков можно ожидать от этих софтварных рейдов?
PS. мне нравится идея с рсинком содержимого диска на другой винт, я ее и использую. И размышляю превысят ли преимущества рейда его недостатки.

yakuzzza, 2007-10-28 в 15:53:49

Вопросы в форум.

Будет тянуть на 1 диске.
При тестах перед внедрением в работу сделал зеркало - ребутнул.
Работает.
После вытянул второй винчестер - опять загрузил - работает.
Потом снова добавил второй и подождал пока закончится синхронизация.
Потом вытянул первый и ребутнул.
В общем все работало как надо.

Честный рейд на FreeBSD.

Кстати, работает на продакшн-сервере SQL при более сотни одновременных пользователей (FreeBSD-6.2 + Firebird2, зеркало на WD Raptor 10000RPM).

alex6600, 2008-04-07 в 22:43:38

А если 2 диска разного обьема, и разного типа (IDE и SATA)?

karakurty, 2008-04-08 в 16:27:45

С дисками разных объемов я боролся примерно так(37 и 38 гигов):
- поднял рейд на меньшем
- добавил больший винт в рейд
и соответственно получился рейд 1 с объемом меньшего винта. Предполагаю, что в обратном порядке добавление бы не произошло.

paix, 2008-04-08 в 17:05:32

в обратном порядке, разве что если рейд не на винте а на разделе.

mymy, 2008-08-13 в 13:42:04

Предположительно после обновления портов на FreeBSD 7 упало зеркало после ребута. Пришлось ручками в однопользовательском режиме править fstab на первоначальное состояние и снова делать зеркало. Причем gmirror даже не помнил,что были 2а диска под его началом. Сталкивался кто-то?

drurus, 2009-01-27 в 13:53:06

он и не будет помнить. инфа записана на самих дисках

Eugene, 2009-02-18 в 21:47:19

Спасибо, огромное!
Какой человек, такой и сайт...

Kot_Off, 2009-04-27 в 13:32:12

Спасибо!

stooper, 2009-06-25 в 1:25:32

друзья, если у вас упаси бозже, не стартанула система после правки fstab))
я вот допустил ошибку банальную когда редактировал, и система после перезагрузки ругнулась.
загрузился в single-user mode.
по умолчанию "/" маунтится в READ-ONLY, делаем
# mount -w /
затем
# mount -w /usr
что бы заработал простой текстовый редактор ee, и уже затем
# ee /etc/fstab
и редактируем как нужно) затем
CTRL-D - переходим в multiuser-mode
может пригодится кому, что бы не отвлекаться потом.
со всем остальным уже проблем не было :)

godlike, 2009-07-04 в 1:25:59

Рекомендую в свое ядро добавить
options GEOM_MIRROR

потому что так стабильнее,
а то модуль мало ли, вдруг отпадет=)

З.Ы. Ну и не забить удалить
geom_mirror_load=YES из loader.conf

stofel1, 2009-07-14 в 14:08:07

Про то куда делся свап нет ни слова.

lissyara, 2009-07-19 в 16:55:36

а самому подумать - нынче не принято чтоли?

vitiko007, 2009-08-25 в 15:16:29

Хорошая статья...
Но эта [link deleted] мне понравилась больше :)

paix, 2009-08-25 в 15:39:45

вообщето,
http://www.freebsd.org/doc/en/books/handbook/geom-mirror.html

из практических нюансов:

рейд следует делать с опцией -n  (выключенная автосинхронизация), иначе в случае каких проблем с питанием в системе стартуют два конкурентных процесса fsck и ребилд рейда.

lissyara, 2009-08-25 в 15:39:46

Нехорошо ставить ссылки на сайты с краденым контентом.
Поэтому ссылку я удалил, и оставляю на сайт где был оригинал указанной статьи - хотя щас я его там и не нашёл.
http://dreamcatcher.ru/bsd/index.html

night-man, 2009-11-30 в 7:04:00

По поводу "-n" : согласно ману эта опция отключает автосинхронизацию - соответственно после:
gmirror label -v -n -b round-robin gm0 /dev/ad0
gmirror insert gm0 /dev/ad1
в статусе массив не синхронизируется
#gmirror status
     Name    Status  Components
mirror/gm0  DEGRADED  ad0
                     ad1
включение автосинхронизации тоже ничего не дало

#gmirror configure -a gm0
и лишь только после удаление и присоединение диска вновь:
# gmirror forget gm0  #
# gmirror insert gm0 /dev/ad1  #
массив начал синхронизироваться

#gmirror status
     Name    Status  Components
mirror/gm0  DEGRADED  ad0
                     ad1  (1%)

если кому будет полезно - а то читая каменты немного запутался... а так все делается копи-пастом - большое спасибо!

paix, 2009-11-30 в 11:02:34

да, при -n автоматом не включается (так и должно быть)
нужно руками запустить ребилд:

# gmirror forget gm0  
# gmirror insert gm0 /dev/ad1  
# gmirror rebuild gm0 /dev/ad1  

night-man, 2009-12-21 в 20:42:49

а обязательно ли
# gmirror forget gm0  
# gmirror insert gm0 /dev/ad1  
# gmirror rebuild gm0 /dev/ad1
достаточно лишь
# gmirror rebuild gm0 /dev/ad1
если не менялся винт

karpekin, 2010-05-22 в 0:02:57

Благодарю автора статьи. Мой первый рейд работает.

Bob_St, 2010-06-17 в 12:36:14

echo 'geom_mirror_load="YES"'

Alexey, 2010-10-15 в 4:49:15

по поводу RAID и swap если внимательно читать хендбук, там есть сносочка:
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/adding-swap-space.html

111, 2010-11-01 в 16:05:41

А как насчет создать файловую систему?
сомневаюсь чтобы получилось смонтировать /dev/mirror/gm0 куда-либо без команды:

newfs -U /dev/mirror/gm0

Alex Keda, 2010-11-01 в 16:16:28

а как насчёт прочесть статью и man целиком?
создаётся зеркало диска с существующей файловой системой. уже всё создано.

FX, 2011-03-05 в 13:12:46

а кому нибудь удавалось GEOM GMIRROR с поддержкой QUOTES поднять?

jeck, 2012-11-21 в 2:44:25

спасибо lissyara и vad73  все теперь после падения зеркала все рабоиает

Серега, 2013-01-17 в 18:53:52

gmirror: Provider ad too small - это значит что диски разные размером! Исходный диск больше чем подцепляемый второй диск...
Для этого нужно диски поменять местами!!!
При помощи софтины - clonehdd клонировать с диска большего размера на меньший, а затем загрузится с меньшего диска и к нему уже добавить диск большего
объема при помощи gmirror

PazitiFF, 2013-04-27 в 13:53:08

Вот тут  еще описание того как построить RAID для FreeBSD 9 с использованием gmirror. [url=http://infobsd.ru/freebsd/gmirror-gpt]

PazitiFF, 2013-04-27 в 13:57:26

Случайно поставил не так ссылку, извинните и удалите пожалуйста предыдущий коммент, вот нормальная ссылка http://infobsd.ru/freebsd/gmirror-gpt , где описано, как построить RAID для FreeBSD 9 с использованием gmirror и GPT.

Мфынф, 2013-05-13 в 1:26:37

Eugene, 2009-02-18 в 21:47:19

Спасибо, огромное!
Какой человек, такой и сайт...



И сайт говно, и человек такой же



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0469 секунд
Из них PHP: 39%; SQL: 61%; Число SQL-запросов: 54 шт.
Исходный размер: 52064; Сжатая: 11715