Содержание:
|-----// Вступление
|-----// Постановка задачи
|-----// Выполнение переноса
|-----// Установка FreeBSD и разметка диска
|-----// Настройка NFS сервера
|-----// Настройка NFS клиента
|-----// PAX - Копирование разделов
|-----// Заключительное конфигурирование
|-----// Краткое описание других методов клонирования HDD
// Вступление
Достался в наследство совсем старенький сервер на FreeBSD. При беглом осмотре выяснил следующее:
- на МБ попухли конденсаторы.
- кулер на южном мосту заклинило.
- при загрузке идут ошибки, предпологаю связанные с контроллерами HDD.
- общее состояние, ржавый корпус, ржавые болты крепления МБ. Попытался
вынуть посмотреть память, защелки наглухо заклинило. СД умер от
грязи, флоп тоже.
Думаю при нескольких стоп-стартах, сервер умрет. Очень удивило, как при таком состоянии конденсаторов, он еще работает.
// Постановка задачи
Сборка нового сервера. Предусмотрено 3 HDD, два объединены в RAID зеркало и один для осуществления задуманного, позже поясню.
Зеркалирование FreeBSD со старого железа на новое, при этом сервер должен продолжать работать, т.к. простой не возможен.
// Выполнение переноса
|----Установка FreeBSD и разметка диска
На "новый" сервер ставим FreeBSD, версия любая, я поставил 7.1. Установку производим на отдельный HDD, не на RAID. Конфигурируем сеть и прочие прелести из которых обязательным образом понадобится сервер NFS и еще поставил SSHD, так как в серверной нет монитора и работы проводил с удаленной консоли.
Следующийц шаг - работа с жесткими дисками объединенными в RAID. Весь
фокус в том, что таблица разделов должна один в один соответствовать
таблице разделов сервера. В моем случае на сервере имеется следующее:
$ df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad1s1a 126M 39M 77M 34% /
/dev/ad1s1d 9.6G 4.0K 8.8G 0% /cache
/dev/ad1s1h 4.9G 5.4M 4.5G 0% /jail
/dev/ad1s1g 3.8G 13M 3.5G 0% /tmp
/dev/ad1s1e 115G 80G 26G 75% /usr
/dev/ad1s1f 77G 32G 39G 45% /var
procfs 4.0K 4.0K 0B 100% /proc
На "новом" сервере создаем точки монтирования будующей файловой системы организованной на RAID.
#cd mnt
#mkdir root cache jail tmp var usr
//root - это для корневого раздела "/".
На "новом" сервере запускаем sysinstall:
#sysinstall
Переходим к конфигурированию HDD, напоминаю, сейчас нам надо
разметить HDD объединенные в RAID один в один, как на работающем
сервере.
Выбираем RAID диск для FDisk.
//В моем случае раид обозначен как ar0 и состоит из двух дисков ad4 и ad6.
Выбираем раид и диски его образующие. Переходим в программу разметки.
// Общая информация по работе с HDD
// Пример скриншота программы разметки, взят из офф. документации.
В данном примере Disk name будет содержать три записи, два HDD и RAID - выбираем Disk name: ar0
Жмем:
"A" - Использовать весь диск.
"S" - Сделать загрузочным.
"W" - Записать изменения.
"Q" - Для выхода.
Откроется окно с вопросом, куда прописать загрузчик. Выбираем Standart Install standart MBR --- Yes.
//Небольшое примечание к данному примеру. Т.к. используется три диска и
на одном уже стоит система и он является загрузочным, то впринципе можно
"S" и не жать, в дальнейшем грузится будем с него, а в fstab-е пропишем
новые разделы RAIDa.
В sysinstall заходим в Label для создания разделов.
// Пример скриншота программы разметки, взят из офф. документации.
В нашем случае разделы создаем для Disk: ar0 и Внимание! разделы должны точ в точ совпадть по последним буквам с разделами "старого" сервера. Т.е. :
//
----OLD---- ----NEW----
/dev/ad1s1a > /dev/ar0s1a
/dev/ad1s1d и так для каждого раздела
/dev/ad1s1h
/dev/ad1s1g
/dev/ad1s1e
/dev/ad1s1f
Если на "старом" сервере разделы создавались
автоматически, то можно проделыть эту не хитрую процедуру размечая новый
диск - просто жмем "А", но в контексте данного примера применена не
стандартная разбивка.
// Если новый hdd имеет больший размер, то на этом этапе можно увеличить
кричические разделы, например самые ресурсоемкие - это /var и /usr.
Для того, чтобы созданные разделы после форматирования автоматически
примонтировались к ранее созданным точкам монтирования, нажимаем "М" и
для каждого раздела прописываем. Например для корня это будет
"/mnt/root" для "var -> "/mnt/var" и так для каждого. По завершению
всех операций, нажимаем "w" - записать изменения. Если все
впорядке, система отформатирует разделы и примонтирует их. Посмотреть
все ли получилось можно с помощью команд:
#df -h
или
#mount
Должны увидеть следующее:
Free# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad12s1a 496M 138M 318M 30% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad12s1e 496M 26K 456M 0% /tmp
/dev/ad12s1f 172G 1.7G 156G 1% /usr
/dev/ad12s1d 3.7G 11M 3.4G 0% /var
/dev/ar0s1a 124M 39M 75M 34% /mnt/root
/dev/ar0s1d 9.7G 4.0K 8.9G 0% /mnt/cache
/dev/ar0s1h 4.8G 5.4M 4.4G 0% /mnt/jail
/dev/ar0s1g 3.9G 9.0M 3.6G 0% /mnt/tmp
/dev/ar0s1e 165G 39G 113G 25% /mnt/usr
/dev/ar0s1f 82G 32G 44G 42% /mnt/var
Красным пометил созданные и примонтированные
разделы, которые повторяют разделы "старого" сервера. Внимание! После
перезагрузки сервера, разделы автоматически примонтированы не будут и их
надо:
-монтировать вручную
-прописать разделы в fstab, тогда они будут автоматически монтироваться при перезагрузке.
Для второго варианта привожу содержание файла fstab:
//
Free# less /etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/ad12s1b none swap sw 0 0
/dev/ad12s1a / ufs rw 1 1
/dev/ad12s1e /tmp ufs rw 2 2
/dev/ad12s1f /usr ufs rw 2 2
/dev/ad12s1d /var ufs rw 2 2
/dev/ar0s1a /mnt/root ufs rw 2 2
/dev/ar0s1d /mnt/cache ufs rw 2 2
/dev/ar0s1h /mnt/jail ufs rw 2 2
/dev/ar0s1g /mnt/tmp ufs rw 2 2
/dev/ar0s1e /mnt/usr ufs rw 2 2
/dev/ar0s1f /mnt/var ufs rw 2 2
/dev/cd0 /cdrom cd9660 ro,noauto 0 0
|-----// Настройка NFS сервера
// Чтобы исключить путаницу, напомню, в качестве NFS
сервера выступает "новая" машина. Рекомендую делать именно так. Данная
машина не критична, а работающий "старый" сервер трогать чревато.
Чтобы заставить работать NFS сервер, достаточно было в момент
инсталляции ответить утвердительно на вопрос, будет ли данная машина
использоваться как NFS сервер. При этом в конфиге /etc/rc.conf появятся следующие строки:
nfs_client_enable="YES"
nfs_server_enable="YES"
rpcbind_enable="YES"
// можно внести изменение и сейчас через утилиту sysinstall или правкой файла /etc/rc.conf.
Проверяем работу сервера, должны быть запущены следующие службы (выделил красным):
Free# sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
--
root sendmail 907 4 tcp4 127.0.0.1:25 *:*
root sshd 901 4 tcp4 *:22 *:*
root mountd 819 7 udp4 *:960 *:*
root mountd 819 8 tcp4 *:960 *:*
root rpcbind 773 9 udp4 *:111 *:*
root rpcbind 773 10 udp4 *:961 *:*
root rpcbind 773 11 tcp4 *:111 *:*
root syslogd 744 7 udp4 *:514 *:*
Проверить работу демона nfsd можно так:
Free# ps -A | grep nfsd
1257 ?? Is 0:00.03 nfsd: master (nfsd)
1258 ?? I 0:00.01 nfsd: server (nfsd)
1259 ?? S 47:58.77 nfsd: server (nfsd)
1260 ?? I 2:01.63 nfsd: server (nfsd)
1261 ?? I 0:03.81 nfsd: server (nfsd)
После того, как убедились что все работает, открываем файл /etc/exports:
// подробнее #man exports
Вот содержание моего файла, ниже приведу пояснения и какие ошибки можно допустить.
Free# less /etc/exports
#The following examples export /usr to 3 machines named after ducks,
#/usr/src and /usr/ports read-only to machines named after trouble makers
#/home and all directories under it to machines named after dead rock stars
#and, /a to a network of privileged machines allowed to write on it as root.
#/usr huey louie dewie
#/usr/src /usr/obj -ro calvin hobbes
#/home -alldirs janice jimmy frank
#/a -maproot=0 -network 10.0.1.0 -mask 255.255.248.0
#
# You should replace these lines with your actual exported filesystems.
# Note that BSD's export syntax is 'host-centric' vs. Sun's 'FS-centric' one.
/mnt/root -maproot=root
/mnt/cache -maproot=root
/mnt/jail -maproot=root
/mnt/tmp -maproot=root
/mnt/usr -maproot=root
/mnt/var -maproot=root
#/mnt -alldirs,maproot=root
{mospagebreak
Каждая строка в /etc/exports соответствует физическому дисковому разделу.
В данном примере мы смонтировали все наши разделы в папки
/mnt, соответственно и перечисляем их. Параметр -maproot необходим для
уравнивания клиентского пользователя root с серверным. Проще говоря -
для полного доступа, т.к. я шарю для себя, только я знаю об этом и это
временно, то и даю полный доступ.
Параметр -alldirs для расшаривания всех директория, а
не только выбранной. Имеет смысл, когда необходимо шарить каталог со
всеми включенными в него подкаталогами.
В указанном примере есть закоментированная строка:
#/mnt -alldirs,maproot=0
специально оставил, т.к. по началу ошибочно сделал именно так. В данном
случае клиент подмантирует серверную папку /mnt, но вот разделов
/mnt/root /mnt/cache и т.д. не увидит.
После того, как закончили редактирование файла /etc/exports, необходимо
его перечитать, чтобы изменения вступили в силу. Делаем это следующей
командой:
#killall -1 mountd
Чтобы убедится в том, что сервер видит /etc/exports со всеми записями, выполняем следующую команду:
#showmount -e
Должны увидеть следующее:
Free# showmount -e
Exports list on localhost:
/mnt/var Everyone
/mnt/usr Everyone
/mnt/tmp Everyone
/mnt/root Everyone
/mnt/jail Everyone
/mnt/cache Everyone
Теперь переходим к клиенту NFS ("старый" сервер).
|-----// Настройка NFS клиента
Настройка - это громко сказано. Создаем папку куда будем монтировать, например в папке /mnt создадим:
/var /usr /tmp /jail /cache
Папку /root создадим в другом месте иначе при зеркалировании корня
сервера возникнут проблемы, т.к. root будет примонтирован к
корню, поэтому root создадим например в домашней папке.
Для того чтобы по сети подмонтировать разделы "нового" сервера, выполняем следующую команду:
#mount_nfs 192.168.10.164:/mnt/usr /mnt/usr
#mount_nfs 192.168.10.164:/mnt/var /mnt/var
....
#mount_nfs 192.168.10.164:/mnt/root /usr/home/user/root
где, 192.168.10.164 - IP адрес сервера ("новый" пк).
О том, что все подмонтировано как надо, можно судить по выводу команд:
# df -h
Должны появится строки:
192.168.10.164:/mnt/usr 165G 41G 110G 27% /mnt/usr
и т.д. //Подробней об утилите можно узнать набрав #man pax или здесь...
Для переноса данных, выполняем слудующие команды:
# cd / ; pax -p eme -X -rw . /usr/home/user/root # cd /var; pax -p eme -X -rw . /mnt/var # cd /usr; pax -p eme -X -rw . /mnt/usr
и т.д.
/tmp переносить необязательно.
Поясню первую запись. Переходим в корень "/" "старого сервера, выполняем
команду pax для копирования содержимаво в директорию с подмонтированной
по NFS папкой "нового" сервера.
|