Статья добавлена: 2013-09-16 01:07:38
Автор: Сергей

Программный raid1 FreeBSD


Перед началом, убедитесь, что у вас есть два физических диска равной емкости.
Предположительно ваша ОС FreeBSD установлена на первый жесткий диск в моем варианте ad4
Перед построением зеркала включите дополнительную отладочную информацию и откройте доступ к устройству:
  • sysctl kern.geom.debugflags=17

Теперь создаeм зеркало.
gmirror label -vb round-robin gm0 /dev/ad4
Система выдаст:
  • Metadata value stored on /dev/ad4.
    Done.

Инициализируем GEOM:
  • gmirror load

После успешного завершения команды будет создано устройство gm0 в каталоге /dev/mirror
Включение автоматической загрузки модуля geom_mirror.ko во время старта операционной системы:
  • echo geom_mirror_load="YES" >> /boot/loader.conf

Или можно пересобрать ядро добавив строку:
  • options GEOM_MIRROR

Отредактируем файл /etc/fstab, заменив в нём упоминания старого имени устройства ad4 новым именем устройства зеркала gm0. Предварительно сделав копию файла fstab.
  • cp /etc/fstab /etc/fstab.orig

До редактирывания ваш файл fstab был приблезительно такого вида :
  • # Device Mountpoint FStype Options Dump Pass#
    /dev/dev/ad4s1b none swap sw 0 0
    /dev/dev/ad4s1a / ufs rw 1 1
    /dev/dev/ad4s1d /usr ufs rw 0 0
    /dev/dev/ad4s1f /home ufs rw 2 2
    /dev/dev/ad4s1e /var ufs rw 2 2
    /dev/acd0 /cdrom cd9660 ro,noauto 0 0

После того как мы в нем полазим примет следующий вид:
  • # Device Mountpoint FStype Options Dump Pass#
    /dev/mirror/gm0s1b none swap sw 0 0
    /dev/mirror/gm0s1a / ufs rw 1 1
    /dev/mirror/gm0s1d /usr ufs rw 0 0
    /dev/mirror/gm0s1f /home ufs rw 2 2
    /dev/mirror/gm0s1e /var ufs rw 2 2
    /dev/acd0 /cdrom cd9660 ro,noauto 0 0

Перезагрузите систему:
  • shutdown -r now
С этого момента во время каждой загрузки система должна использовать устройство gm0 вместо устройства ad4. Удостовериться в этом можно так: дождитесь загрузки системы, наберите команду mount и просмотрите её вывод:
  • mount Filesystem 1K-blocks Used Avail Capacity Mounted on
    /dev/mirror/gm0s1a 1012974 224604 707334 24% /
    devfs 1 1 0 100% /dev
    /dev/mirror/gm0s1f 45970182 28596 42263972 0% /home
    /dev/mirror/gm0s1d 6090094 1348356 4254532 24% /usr
    /dev/mirror/gm0s1e 3045006 2241420 559986 80% /var
    devfs 1 1 0 100% /var/named/dev
Теперь для того чтоб началась синхронизация данных нам нужно добавить второй диск который у меня определился как ad6.
  • gmirror insert gm0 /dev/ad6
Во время построения зеркала статус процесса построения может быть проверен следующей командой:
  • gmirror status
Вывод данной команды будет выглядеть так:
  • Name Status Components
    mirror/gm0 COMPLETE ad4
                                      ad6
Через определенное время как бы мы этого не хотели у нас диск выйдет из строя (надеюсь один) для того чтоб произвести замену диска ad4 нам нужно:
  • gmirror remove gm0 ad4
После чего выключаем машину извлекаем нерабочий диск и ставим на его место рабочий и добавляем уже новый диск в зеркало:
  • gmirror forget gm0
    gmirror insert gm0 /dev/ad4

Root mount error

Но данная схема у меня не заработала выкидывало ошибку Root mount error. При которой у меня не удалось подмантировать не чего ((. Пришлось брать LiveCD и грузиться с него править fstab(копирывать данные из fstab.orig) и только после этого тазик оживал. Все манипуляции будут производиться на 2-ом диске тобиж тот который еще чистый у меня это ad6. Очищаем его:
  • dd if=/dev/zero of=/dev/ad1 bs=512 count=79
    sysctl kern.geom.debugflags=17 gmirror label -v -n -b round-robin gm0 /dev/ad1
Инициализируeм GEOM:
  • gmirror load
Размечаем диск
  • fdisk -v -B -I /dev/mirror/gm0
    bsdlabel -w -B /dev/mirror/gm0s1 # initialize
    bsdlabel -e /dev/mirror/gm0s1 # create custom partitions
Теперь руками создаете нужное количество партиций, как на ad4 (bsdlabel ad4) a: размерG 16 (* - означает что bsdlabel сам произведет пересчет смещений)
b: размерG * swap
c: не трогаем
d: размерG *
e: размерG *
После создаем файловую систему, монтируем раздел, переходим туда копируем данные и распаковываем.
  • newfs -U /dev/mirror/gm0s1a
    mount /dev/mirror/gm0s1a /mnt
    cd /mnt
    dump -0auLf - /mnt /dev/ad4s1a
    restore -rf ad4s1a
    newfs -U /dev/mirror/gm0s1d
    mount /dev/mirror/gm0s1d /mnt/var
    dump -L -0 -f- /var | (cd /mnt/var; restore -r -v -f-)
    newfs -U /dev/mirror/gm0s1e
    mount /dev/mirror/gm0s1e /mnt/usr
    dump -L -0 -f- /usr | (cd /mnt/usr; restore -r -v -f-)
Делаем резерв файла fstab:
  • cp -p /mnt/etc/fstab /mnt/etc/fstab.orig
правим файл заменив /dev/ad6 на /mirror/gm0
Добавляем:
  • echo geom_mirror_load="YES" >>/mnt/boot/loader.conf
Перегружаем систему в BIOS выставляем загрузку со второга диска
  • shutdown -r now
После удачной загрузки c ad6, производим манипуляции теперь уже с ad4:
  • dd if=/dev/zero of=/dev/ad0 bs=512 count=79
    gmirror configure -a gm0
    gmirror insert gm0 /dev/ad4
После того как диски синхронизировались перегружаем систему и наслаждаемся работай.
  • shutdown -r now
Также если есть резервные копии данных проще затереть оба диска чтоб не мучатся
  • dd if=/dev/zero of=/dev/ada1 bs=1m count=1
  • dd if=/dev/zero of=/dev/ada1 bs=1m oseek=`diskinfo ada1 | awk '{print int($3 / (1024*1024)) - 4;}'`