• Быстрый переход
  • Рубрики
  • Свежие записи
  • Метки
  • Архивы
  • Реклама 1
  • Реклама 2
  • Рейтинг@Mail.ru

    Создание программного RAID1 под FreeBSD c использованием gmirror


    Начиная с 5.3-Release, в состав FreeBSD входит утилита gmirror(8), которая позволяет вам более легко создавать решения RAID 1. Хотя существует учебник по gmirror(8), все равно требуется много вычислений размеров разделов с помощью bsdlabel или использование дискеты восстановления имеющейся системы.

    man 4 geom описывает используемые термины, которые включают в себя:

    Конфигурирование зеркалирования/дуплекса

    Если вы собираетесь сделать RAID 1, то не ищите лишних сложностей, а купите два идентичных (одного производителя и емкости) жестких диска. Вы можете и не последовать этому совету, но тогда столкнетесь с некоторыми сложностями и впустую потратите излишек свободного места на большем диске. Подключите диски как primary master и secondary master. Перед установкой операционной системы проверьте, что ваш CMOS распознает оба диска.

    Используя ваш любимый инсталляционный метод, запустите установку FreeBSD любой версии (5.3 или выше). Когда Вы принимаетесь за меню Select Drives, то должны увидеть ad0 и ad2. Выберите ad0, поскольку вы будете устанавливать операционную систему на primary master.

    С помощью утилиты fdisk удалите любые существующие разделы и выберите "Use entire disk". На вопрос о меню загрузки, ответьте "Standard MBR".

    В редакторе меток диска создайте разделы на ad0 согласно вашим требованиям. Если есть какие-либо сомнения, то выберите автоматический режим. После этого выберите устанавливаемые наборы и тип носителя, после чего установите операционную систему в обычном порядке.

    Когда установка завершится, установите ваш часовой пояс, создайте учетную запись пользователя, установите пароль root, и так далее.

    После настройки этих параметров не стоит перезагружаться. Нажмите Alt-F4 для перехода в режим командной строки. Первой командой, которую я ввожу, обычно бывает csh, для того, чтобы у меня была оболочка с историей команд (по умолчанию устанавливается оболочка Bourne).

    Создание зеркалирования/дублекса осуществляется вводом следующей команды:

    # gmirror label v b round robin gm0 /dev/ad0

    Где gmirror label создает зеркало, функция -v включает режим отладки, -b round-robin выбирает алгоритм балансировки (в настоящее время это наиболее быстродействующий алгоритм), gm0 - имя первого зеркала GEOM и /dev/ad0 указывает на диск, содержащий данные для зеркалирования.

    Однако, если вы попробуете выполнить эту команду сейчас, то будете разочарованы:

    # gmirror label -v -b round-robin gm0 /dev/ad0

    Can't store metadata on /dev/ad0: Operation not permitted

    Это особенность защиты, которая указывает, что диск в настоящее время установлен для записи и поэтому недоступен. Однако, вы можете обойти эту проблему цыпленка-и-яйца и временно вынудить gmirror обойти эту меру, чтобы создать зеркалирование/дуплекс, устанавливая sysctl MIB:

    # sysctl kern.geom.debugflags=16

    kern.geom.debugflags: 0 -> 16

    Не волнуйтесь, после перезагрузки этот параметр снова примет значение "0". А теперь выполним:

    # gmirror label -v -b round-robin gm0 /dev/ad0

    Metadata value stored on /dev/ad0

    Все, теперь у нас есть RAID 1.

    Так же теперь нам необходимо отредактировать два файла. Первый из них в настоящее время пуст, используем утилиту echo для того, чтобы внести в него необходимый параметр:

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

    Поскольку в файле /etc/fstab у нас уже содержатся некие данные, то лучше сделать его резервную копию.

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

    # vi /etc/fstab

    Измените каждый ad на gm и вставьте mirror после /dev. Для примера, /dev/ad0s1a трансформируется в /dev/mirror/gm0s1a. Если вы не делали дополнительные разделы, то у вас будут устройства ad0s1, оканчивающиеся на a, b, d, e и f. Необходимо отредактировать каждую строку.

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

    Обратите внимание, что в некоторых руководствах указано требование к наличию опции swapoff в /etc/rc.conf. Теперь это не является необходимым, так же как и использование shutdown -r now вместо reboot.

    Теперь, когда вы уверены, что все в порядке, нажмите Alt-F1, извлеките установочный диск и выйдите из утилиты установки.

    Загрузка в режиме зеркалирования/дуплекса

    Если вы внимательно смотрите на экран во время начальной загрузки, то должны увидеть следущие строки:

    GEOM_MIRROR: Device gm0 created (id=2125638583).

    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

    После монтирования /dev/mirror/gm0s1a система продолжит загрузку. Если вы допустили опечатку в /etc/fstab, то загрузка остановится и система будет ждать от вас каких-либо действий. Я забыла вставить mirror, когда редактировала /etc/fstab:

    Mounting root from ufs:/dev/gm0s1a

    setrootbyname failed

    ffs_mountroot: can't find rootvp

    Root mount failed: 6

    Manual root filesystem specification:

    :  Mount  using filesystem

    e.g. ufs:da0s1a

    ?             List valid disk boot devices

    Abort manual input

    mountroot>

    К счастью, все не так страшно, как выглядит. Сперва просмотрим доступные дисковые устройства:

    mountroot> ?

    List of GEOM managed disk devices:

    mirror/gm0s1f mirror/gm0s1e mirror/gm0s1d mirror/gm0s1c mirror/gm0s1b

    mirror/gm0s1a mirror/gm0s1 ad2s1 mirror/gm0 ad0s1 ad2 acd0 ad0 fd0

    Если вы укажете правильное расположение корневой файловой системы, то система продолжит загружаться:

    mountroot> ufs:/dev/mirror/gm0s1a

    Mounting root from /dev/mirror/gm0s1a

    После входа в систему, исправьте /etc/fstab и перезагрузитесь, после чего снова войдите в систему и удостоверьтесь, что все файловые системы примонтированы правильно:

    % df -h

    Filesystem            Size    Used    Avail    Capacity    Mounted on

    /dev/mirror/gm0s1a    248M     35M     193M       15%        /

    devfs                 1.0K    1.0K       0B      100%        /dev

    /dev/mirror/gm0s1e    248M     12K     228M        0%        /tmp

    /dev/mirror/gm0s1f    7.3G     99M     6.7G        1%        /usr

    /dev/mirror/gm0s1d    248M    196K     228M        0%        /var

    Утилита df не покажет состояние раздела подкачки, воспользуемся другой:

    % swapinfo

    Device                1K-blocks    Used    Avail    Capacity

    /dev/mirror/gm0s1b       629544       0   629544        0%

    Синхронизация дисков

    Единственное, что мы еще не сделали, так это не синхронизировали диски. Это случится автоматически, как только вы вставите второй диск в зеркало:

    # 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: 2125638583

    Providers:

    1. Name: mirror/gm0

    Mediasize: 10262568448 (9.6G)

    Sectorsize: 512

    Mode: r6w5e2

    Consumers:

    1. Name: ad0

    Mediasize: 10262568448 (9.6G)

    Sectorsize: 512

    Mode: r1w1e1

    State: ACTIVE

    Priority: 0

    Flags: DIRTY

    GenID: 0

    SyncID: 1

    ID: 3986018406

    2. Name: ad2

    Mediasize: 10262568448 (9.6G)

    Sectorsize: 512

    Mode: r1w1e1

    State: SYNCHRONIZING

    Priority: 0

    Flags: DIRTY, SYNCHRONIZING

    GenID: 0

    SyncID: 1

    Synchronized: 1%

    ID: 1946262342

    Обратите на SYNCHRONIZING в строке Flags. Для синхронизации дисков потребуется некоторое время, в настоящее время синхронизировано 1% данных. Приблизительно, время синхронизации составляет от 30 минут для 10Гб и 2.5 часа для 75Гб дисков. Если вам интересно, то вы можете понаблюдать за процессом:

    # gmirror status

    Name    Status    Components

    mirror/gm0    DEGRADED    ad0

    ad2 (2%)

    Когда синхронизация закончится, вы увидите следующее сообщение:

    GEOM_MIRROR: Device gm0: rebuilding provider ad2 finished.

    GEOM_MIRROR: Device gm0: provider ad2 activated.

    Если вы повторно выполните команду gmirror list, то увидите, что в строке State значение DEGRADED изменилось на COMPLETE. Не волнуйтесь, увидев в строке Flags состояние DIRTY, это означает, что система сделала запись на диск, но еще не синхронизировала данные между дисками, если подождать несколько секунд, не производя никаких дисковых операций, то можно увидеть, как состояние изменится на NONE.

    В финале действа, перезагрузите систему.

    Во время загрузки вы должны будете увидеть следущие сообщения:

    GEOM_MIRROR: Device gm0 created (id=2125638583).

    GEOM_MIRROR: Device gm0: provider ad0 detected.

    GEOM_MIRROR: Device gm0: provider ad2 detected.

    GEOM_MIRROR: Device gm0: provider ad0 activated.

    GEOM_MIRROR: Device gm0: provider ad2 activated.

    GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.

    Mounting root from ufs:/dev/mirror/gm0s1a

    Заключение

    Утилиты GEOM находятся в постоянном развитии, разработчики вовсю добавляют новые возможности и постоянно вносят изменения в страницы руководства man.

    Если вы желаете собрать статистику по производительности вашей системы, то используйте gstat(8), так как хорошая скорость работы через gmirror(8) необходима, особенно в случае неисправности одного из дисков.

    Автор: admin, 4 февраля 2010
    Рубрики: OS FreeBSD, Новости
    Метки: , , ,

    Написать комментарий

    Последние статьи