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

Создание зеракала gmirror с разбивкой gpart и использованием меток glabel

Автор: lissyara.


Жил был сервер, с одним диском. Недолго, месяца два =) Потом как-то "резко" стал важным звеном инфраструктуры, и, соответственно, кроме бэкапирования было решено доткнуть второй диск и сделать зеркало - программное, т.к. контроллер в нём ставить банально некуда (это HP ProLiant MicroServer, и все PCI разъёмы в нём уже заняты сетевухами).

Вполне естественно, что куда-то ехать и что-то делать лениво, поэтому диск дотыкают специально обученные люди, ну а я из дома делаю зеркало. Наличия ssh на сервер вполне достаточно.

Итого, после дотыкания диска имеем:
bsd1$ dmesg -a | grep ada
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <VB0250EAVER HPG9> ATA-8 SATA 2.x device
ada0: Serial Number Z3TR4KJ3
ada0: 300.000MB/s transfers (SATA 2.x, UDMA5, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 238475MB (488397168 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad4
ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
ada1: <VB0250EAVER HPG9> ATA-8 SATA 2.x device
ada1: Serial Number Z3TSPMND
ada1: 300.000MB/s transfers (SATA 2.x, UDMA5, PIO 8192bytes)
ada1: Command Queueing enabled
ada1: 238475MB (488397168 512 byte sectors: 16H 63S/T 16383C)
ada1: Previously was known as ad6
bsd1$ uname -a
FreeBSD bsd1.XXXX.ru 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16
 22:34:59 UTC 2014 root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64
bsd1$ 

ada0 - на нём живёт система, ada1 - доткнули. Выглядит это таким образом:
bsd1$ df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 222G 2,2G 202G 1% /
devfs 1,0K 1,0K 0B 100% /dev
linprocfs 4,0K 4,0K 0B 100% /proc
tmpfs 5,3G 4,0K 5,3G 0% /tmp

Прописываем загрузку модуля geom_mirror в /boot/loader.conf
bsd1$ grep mirror /boot/loader.conf
geom_mirror_load="YES"
bsd1$ 

Перезагружаем машину, проверяем загрузился ли модуль:
bsd1$ kldstat | grep mirr
 4 1 0xffffffff818be000 23288 geom_mirror.ko
bsd1$ 

(вообще, в спокойной обстановке, предпочитаю всё прописать в конфиг-файлах и перезагрузить машину - чтобы точно знать что всё будет работать, когда ты в отпуске гденить на даче копаешь очередную траншею, а в офисе отключили электричество и нехватило бесперебойников)

Итак, создаём зеркало из одного второго диска, первый в него доткнём потом:
bsd1$ gmirror label -v -b round-robin gm0 /dev/ada1
Metadata value stored on /dev/ada1.
Done.
bsd1$ 

Бэкапим таблицу разделов с первого диска, и, разворачиваем её на созданное зеркало:
bsd1$ gpart backup ada0 > /tmp/gpart.txt
bsd1$ gpart restore mirror/gm0 < /tmp/gpart.txt

Записываем загрузчик:
bsd1$ gpart bootcode -b /boot/pmbr mirror/gm0
bootcode written to mirror/gm0
bsd1$ gpart bootcode -p /boot/gptboot -i 1 mirror/gm0

Создаём файловую систему:
bsd1$ newfs -U /dev/mirror/gm0p2

Также, прибиваем метки к разделам - всё таки по меткам работать удобней, нежели по названиям дисков:
bsd1$ glabel label rootFS /dev/mirror/gm0p2
bsd1$ glabel label swapFS /dev/mirror/gm0p3

Монтируем раздел зеркала, переносим содержимое файловой системы:
bsd1$ mount /dev/label/rootFS /mnt
bsd1$ tar --one-file-system --create --file=- / | (cd /mnt; tar -xvf -)

Хочу заметить, что все активно работающие с файловой системой приложения, необходимо отключить до переноса - т.к. вместо базы данных, например, есть все шансы получить какую-то кашу.

После переноса, правим новый и старый fstab до такого состояния:
bsd1$ cat /mnt/etc/fstab 
# Device Mountpoint FStype Options Dump Pass#
/dev/label/rootFS / ufs rw 1 1
/dev/label/swapFS none swap sw 0 0
linprocfs /proc linprocfs rw 0 0
tmpfs /tmp tmpfs rw,nosuid,noexec 0 0
bsd1$
bsd1$ cp -p /mnt/etc/fstab /etc/fstab

(можно было поправить один, до переноса. Но - я об этом подумал уже после =)) и перезагружаем машину.

При перезагрузке происходит следующий фокус: загрузка начинается с диска ada0 - который не в зеркале. С него грузится ядро, запускается... Доходит до монтирования файловых систем и монтирует файловую систему с зеркала - которое пока стоит из одного диска ada1. Итого, после перезагрузки получаем такое:
bsd1$ df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/label/rootFS 222G 2,2G 202G 1% /
devfs 1,0K 1,0K 0B 100% /dev
linprocfs 4,0K 4,0K 0B 100% /proc
tmpfs 5,3G 4,0K 5,3G 0% /tmp
bsd1$
bsd1$ swapinfo 
Device 1K-blocks Used Avail Capacity
/dev/label/swapFS 4074644 0 4074644 0%
bsd1$ 

Втыкаем в зеркало второй диск:
bsd1$ gmirror insert gm0 ada0
bsd1$ gmirror status
 Name Status Components
mirror/gm0 DEGRADED ada1 (ACTIVE)
 ada0 (SYNCHRONIZING, 0%)

Процесс прошёл. Ввиду того что рейд софтверный, скорость синхронизации можно посмотреть обычными методами:
bsd1$ iostat -w 1
 tty ada0 ada1 pass0 cpu
 tin tout KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us ni sy in id
 0 29 126.12 549 67.62 126.97 546 67.74 0.33 0 0.00 0 0 1 1 98
 0 236 126.75 613 75.88 128.00 608 76.00 0.00 0 0.00 0 0 2 0 97
 0 76 126.81 616 76.29 128.00 611 76.41 0.00 0 0.00 0 0 1 0 99
 0 80 126.83 652 80.72 128.00 645 80.59 0.00 0 0.00 0 0 2 0 98
 0 80 126.72 598 74.05 128.00 592 74.05 0.00 0 0.00 0 0 1 0 99
 0 80 126.63 650 80.42 128.00 644 80.54 0.00 0 0.00 0 0 2 1 97
 0 80 126.79 633 78.35 128.00 626 78.22 0.00 0 0.00 0 0 2 1 97
^C
bsd1$ 

Через 50 минут - всё готово:
bsd1$ gmirror status
 Name Status Components
mirror/gm0 COMPLETE ada1 (ACTIVE)
 ada0 (ACTIVE)
bsd1$ 

В лог событий также пишутся сообщения о статусе зеркала:
bsd1$ tail -5 /var/log/messages
Jul 27 19:26:00 bsd1 newsyslog[1647]: logfile turned over due to size>100K
Jul 27 19:27:01 bsd1 kernel: GEOM_MIRROR: Device gm0: rebuilding provider ada0.
Jul 27 20:18:18 bsd1 kernel: GEOM_MIRROR: Device gm0: rebuilding provider ada0
 finished.
bsd1$ 



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


alex, 2014-07-28 в 9:34:56

> tar --one-file-system --create --file=- / | (cd /mnt; tar -xvf -)
dump -a0Lf- ... | restore -rf- ... не нравится?

Alex Keda, 2014-07-28 в 10:55:44

Нет. пару раз оно у меня "залипало". А с tar проблем никогда не было. Разве что --one-file-system забудешь =))

