19.4. RAID1 - Зеркалирование (Mirroring)

Зеркалирование (Mirroring) — технология, применяемая как в корпоративной среде, так и на домашних компьютерах. Она позволяет создавать резервные копии ''на лету''. Зеркалирование, по сути, означает, что диск A является копией диска B. Или, возможно, диск C+D является копией диска A+B. Вне зависимости от конфигурации, основной аспект — дублирование информации. Позже, эта информация может быть с легкостью восстановлена или сохранена как резервная копия без остановки системы, или даже физически помещена в хранилище данных.

Перед началом, убедитесь, что у вас есть два физических диска равной емкости. Далее в этом примере подразумевается, что это диски прямого доступа (direct access, da(4)) с интерфейсом SCSI.

19.4.1. Зеркалирование первичных дисков

В статье предполагается, что FreeBSD установлена на первый жесткий диск, определяемый системой как da0. Это устройство будет целевым для утилиты gmirror(8).

Перед построением зеркала включите дополнительную отладочную информацию и откройте доступ к устройству. Это достигается установкой следующего значения переменной sysctl(8) kern.geom.debugflags:

# sysctl kern.geom.debugflags=17

Теперь создайте зеркало. Начните процесс с сохранения метаданных на первом диске. В результате выполнения следующей команды будет создано устройство вида /dev/mirror/gm:

Внимание: Создание зеркала на диске, с которого произведена загрузка, может повлечь за собой потерю данных в том случае, если данными занят последний сектор диска. Риск повреждения данных меньше, если создание зеркала немедленно следует за свежей установкой FreeBSD.

# gmirror label -vb round-robin gm0 /dev/da0

Система должна выдать следующее сообщение:

Metadata value stored on /dev/da0.
Done.

Инициализируйте GEOM, это повлечет за собой загрузку модуля ядра /boot/kernel/geom_mirror.ko:

# gmirror load

Замечание: После успешного завершения команды будет создано устройство gm0 в каталоге /dev/mirror.

Включите автоматическую загрузку модуля geom_mirror.ko во время старта операционной системы:

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

Отредактируйте файл /etc/fstab, заменив в нём упоминания старого имени устройства da0 новым именем устройства зеркала gm0.

Замечание: Если vi(1) — ваш любимый текстовый редактор, то эта задача решается просто:

# vi /etc/fstab

Сделайте резервную копию файла fstab, набрав в vi(1) :w /etc/fstab.bak. Затем замените все части строк, содержащие имя устройства da0, на имя gm0, набрав :%s/da/mirror\/gm/g.

Независимо от аппаратного интерфейса дисков (SCSI или ATA), устройство RAID будет именоваться всегда одинаково — gm. Содержимое файла fstab должно выглядеть подобно следующему:

# 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/gm0s2d     /store          ufs     rw              2       2
/dev/mirror/gm0s1e      /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0

Перезагрузите систему:

# shutdown -r now

С этого момента во время каждой загрузки система должна использовать устройство gm0 вместо устройства da0. Удостовериться в этом можно так: дождитесь загрузки системы, наберите команду 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

Как и ожидалось, вывод выглядит корректно. И в заключение, чтобы начать синхронизацию данных, включите в зеркало диск da1 при помощи следующей команды:

# gmirror insert gm0 /dev/da1

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

# gmirror status

Вывод вышеприведённой команды для построенного и синхронизированного зеркала выглядит подобно следующему:

      Name    Status  Components
mirror/gm0  COMPLETE  da0
                      da1

Если есть какие-либо неполадки или зеркало находится в процессе построения, в выводе команды будет обозначен статус DEGRADED вместо статуса COMPLETE.

19.4.2. Решение проблем

19.4.2.1. Система не загружается

Если система прекращает загрузку и выдает строку:

ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot>

Перезагрузите компьютер кнопкой питания или кнопкой ''Reset''. В загрузочном меню выберите опцию (6). Это приведет к тому, что система выдаст приглашение loader(8). Загрузите модуль ядра вручную:

OK? load geom_mirror
OK? boot

Если это сработало, модуль ядра по какой-либо причине не загрузился правильно. Проверьте корректность соответствующей записи в /boot/loader.conf. Если проблема осталась, добавьте строку:

options	GEOM_MIRROR

в файл конфигурации ядра, пересоберите и переустановите ядро. Это должно устранить проблему.

19.4.3. Восстановление после дисковых сбоев

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

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

# gmirror forget gm0
# gmirror insert gm0 /dev/da1

Для наблюдения за статусом построения используйте команду gmirror status. Вывод этой команды достаточно прост и понятен.

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.