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’а.