Home

FreeBSD 10: RAID1 - Mirroring

 

Предисловие.

Пришло время пробовать FreeBSD 10. И завести её на gmirror'е. Делал на основе своей предыдущей инстукции как поставить/замиррорить систему FreeBSD 9.1 на RAID1 с помощью gmirror.

Итого. Вернёмся к официальному FreeBSD handbook'у http://www.freebsd.org/doc/handbook/geom-mirror.html

 

Процесс - FreeBSD gmirror raid1.

Ставим FreeBSD 10, как мы это обычно делаем (без игр, без ports, без src, потому что последние два мы потом сольём с помощью svnlite. Насколько я помню, с установленными этими папками svnlite не обновляет эти деревья). Без всяких заморочек. Перегружаемся в свежеустановленную систему. Все описанные дальше команды я делал через ssh-подключение.

Если до этого оставались какие-то хвосты от предыдущих попыток запустить gmirror или же там есть какие-то другие разметки от других систем, то делаем:

# gpart destroy -F ada1 - на ada0 оно было всё стёрто в процессе установки.

Далее следуем инструкциям из FreeBSD HandBook 20.4.3 (номер не проверял в этот раз)

# gmirror load

# diskinfo -v ada0 |head -n3
ada0
        512             # sectorsize
        320071851520   # mediasize in bytes (298G)

# diskinfo -v ada1 | head -n3
ada1
        512             # sectorsize
        320071851520   # mediasize in bytes (298G)

# geom zero load

# gnop create -s 320071851520 gzero
Это число взято из предыдущей команды.

# gmirror label -v gm0 gzero.nop ada1
Metadata value stored on gzero.nop.
Metadata value stored on ada1.
Done.

# gmirror forget gm0

А вот дальше начинается интересное - я решил посмотреть, что показывает команда gpart show из инструкции (заглянул так сказать вперёд) и оказалось вот что:

# gpart show ada0 (далее вывод оставил из предыдущей статьи. Разве что на этих дисках в конце было свободно 92M)
=>        34  1953525101  ada0  GPT  (931G)
          34           6        - free -  (3.0k)
          40         128     1  freebsd-boot  (64k)
         168  1944059768     2  freebsd-ufs  (927G)
  1944059936     8388608     3  freebsd-swap  (4.0G)
  1952448544     1076591        - free -  (525M)

# gpart backup ada0
GPT 128
1   freebsd-boot         40        128
2    freebsd-ufs        168 1944059768
3   freebsd-swap 1944059936    8388608

И! У меня в конце оказалось 92 свободных мегабайт. Видимо потому что инсталлятор по умолчанию оперирует гигабайтам. Поэтому следующий шаг из официального handbook'а FreeBSD я пропускаю. В нём размер последнего слайса/партиции/etc уменьшается на 1 сектор, в результате чего команда gpart show начинает показывать - free -  (31k) в последней строке. У меня там итак уже 525M свободно.

# gpart backup ada0 > table.ada0
Если же у тебя нет свободного места в конце диска, то нужно последнее число в последней строке уменьшить на 1 (на единицу).

На моём примере должно было бы получиться
3   freebsd-swap 1944059936    8388607

# gpart restore mirror/gm0 < table.ada0

# gpart show mirror/gm0
=>        34  1953525100  mirror/gm0  GPT  (931G)
          34           6              - free -  (3.0k)
          40         128           1  freebsd-boot  (64k)
         168  1944059768           2  freebsd-ufs  (927G)
  1944059936     8388608           3  freebsd-swap  (4.0G)
  1952448544     1076590              - free -  (525M)

# newfs -U /dev/mirror/gm0p2
/dev/mirror/gm0p2: 949247.9MB (1944059768 sectors) block size 32768, fragment size 4096
        using 1517 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
        with soft updates
