среда, 14 мая 2008 г.

Создание программного RAID1 (FreeBSD)

На деле все оказывается очень просто. Втыкаем в сервер второй винчестер с аналогичной емкостью и запускаем систему. Условимся, что ad0 это системный диск, а ad2 - новый.
Далее от имени суперпользователя:

  1. Создаем зеркалируемый RAID массив
    # gmirror label -v -b round-robin gm0 /dev/ad0
    Здесь gmirror label создает зеркалируемый массив; -v включает подробный вывод; -b round-robin задает тип балансировки; gm0 - имя создаваемого массива. В случае, если выдаст ошибку
    Can't store metadata on /dev/ad0: Operation not permitted
    требуется выполнить
    # sysctl kern.geom.debugflags=16
    и снова попытаться создать массив.
  2. Теперь отредактируем файл /boot/loader.conf и разрешим загрузку нужного нам модуля GEOM при старте системы
    # echo 'geom_mirror_load="YES"' >> /boot/loader.conf
  3. Отредактируем записи в /etc/fstab, иначе после ребута система не сможет найти созданный нами дисковый массив и продолжить загрузку. Меняем ad0 на mirror/gm0.
    Было
    /dev/ad0s1b             none            swap    sw              0       0
    /dev/ad0s1a / ufs rw 1 1
    /dev/ad0s1e /tmp ufs rw,nosuid 2 2
    /dev/ad0s1f /usr ufs rw 2 2
    /dev/ad0s1d /var ufs rw,nosuid 2 2
    Стало
    /dev/mirror/gm0s1b              none            swap    sw              0       0
    /dev/mirror/gm0s1a / ufs rw 1 1
    /dev/mirror/gm0s1e /tmp ufs rw,nosuid 2 2
    /dev/mirror/gm0s1f /usr ufs rw 2 2
    /dev/mirror/gm0s1d /var ufs rw,nosuid 2 2
  4. Рестартуем
    # shutdown -r now
  5. После ребута система при старте выведет такие строки
    GEOM_MIRROR: Device gm0 created (id=877665149).
    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 already configured.
    Mounting root from ufs:/dev/mirror/gm0s1a
  6. Добавим второй диск в массив
    # gmirror insert gm0 /dev/ad2
    GEOM_MIRROR: Device gm0: provider ad2 detected.
    GEOM_MIRROR: Device gm0: rebuilding provider ad2.
    Смотрим на состояние массива
    # gmirror list | more
    Geom name: gm0
    State: DEGRADED
    Components: 2
    Balance: round-robin
    Slice: 4096
    Flags: NONE
    GenID: 0
    SyncID: 1
    ID: 877665149
    Providers:
    1. Name: mirror/gm0
    Mediasize: 40019581952 (37G)
    Sectorsize: 512
    Mode: r6w5e2
    Consumers:
    1. Name: ad0
    Mediasize: 40019581952 (37G)
    Sectorsize: 512
    Mode: r1w1e1
    State: ACTIVE
    Priority: 0
    Flags: DIRTY
    GenID: 0
    SyncID: 1
    ID: 3986018406
    2. Name: ad2
    Mediasize: 41110142976 (38G)
    Sectorsize: 512
    Mode: r1w1e1
    State: SYNCHRONIZING
    Priority: 0
    Flags: DIRTY, SYNCHRONIZING
    GenID: 0
    SyncID: 1
    Synchronized: 1%
    ID: 1946262342
    Массив перешел в критическое состояние и начал синхронизацию данных.
    Посмотреть на текущий статус массива можно так
    # gmirror status
    Name Status Components
    mirror/gm0 DEGRADED ad0
    ad2 (17%)
    где в скобках указан процент синхронизированных данных.
    После окончания синхронизации данных dmesg выведет
    GEOM_MIRROR: Device gm0: rebuilding provider ad2 finished.
    GEOM_MIRROR: Device gm0: provider ad2 activated.
    и статус массива поменяется на рабочий
    # gmirror status
    Name Status Components
    mirror/gm0 COMPLETE ad0
    ad2

9 комментариев:

SENATUM комментирует...

Спасибо, очень интерессно :)

Gregor комментирует...

Вот меня всегда удивляло: зачем все друг у друга копируют идиотизм с первой попыткой создать массив? Что, совсем нельзя начать сразу с sysctl?

Князь комментирует...

А вы не копируйте :)

f_andrey комментирует...

В пункте 3 по моему не совсем корректная трактовка "иначе после ребута система не запустится" не не запустится а не сможет найти дисковый массив и продолжить загрузку.
Хотя это умозаключение делаю из собственного опыта создания зеркала, дошло до определения структуры разделов и здрасте приехали, правда 5 минут раздумий и встроенный хелп с прямыми руками разрешили ситуацию безболезненно :)

Князь комментирует...

f_andrey: Спасибо за подсказку, поправил.

f_andrey комментирует...

Кстати не вникал, почему все инструкции рекомендуют выключать swap? А то вот столкнулся думаю стоит ли.

Князь комментирует...

Видимо в этом есть какой-то сакральный смысл.

Князь комментирует...

Могу предположить предположить, что свап на загруженной машине сильно замедляет софтовый RAID1 из-за интенсивного обмена данными с массивом.

f_andrey комментирует...

Да вот и я думаю что смысл какой то есть, пока вроде никто не объяснил, но некоторые тупо делают на рейде, ладно на досуге разберусь если не забуду :)