Документация по ОС FreeBSD Среда, 15.05.2024, 01:19
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Установка и настройка

Удаленная миграция с i386 на amd64 [2008]
Для написания этой заметки использовалось множество различного материала, найденного в глобальной сети Internet. Указать конкретно, что и откуда брал не представляеться возможным, так как иногда это была просто наводка в нужном направлении. Так что авторам, заметившим какие-либо совпадения со своими работами, просьба написать и я добавлю вас в список источников информации. Отдельное спасибо товарищу lissyara, который полночи консультировал меня по ходу миграции.
   Все началось с того, что сервер переехал с dedicated (арендуемого) на colocation (размещенный). На дедике стояла дешевая "железка" на базе одноядерного Intel Pentium IV с 1Гб оперативной памяти, а под colocation был куплен 4-х ядерный AMD Phenom с 4Гб оперативной памяти. Соответственно хотелось получить все прелести 64-битного процесора AMD. Задача осложнялась тем, что сервер был перенесен с помощью стандартных утилит dump/restore и был полностью настроен. Вариант с установкой новой ОС FreeBSD amd64 с последующей установкой и настройкой всего программного обеспечения не впечатлял, так как мороки там было много, да и подзабыл я уже некоторые важные мелочи. Поэтому было принято решение мигрировать из-под действующей, рабочей ОС.
   В итоге имеем: сервер с процессором amd64, двумя жесткими дисками, 4Гб ОЗУ, установленной ОС FreeBSD 6.3-stable i386 без SMP и PAE. На выходе нужно получить ОС FreeBSD 6.3-stable amd64 с SMP.
   Приступим.
   ОС установлена на первом жестком диске hdd (имя диска ad4), второй жесткий диск (ad5) соответствено остался незадействованным (планировался под gmirror). Вот на него (ad5) и будем ставить новую ОС. Через sysinstall создаем разделы и монтируем их в /mnt.
Part Mount Size Newfs 
---- ----- ---- ----- ---- 
ad5s1a /mnt 232GB UFS2+S Y

   В итоге должно получиться примерно следующее:
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s1a 480M 107M 335M 24% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad4s1d 1.9G 20K 1.8G 0% /tmp
/dev/ad4s1e 9.7G 1.1G 7.8G 13% /var
/dev/ad4s1f 19G 11G 7.3G 59% /usr
devfs 1.0K 1.0K 0B 100% /var/named/dev
/dev/ad4s1g 192G 2.5G 174G 1% /home
/dev/ad5s1a 232G 10K 456M 0% /mnt

   Собирать ядро будем сразу с необходимыми нам опциями, поэтому создаем файл конфигурации. В него вписываем только те директивы, которые нам нужны и не присутствуют в конфигурации по умолчанию. Все остальное подключаем из SMP (в свою очередь SMP подключает директивы из GENERIC).
# rm -rf /usr/obj/
# cat > /usr/src/sys/amd64/conf/MYKRN
include SMP
ident MYKRN-SMP
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_DEFAULT_TO_ACCEPT
options QUOTA

   При сборке ядра (kernel) и мира (world) указываем, что нам нужна архитектура amd64, ну и, конечно же, файл конфигурации ядра. Местом для установки является каталог /mnt, в котором смонтирован второй hdd.
# cd /usr/src
# make -j4 -s buildworld TARGET_ARCH=amd64
# make -j4 -s buildkernel TARGET_ARCH=amd64 KERNCONF=MYKRN
# make installworld TARGET_ARCH=amd64 DESTDIR=/mnt
# cd etc && make distribution DESTDIR=/mnt
# cd ../ && make installkernel TARGET_ARCH=amd64 DESTDIR=/mnt KERNCONF=MYKRN

   При наполнении каталога /etc дистрибутивов у меня вылезла неожиданная мелкая проблема - для sendmail'а не хватило файлов конфигурации. Разбираться, почему и из-за чего так получилось, времени не было, поэтому я их просто скопировал со старой ОС. После этого make distribution отработал без ошибок.
install: freebsd.cf: No such file or directory
*** Error code 71
Stop in /usr/src/etc/sendmail.
*** Error code 1
Stop in /usr/src/etc.
# ll sendmail/
total 16
-rw-r--r-- 1 root wheel 2,9K 22 янв 2004 Makefile
-rw-r--r-- 1 root wheel 4,0K 24 фев 04:03 freebsd.mc
-rw-r--r-- 1 root wheel 899B 22 ноя 19:20 freebsd.submit.mc
-rw-r--r-- 1 root wheel 2,2K 14 июн 2005 freefall.mc
# cp /etc/mail/freebsd.cf sendmail/
# cp /etc/mail/freebsd.submit.cf sendmail/

   Если все прошло успешно, на втором hdd вы должны получить установленную ОС FreeBSD 6.3 adm64. Теперь необходимо все подготовить для ее загрузки. Для этого копируем новое ядро в каталог /boot первого hdd и переименовываем в kernel64. Для разовой загрузки FreeBSD в другую конфигурацию будем использовать утилиту nextboot. Ее можно просто вызвать с необходимыми параметрами, а можно вручную создать для нее файл конфигурации nextboot.conf в каталоге /boot. Второй вариант мне приглянулся больше. В этом файле указываем, какое ядро загружать и какой раздел считать корневым.
