Geom mirror: drive or slice

Автор: | 28 июля 2010

RAID-массивы не гарантируют 100%-ной надежности сохранности данных, но тем не менее, часто выручают и дают определенную надежность всей системе в целом. Так, при выходе из строя одного из дисков массива, систему можно поднять с живого диска или она сама продолжит работу, не заметив потери бойца.

Хороший домашний (и даже серверный) вариант рейда – GEOM MIRROR (gmirror). В RAID 1 (зеркале) может быть от 2-х жестких дисков, при нынешних ценах на накопители, два веника в рейде – то, что нужно для дома.

Если у вас уже установлена система FreeBSD, сделать рейд не составит большого труда:

# установите эту переменную, чтобы система разрешила работать с дисками
sysctl kern.geom.debugflags=16

# скопируйте MBR и таблицу разделов
dd if=/dev/ad4 of=/dev/ad6 bs=1M count=1

# создайте зеркальный массив
gmirror label -n -v -b round-robin gm0 /dev/ad4

# добавьте, чтобы загружался geom_mirror
# здесь стоит упомянуть, что у вас его может не быть вовсе,
# тогда придется пересобирать ядро =)
echo 'geom_mirror_load="YES"' >> /boot/loader.conf

# в /etc/fstab замените ad4 на mirror/gm0

# вставьте второй диск в массив
gmirror insert gm0 /dev/ad6

# запустите синхронизацию вручную
# если хотите, чтобы все происходило автоматически,
# не используйте ключ -n при создании зеркала
gmirror rebuild gm0 ad6

# любоваться на процесс сборки рейда можете командой
gmirror status

Все это конечно хорошо, но когда у меня благополучно загнулся один веник, – новый оказался чуть меньшего размера 🙁

Пришлось делать финт ушами и пересобирать рейд на слайсах.

Плюсы в этом тоже были, изначально я выделил мало места под раздел /usr, а когда компилируется KDE и куча софта, засирается он очень эффективно.

# установите эту переменную, чтобы система разрешила работать с дисками
sysctl kern.geom.debugflags=16

# создайте слайс меньшего размера, чем весь диск
# создайте разделы и отформатируйте

# создайте новый массив со слайсом с нового диска
gmirror label -n -v -b round-robin gm1 /dev/ad6s1

# проверьте все разделы
fsck -t ufs /dev/mirror/gm1a
# и т.д.

# скопируйте всю информацию на новые разделы
mount /dev/mirror/gm1a /mnt
cd /mnt/
dump -L -f- / | restore -rf-

mount /dev/mirror/gm1d /mnt/usr
cd usr/
dump -L -f- /usr | restore -rf-
# и т.д., в зависимости от вашей разбивки

# добавьте загрузчик
boot0cfg -B /dev/ad6

# на всякий случай сохраните fstab
cp /etc/fstab /etc/fstab-bak
# отредактируйте /etc/fstab, замените gm0s1X->gm1X
# или просто выполните
sed -i -e 's/gm0s1/gm1/' /etc/fstab

# не забудьте проделать то же самое с /mnt/etc/fstab

umount /mnt
reboot

# после того, как вы загрузились с нового рейда,
# достаньте диск из старого рейда
sysctl kern.geom.debugflags=16
gmirror remove gm0 ad4

# скопируйте MBR и таблицу разделов на старый винт
dd if=/dev/ad6 of=/dev/ad4 bs=1M count=1

# соберите зеркало
gmirror insert gm1 /dev/ad4
gmirror rebuild gm1 ad4

Вроде бы все. От опечаток никто не застрахован, так что все манипуляции с дисками – на ваш страх и риск 😉

N.B. /!\

Если вы захотите на новом диске предварительно обновить систему и посмотреть на ее стабильность ДО сборки нового рейда, учтите, что ядро загружается с диска, который первым стоит в БИОСе, т.е., в данном случае, с ad4. Чтобы поднялось ядро с нового диска, вам нужно или сменить порядок загрузки в BIOS или жмакнуть F5 или выполнить что-то вроде:

# загружаться с первого слайса (-s 1) второго диска (0x81)
boot0cfg -B -d 0x81 -o setdrv,noupdate -s 1 -v -f /boot/boot0.old -t 182 /dev/ad4
# /boot/boot0.old - бекап загрузчика, на всякий..

P.S.

И не забудьте предварительно почитать мануалы)

По материалам статьи Dreamcatcher’а.

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