Приветствую всех. Сегодня я расскажу как создать 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Мб. А потом уже размечать так, как вам нужно массив. Это полезно тем, что винты из разных серий одного производителя или винты разных производителей одинакового объема могут немного различаться в количестве секторов, хорошо когда на втором винте их больше, а если их меньше, то такой винт в зеркало добавить не получится, поэтому намеренное уменьшение объема под рэйд массив избавит от подобных проблем.
пн, 25/07/2011 - 09:42
Хорошая статья!
У меня сложилась ситуация когда надо сделать откат от gm0 в ad4.
было бы хорошо найти описание каким образом это делается.
пн, 25/07/2011 - 11:17
Ничего сложного, просто порядок действий будет обратный:
Только сначала лучше потренироваться на тестовой машине.
Добавить комментарий