Иногда нужно повысить надежность хранения данных. В этом случае возможно воспользоваться RAID1, то есть полным зеркалирование информации на другой жесткий диск. Рассказывать о типах RAID не вижу смысла, скорее всего вы уже владеете необходимой информацией. Если нет, то ознакомиться с типами RAID можно, например, здесь.
Итак решено. Будем строить програмный RAID1 с помощью gmirror. Разоряться на дорогие рейд-контроллеры не будем, а потратим немножко аппаратных ресурсов сервера для повышения отказоустойчивости ;)
Есть сервер с двумя хардами, которые определились как ad4 и ad6.
ad4: 476940MB <SAMSUNG HD501LJ CR100-10> at ata2-master SATA300 ad6: 476940MB <SAMSUNG HD501LJ CR100-11> at ata3-master SATA300 |
На ad4 стоит FreeBSD. Соответственно ad6 необходимо сделать клоном ad4.
Перед созданием зеркала необходимо вывести жесткий диск из режима записи (иначе на наши команды система ругнется нехорошими сообщениями). После перезагрузки сервера даный параметр вернется в исходное значение, так что сильно не заморачиваемся по этому поводу .
# sysctl kern.geom.debugflags=16 kern.geom.debugflags: 0 -> 16 |
Создаем зеркало следующей командой:
# gmirror label -v -b round-robin gm0 /dev/ad4 Metadata value stored on /dev/ad4. |
Немного о опциях:
gmirror label - собственно создание зеркала;
-v - включение режима отладки;
-b round-robin - режим балансировки;
gm0 - имя первого зеркала;
/dev/ad4 - диск, с которого будем брать данные для зеркалирования.
Поздравляю, теперь у нас есть RAID1. Однако это еще не все. Для того, чтобы после перезагрузки сервера все заработало, включаем загрузку модуля geom_mirror:
# echo 'geom_mirror_load="YES"' >> /boot/loader.conf |
Необходимо также внести изменения в /etc/fstab. Если вы еще не "подружились" с данным файлом, то вам сюда. В даном файле необходимо каждый ad заменить на gm и добавить mirror после /dev, обращая внимание на статическую нумерацию дисков и разделов.
Для примера, у меня /dev/ad4s1a превратится в /dev/mirror/gm0s1a. Необходимо отредактировать каждую строку. Вот как выглядит /etc/fstab после редактирования в моем случае:
# cat /etc/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 /home ufs rw 2 2 /dev/mirror/gm0s1f /tmp ufs rw 2 2 /dev/mirror/gm0s1g /usr ufs rw 2 2 /dev/mirror/gm0s1e /var ufs rw 2 2 |
Пожалуйста, будьте внимательны при редактировании данного файла. Будет досадно, когда система не загрузится из-за допущеной опечатки. Проверили? Отлично, продолжим.
Отправляем сервер на перезагрузку:
# shutdown -r now |
Смотрим, что у нас получилось:
# df -h Filesystem Size Used Avail Capacity Mounted on /dev/mirror/gm0s1a 1.9G 232M 1.6G 13% / devfs 1.0K 1.0K 0B 100% /dev /dev/mirror/gm0s1d 3.9G 52K 3.6G 0% /home /dev/mirror/gm0s1f 1.9G 52K 1.8G 0% /tmp /dev/mirror/gm0s1g 383G 2.9G 350G 1% /usr /dev/mirror/gm0s1e 58G 387M 53G 1% /var |
Кстати, утилита df не показывает состояние раздела подкачки. Для просмотра его состояния воспользуемся следующей командой:
# swapinfo Device 1K-blocks Used Avail Capacity /dev/mirror/gm0s1b 2097152 0 2097152 0% |
Остался последний шаг - синхронизация дисков. Синхронизация начнется, как только мы добавим в зеркало второй диск:
# gmirror insert gm0 /dev/ad6 |
Проверим состояние зеркала:
# gmirror list Geom name: gm0 State: DEGRADED Components: 2 Balance: round-robin Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 996585426 Providers: 1. Name: mirror/gm0 Mediasize: 500107861504 (466G) Sectorsize: 512 Mode: r7w6e7 Consumers: 1. Name: ad4 Mediasize: 500107862016 (466G) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 2655687235 2. Name: ad6 Mediasize: 500107862016 (466G) Sectorsize: 512 Mode: r1w1e1 State: SYNCHRONIZING Priority: 0 Flags: DIRTY, SYNCHRONIZING GenID: 0 SyncID: 1 Synchronized: 2% ID: 411127952 |
Обратите внимание на общее состояние зеркала - DEGRADED, а также на флаг SYNCHRONIZING. Для синхронизации дисков потребуется некоторое время, а в настоящее время синхронизировано 2% данных.
Подождите некоторое время, и снова выполните gmirror list.
Значение в строке State изменилось с DEGRADED на COMPLETE. Не волнуйтесь, увидев в строке Flags состояние DIRTY, это означает, что система сделала запись на диск, но еще не синхронизировала данные между дисками, если потождать несколько секунд, не производя никаких дисковых операций, то можно увидеть, как состояние изменится на NONE.
Есть возможность отправлять включить отчет о состоянии массива в ежедневный отчет. Для этого необходимо внести необходимую запись в periodic.conf:
# echo 'daily_status_gmirror_enable="YES"' >> /etc/periodic.conf |
Поздравляю. Настройка програмного RAID1 с помощью утилиты gmirror завершена.
Спасибо, за статью. Только
Спасибо, за статью.
Только что создал RAID1
Отлично. Искренне рад за вас
Отлично.
Искренне рад за вас :)