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

Приветствую всех. Сегодня я расскажу как создать RAID1 из системного и резервного винтов. Плюсы такого подхода налицо: вдруг чего случится с системным жестким диском, не охото заново все устанавливать, а так взял, да заменил сбойный винт и зеркало снова в строю, да и к тому же повысится скорость чтения (ведь данные будут идентичны на двух винтах, следовательно можно читать с обоих одновременно разные куски одного элемента ФС), хотя для меня это не самое важное, важнее надежность, да и хватает производительности существующей конфигурации, но все же это плюс. Ну такс начнем. Имеется: два винта и ОС FreeBSD 7.4. Винты у меня определились так:
  1. # ls /dev | grep ad
  2. ad0
  3. ad1
На винт ad0 установлена операционка. Сначала создадим зеркало:
  1. # gmirror label -v -b round-robin gm0 /dev/ad0
  2. gmirror: Can`t store metadata on /dev/ad0: Operation not permitted.
Что-то не пошло, лечится это просто:
  1. # sysctl kern.geom.debugflags=16
  2. kern.geom.debugflags: 0 -> 16
Снова пробуем создать зеркало
  1. # gmirror label -v -b round-robin gm0 /dev/ad0
  2. Metadata value stored on ad0.
  3. Done.
В этот раз получилось. Вот некоторые ключи, которые принимает команда gmirror label:
  • -b - алгоритм балансировки (доступные смотрите в мане)
  • -F - отключить синхронизацию после сбоев питания
  • -n - отключить автосинхронизацию
  • -v- - выводить дополнительную информацию
Чтобы изменить параметры зеркала (алгоритм балансировки, автосинхронизация и т.п.), используйте команду gmirror configure. Теперь правим /etc/fstab. До изменения он у меня выглядел так:
  1. # Device      Mountpoint     FStype     Options     Dump     Pass#
  2. /dev/ad0s1b   none           swap       sw          0        0
  3. /dev/ad0s1a   /              ufs        rw          1        1
  4. /dev/ad0s1e   /tmp           ufs        rw          2        2
  5. /dev/ad0s1f   /usr           ufs        rw          2        2
  6. /dev/ad0s1d   /var           ufs        rw          2        2
После изменений стал таким:
  1. # Device              Mountpoint     FStype     Options     Dump     Pass#
  2. /dev/mirror/gm0s1b    none           swap       sw          0        0
  3. /dev/mirror/gm0s1a    /              ufs        rw          1        1
  4. /dev/mirror/gm0s1e    /tmp           ufs        rw          2        2
  5. /dev/mirror/gm0s1f    /usr           ufs        rw          2        2
  6. /dev/mirror/gm0s1d    /var           ufs        rw          2        2
Чтобы при загрузке ядро смогло обнаружить зеркало, нужно загрузить соответствующий модуль на этапе загрузки ядра, для этого добавляем в /boot/loader.conf следующую запись:
  1. # echo 'geom_mirror_load="YES"' >> /boot/loader.conf
Перезагружаемся. Если загрузка не удалась, то подгружаем корневой раздел ручками и доводим fstab до правильного состояния. Загрузившись, можно глянуть состояние зеркала и информацию о носителях:
  1. # gmirror status gm0
  2.          Name            Status               Components
  3. mirror/gm0            COMPLETE     ad0
  4.  
  5. # gmirror list gm0
  6. Geom name: gm0
  7. State: COMPLETE
  8. Components: 1
  9. Balance: round-robin
  10. Slice: 4096
  11. Flags: NONE
  12. GenID: 0
  13. SyncID: 1
  14. ID: 2730824176
  15. Providers:
  16. 1. Name: mirror/gm0
  17.     Mediasize: 21474835968 (20G)
  18.     Sectorsize: 512
  19.     Mode: r5w5e6
  20. Consumers:
  21. 1. Name: ad0
  22.     Mediasize: 21474836480 (20G)
  23.     Sectorsize: 512
  24.     Mode: r1w1e1
  25.     State: ACTIVE
  26.     Priority: 0
  27.     Flags: NONE
  28.     GenID: 0
  29.     SyncID: 1
  30.     ID: 135984322
Теперь можно добавить второй винт в зеркало. Делается это так:
  1. # gmirror insert -v gm0 /dev/ad1
  2. GEOM_MIRROR: Device gm0: rebuildingprovider ad1.
  3. Done.
После этого зеркало будет синхронизироваться, состояние смотреть командой gmirror status gm0
  1. # gmirror status gm0
  2.          Name            Status                Components
  3. mirror/gm0            DEGRADED     ad0
  4.                                                             ad1 (10%)
Теперь ждем, когда закончится синхронизация зеркала, а после окончания синхронизации система на первую консоль выкинет сообщение "GEOM_MIRROR: Device gm0: rebuilding provider ad1 finished." и получится что-то подобное:
  1. # gmirror status gm0
  2.          Name            Status               Components
  3. mirror/gm0            COMPLETE     ad0
  4.                                                            ad1
  5.  
  6. # gmirror list gm0
  7. Geom name: gm0
  8. State: COMPLETE
  9. Components: 2
  10. Balance: round-robin
  11. Slice: 4096
  12. Flags: NONE
  13. GenID: 0
  14. SyncID: 1
  15. ID: 2730824176
  16. Providers:
  17. 1. Name: mirror/gm0
  18.     Mediasize: 21474835968 (20G)
  19.     Sectorsize: 512
  20.     Mode: r5w5e6
  21. Consumers:
  22. 1. Name: ad0
  23.     Mediasize: 21474836480 (20G)
  24.     Sectorsize: 512
  25.     Mode: r1w1e1
  26.     State: ACTIVE
  27.     Priority: 0
  28.     Flags: NONE
  29.     GenID: 0
  30.     SyncID: 1
  31.     ID: 135984322
  32. 2. Name: ad1
  33.     Mediasize: 21474836480 (20G)
  34.     Sectorsize: 512
  35.     Mode: r1w1e1
  36.     State: ACTIVE
  37.     Priority: 0
  38.     Flags: NONE
  39.     GenID: 0
  40.     SyncID: 1
  41.     ID: 2544032587
На этом настройка закончена, теперь можно не беспокоиться за системный винт - даже если что-то с ним случится, то подстрахует второй в зеркале. Если винт вышел из строя, то заменяете винт, говорите зеркалу "забыть" о сбойном винте (команда gmirror forget) и обычным способом добавляете новый винт в зеркало. P.S. Общий совет при создании рэйдов: лучше сначала разметить винт - сделать один большой раздел, но чуть меньше объема жесткого диска на 1-2Мб. А потом уже размечать так, как вам нужно массив. Это полезно тем, что винты из разных серий одного производителя или винты разных производителей одинакового объема могут немного различаться в количестве секторов, хорошо когда на втором винте их больше, а если их меньше, то такой винт в зеркало добавить не получится, поэтому намеренное уменьшение объема под рэйд массив избавит от подобных проблем.

Комментарии

Аватар пользователя Alexandr
Alexandr
пн, 2011-07-25 07:42

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

Аватар пользователя nekit
nekit
пн, 2011-07-25 09:17

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

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

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

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

Filtered text

CAPTCHA
Этот вопрос предназначен для предотвращения автоматизированной обработки форм.
Fill in the blank.