19.4. RAID1 - Зеркалирование (Mirroring)
Пред. | Глава 19. GEOM: Модульная инфраструктура преобразования дисковых запросов | След.

## 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`. Вывод этой команды достаточно прост и понятен.

Пред. | Наверх | След.
19.3. RAID0 - Создание дисковой последовательности (Striping) | Начало | 19.5. Сетевые устройства GEOM Gate

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

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