super-block backups (for fsck_ffs -b #) at:
 192, 1282432, 2564672, 3846912, 5129152, 6411392, 7693632, 8975872, 10258112, 11540352, 12822592,
....

# gpart bootcode -b /boot/pmbr  -p /boot/gptboot -i 1 mirror/gm0

bootcode written to mirror/gm0

далее лезем в /etc/fstab, чтобы заменить /dev/ada0* на /dev/mirror/gm0*

Handbook рекомендует сделать копию

# cp /etc/fstab /etc/fstab.orig

# vi /etc/fstab
# Device        Mountpoint      FStype  Options Dump    Pass#
/dev/mirror/gm0p2       /               ufs     rw      1       1
/dev/mirror/gm0p3       none            swap    sw      0       0

Далее в файл vi /boot/loader.conf добавляем строку geom_mirror_load="YES"

echo 'geom_mirror_load="YES"' >> /boot/loader.conf

Теперь пришло время скопировать систему с /dev/ada0p2 на /dev/mirror/gm0p2

# mount /dev/mirror/gm0p2 /mnt

# mount
/dev/ada0p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
/dev/mirror/gm0p2 on /mnt (ufs, local, soft-updates)

 Дальше забиваем временно на FreeBSD Handbook и клонируем раздел с помощью команды pax

# cd /

# pax -p eme -X -rw . /mnt
pax: /mnt/./var/run/devd.pipe skipped. Sockets cannot be copied or extracted
pax: /mnt/./var/run/log skipped. Sockets cannot be copied or extracted
pax: /mnt/./var/run/logpriv skipped. Sockets cannot be copied or extracted

Скопировалось буквально за минуту.

# df -h
Filesystem           Size    Used   Avail Capacity  Mounted on
/dev/ada0p2          897G    703M    825G     0%    /
devfs                1.0k    1.0k      0B   100%    /dev
/dev/mirror/gm0p2    897G    703M    825G     0%    /mnt

Теперь перегружаемся.
(необязательно) В BIOS на загрузку выбираем другой жёсткий диск. (обычно F12 при загрузке)
Если всё пойдёт, как должно, то мы загрузимся с mirror/gm0

# reboot

 Загрузилось.

# mount
/dev/mirror/gm0p2 on / (ufs, local, soft-updates)
devfs on /dev (devfs, local, multilabel)

Журналирование куда-то делось. Непонятно, должно ли оно было там быть на gmirror разделах - не знаю.

ВНИМАНИЕ! Теперь, мы в миррор будем подключать наш изначальный диск ada0 - все данные при этом на нём сотрутся.

На данный момент статус таков:

# gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ada1 (ACTIVE)

# gmirror insert gm0 ada0
В ответ не было сказано ни слова, хотя в handbook'е написан некий вывод GEOM_MIRROR: Device gm0: rebuilding provider ada0.

# gmirror status
      Name    Status  Components
mirror/gm0  DEGRADED  ada1 (ACTIVE)
                      ada0 (SYNCHRONIZING, 0%)

Синхронизирует оно всё это очень вяло как-то. При этом нагрузки на проц нету никакой.

А вот и ответ.

Оно, видимо, клонирует всю поверхность диска без разбора.

# gstat
dT: 1.002s  w: 1.000s
 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
    0      0      0      0    0.0      0      0    0.0    0.0| cd0
    0      0      0      0    0.0      0      0    0.0    0.0| iso9660/FREEBSD_INSTALL
    2   1277      0      0    0.0   1277 161984    1.0   83.0| ada0
    0   1266   1266 162106    0.5      0      0    0.0   54.0| ada1
    1   1266   1266 162106    0.6      0      0    0.0   56.1| mirror/gm0
    0      0      0      0    0.0      0      0    0.0    0.0| mirror/gm0p1
    0      0      0      0    0.0      0      0    0.0    0.0| mirror/gm0p2
    0      0      0      0    0.0      0      0    0.0    0.0| mirror/gm0p3 

Насколько я помню - у меня там было занято 823M из 298G.

Вот и всё. Теперь можно обновлять систему до STABLE и ставить порты через svnlite.