Зеркалирование системного диска

Приветствую всех. Сегодня я расскажу как создать RAID1 из системного и резервного винтов. Плюсы такого подхода налицо: вдруг чего случится с системным жестким диском, не охото заново все устанавливать, а так взял, да заменил сбойный винт и зеркало снова в строю, да и к тому же повысится скорость чтения (ведь данные будут идентичны на двух винтах, следовательно можно читать с обоих одновременно разные куски одного элемента ФС), хотя для меня это не самое важное, важнее надежность, да и хватает производительности существующей конфигурации, но все же это плюс. Ну такс начнем. Имеется: два винта и ОС FreeBSD 7.4.

Винты у меня определились так:

# ls /dev | grep ad
ad0
ad1

На винт ad0 установлена операционка. Сначала создадим зеркало:

# gmirror label -v -b round-robin gm0 /dev/ad0
gmirror: Can`t store metadata on /dev/ad0: Operation not permitted.

Что-то не пошло, лечится это просто:

# sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16

Снова пробуем создать зеркало

# gmirror label -v -b round-robin gm0 /dev/ad0
Metadata value stored on ad0.
Done.

В этот раз получилось. Вот некоторые ключи, которые принимает команда gmirror label:

  • -b - алгоритм балансировки (доступные смотрите в мане).
  • -F - отключить синхронизацию после сбоев питания.
  • -n - отключить автосинхронизацию.
  • -v - выводить дополнительную информацию.

Чтобы изменить параметры зеркала (алгоритм балансировки, автосинхронизация и т.п.), используйте команду gmirror configure. Теперь правим /etc/fstab. До изменения он у меня выглядел так:

# Device      Mountpoint     FStype     Options     Dump     Pass#
/dev/ad0s1b   none           swap       sw          0        0
/dev/ad0s1a   /              ufs        rw          1        1
/dev/ad0s1e   /tmp           ufs        rw          2        2
/dev/ad0s1f   /usr           ufs        rw          2        2
/dev/ad0s1d   /var           ufs        rw          2        2

После изменений стал таким:

# Device              Mountpoint     FStype     Options     Dump     Pass#
/dev/mirror/gm0s1b    none           swap       sw          0        0
/dev/mirror/gm0s1a    /              ufs        rw          1        1
/dev/mirror/gm0s1e    /tmp           ufs        rw          2        2
/dev/mirror/gm0s1f    /usr           ufs        rw          2        2
/dev/mirror/gm0s1d    /var           ufs        rw          2        2

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

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

Перезагружаемся. Если загрузка не удалась, то подгружаем корневой раздел ручками и доводим fstab до правильного состояния. Загрузившись, можно глянуть состояние зеркала и информацию о носителях:

# gmirror status gm0
        Name            Status               Components
mirror/gm0            COMPLETE     ad0
# gmirror list gm0
Geom name: gm0
State: COMPLETE
Components: 1
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 2730824176
Providers:
1. Name: mirror/gm0
   Mediasize: 21474835968 (20G)
   Sectorsize: 512
   Mode: r5w5e6
Consumers:
1. Name: ad0
   Mediasize: 21474836480 (20G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 135984322

Теперь можно добавить второй винт в зеркало. Делается это так:

# gmirror insert -v gm0 /dev/ad1
GEOM_MIRROR: Device gm0: rebuildingprovider ad1.
Done.

После этого зеркало будет синхронизироваться, состояние смотреть командой gmirror status gm0:

# gmirror status gm0
        Name            Status                Components
mirror/gm0            DEGRADED                       ad0
                                                     ad1 (10%)

Теперь ждем, когда закончится синхронизация зеркала, а после окончания синхронизации система на первую консоль выкинет сообщение "GEOM_MIRROR: Device gm0: rebuilding provider ad1 finished." и получится что-то подобное:

# gmirror status gm0
        Name            Status               Components
mirror/gm0            COMPLETE                      ad0
                                                    ad1
# gmirror list gm0
Geom name: gm0
State: COMPLETE
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 2730824176
Providers:
1. Name: mirror/gm0
   Mediasize: 21474835968 (20G)
   Sectorsize: 512
   Mode: r5w5e6
Consumers:
1. Name: ad0
   Mediasize: 21474836480 (20G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 135984322
2. Name: ad1
   Mediasize: 21474836480 (20G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 2544032587

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

P.S. Общий совет при создании рэйдов: лучше сначала разметить винт - сделать один большой раздел, но чуть меньше объема жесткого диска на 1-2Мб. А потом уже размечать так, как вам нужно массив. Это полезно тем, что винты из разных серий одного производителя или винты разных производителей одинакового объема могут немного различаться в количестве секторов, хорошо когда на втором винте их больше, а если их меньше, то такой винт в зеркало добавить не получится, поэтому намеренное уменьшение объема под рэйд массив избавит от подобных проблем.

Alexandr (не проверено)

Хорошая статья!
У меня сложилась ситуация когда надо сделать откат от gm0 в ad4.
было бы хорошо найти описание каким образом это делается.

nekit

Ничего сложного, просто порядок действий будет обратный:

  1. Оставляем в зеркале один основной винт (gmirror remove)
  2. Приводим /etc/fstab в необходимый вид
  3. Удаляем модуль geom_mirror из автозагрузки
  4. Перезагружаемся
  5. Устанавливаем kern.geom.debugflags равным 16
  6. Стираем метаданные с основного винта командой gmirror clear

Только сначала лучше потренироваться на тестовой машине.

Гость (не проверено)

I really enjoy good glass of wine. From a local vineyard or imported, it just elevates any occasion. Who else enjoys wine tasting?











My webpage ไวน์

Гость (не проверено)

I really enjoy good vintage wine. Whether it's red


or white, wine always makes the moment better.


Who else enjoys wine tasting? #WineTasting





Feel free to visit my web pagge ... แชมเปญ

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.

Последние комментарии

Яндекс.Метрика