alex, 2014-07-28 в 14:23:45

"залипало" это как? Любопытно очень...
У меня с 2007 (тьфу тьфу тьфу) с dump - restore не было проблем, даже пару раз пользовался копиями после смерти hdd. Причем копии делались и вручную, и по планировщику на др. сервере по ssh.

Alex Keda, 2014-07-28 в 14:38:28

именно "залипало" - очущение будто к устройству типа /dev/zero прицепилось и с концами...
--
плюс, несколько раз сервер при его работе падал в панику. чаще всего с файловой системой на gjournal. лечится принудительным тестированием файловой системы, но, как говорится, осадочек остаётся...
--
в общем, я пересел на tar, все проблемы кончились, кроме вариантов когда на нечеканой файловой системе его запускаешь - тоже вплоть до паники может быть. но, в любом случае, реже чем dump/restore

alex, 2014-07-28 в 15:43:20

ясно, ну я пока что с таким не сталкивался, видимо, масштабы не те :-)
А с tar в самом-самом начале общения с unix-like системами бэкап не понравился (причем сам виноват, ман невнимательно прочитал в части --numeric-owner --uname --gname, лень было, с именами пользователей или id напортачил в итоге), так дампом и пользуюсь.
А вообще шкурка-то (софтовый массив) выделки стоила? Довольны остались?

Alex Keda, 2014-07-28 в 15:50:25

работает. просто работает =))
предыдущая версия статьи: http://www.lissyara.su/archive/gmirror/ сервер с которого статья писалась до сих пор работает. за почти 8 лет пару раз вручную запускал сборку, после того как питание особо жёстко дёргали и всё.
даже диски до сих пор работают =))

alex, 2014-07-28 в 16:17:14

ну раз оба диска работают, значит, случая оценить mirror еще не было :-D
Спасибо за статью Да и за сайт вообще: толковая информация, простое, но удобное оформление сайта, минимум рекламы!

Alex Keda, 2014-07-28 в 16:28:19

Было когда и ломались. На других серверах. Просто менял на новый и ручками втыкал. Записать как-то не догадался...
--
блин, сайт был вообще без рекламы. задрали вопросами - почему нет рекламы. необычно это выглядит в современном интернете. пришлось повесить, чтоб остали. серьёзно.

andy, 2014-10-03 в 15:31:39

Это в Москоме такие финты ушами?

Alex Keda, 2014-10-03 в 15:33:28

Не. У нас микросерверов нету. у нас не меньше юнита =))

andy, 2014-10-06 в 16:33:42

Вы в облако еще не перешли?

Alex Keda, 2014-10-06 в 17:41:13

ф топку =)

Неоригинально, 2014-12-22 в 12:54:31

Неоригинально. И заколебали уже :)



 

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

© lissyara 2006-10-24 08:47 MSK

веселые картинки развлекательные гифки интресные факты смешные видео смешные истории из соцсетей

Время генерации страницы 2.0315 секунд
Из них PHP: 99%; SQL: 1%; Число SQL-запросов: 77 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 35864