# cp -r /mnt/boot/kernel /boot/kernel64
# echo 'nextboot_enable="YES"' > /boot/nextboot.conf
# echo 'kernel="kernel64"' >> /boot/nextboot.conf
# echo 'vfs.root.mountfrom="ufs:/dev/ad5s1a"' >> /boot/nextboot.conf

   Для того, чтобы можно было подключиться к новой ОС удаленно (и не только), копируем файлы пользовательских учеток и прочие настройки из старой ОС:
# cd /etc
# cp -rp host.conf ssh passwd group master.passwd pwd.db /
spwd.db resolv.conf /mnt/etc

   Создаем в новой ОС файл fstab в соответствии с имеющимися разделами:
# cat > /mnt/etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/ad5s1a / ufs rw 1 1
/dev/ad4s1b none swap sw 0 0
/dev/ad4s1a /mnt ufs rw 2 2
/dev/ad4s1e /mnt/var ufs rw 2 2
/dev/ad4s1f /mnt/usr ufs rw 2 2

   Создаем файл конфигурации ОС rc.conf. В него записываем только самое необходимое: настройки сети, запуск демона sshd и проверку файловой системы. Все остальное отключаем.
# cat > /mnt/etc/rc.conf
defaultrouter="xxx.xxx.xxx.xxx"
hostname="myhosting.ru"
ifconfig_xl0="inet xxx.xxx.xxx.xxx netmask 255.255.255.xxx"
sshd_enable="YES"
sendmail_enable="NONE"
firewall_enable="NO"
inetd_enable="NO"
fsck_y_enable="YES"
background_fsck="NO"

   На этом подготовка новой ОС закончена. Теперь, скрестив пальцы, перезагружаемся.
# shutdown -r now

   Если все было сделано правильно, то перед вами предстанет FreeBSD amd64. Если где-то ошиблись, то придется звонить/писать в службу поддержки вашего дата-центра и заказывать kvm. Вот тут-то и проявляется преимущество утилиты nextboot. Она пытается запустить ОС в новой конфигурации только один раз. Если ОС была перезагружена, то вы вернетесь к старому ядру.
   Но, тем не менее, даже если все было сделано правильно, есть возможность не увидеть свой сервер в сети. У меня, например, новое ядро переназначило нумерацию второго hdd (было ad5, стало ad8) и, соответственно, в автоматическом режиме ядро не загрузилось. Пришлось заказывать kvm и запускать ядро вручную.
mountroot> ufs:/dev/ad8s1a

   После этого все поднялось нормально и я смог подключиться к серверу по ssh.
   Проверяем:
# uname -a
FreeBSD myhosting.ru 6.3-STABLE FreeBSD 6.3-STABLE #0: Fri Apr 25 00:25:35 MSD 2008
serge@myhosting.ru:/usr/obj/amd64/usr/src/sys/MYKRN amd64

   Немного поясню, что у нас получилось. Мы загрузились с нового ядра и с новым миром со второго hdd. Старую ОС (первый hdd) мы смонтировали в каталог /mnt.
   Теперь нам необходимо собрать и установить мир и ядро в старую ОС. Действия аналогичные тем, что были ранее, только отличается количеством потоков (опция -j8), так как новое ядро поддерживает SMP (симметричную многопроцессорность). Вообще сборка в несколько потоков имеет сомнительную выгоду, так как есть риск появления ошибок сборки. Но я еще не разу не огребал таких проблем, поэтому продолжаю использовать эту опцию на свой страх и риск.
# cd /mnt/usr/src
# make -j8 -s buildworld
# make -j8 -s buildkernel KERNCONF=MYKRN
# make installworld DESTDIR=/mnt
# make installkernel DESTDIR=/mnt KERNCONF=MYKRN

   Комментируем все лишнее в rc.conf, оставив только самое нужное: настройки сети, запуск демона sshd, проверку файловой системы. Удаляем конфигурационный файл nextboot и перезагружаемся:
# vi /mnt/etc/rc.conf
# rm /mnt/boot/nextboot.conf
# shutdown -r now

   Таким образом мы получили ОС, успешно мигрировавшую с архитектуры i386 на amd64. Но для полного счастья еще необходимо пересобрать все ранее установленное программное обеспечение и удалить старые библиотеки. Искренне вам желаю, чтобы ваше программное обеспечение было установлено из портов.
# portupgrade -fca
# cd /usr/src && make delete-old-libs

   Хотелось бы заметить, что пересборка портов заняла полный рабочий день, тогда как сама миграция около 3-4 часов. Все по причине того, что при сборке какого-нибудь порта вываливалась ошибка, которую приходилось исправлять вручную, чаще всего путем индивидуальной пересборки нужного порта. Поэтому полную пересборку портов приходилось запускать более 5 раз. Возможно, я тут что-то делал не оптимально, но в итоге все встало на свои места.
   Когда закончили с портами, убираем комментарии в rc.conf и делаем контрольную перезагрузку:

# vi /etc/rc.conf # shutdown -r now

Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=8352


Источник: http://www.lissyara.su/?id=1583
Категория: Установка и настройка | Добавил: oleg (29.04.2008) | Автор: serge
Просмотров: 1012 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024