Вторник, 26.11.2024, 20:15
# FreeBSD ГлавнаяРегистрацияВход
Приветствую Вас Гость | RSS
Меню сайта
Категории раздела
Мои статьи [167]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
 Каталог статей 
Главная » Статьи » Мои статьи

FreeBSD клонирование HDD не вынимая диска и не останавливая сервер
Содержание:
  |-----// Вступление
  |-----// Постановка задачи
  |-----// Выполнение переноса
         |-----// Установка 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 папкой "нового" сервера.






Категория: Мои статьи | Добавил: Admin (06.04.2011)
Просмотров: 2880 | Комментарии: 1 | Рейтинг: 5.0/1
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024Сделать бесплатный сайт с uCoz