Статьи

Міграція з i386 на amd64

  1. Дистанційна міграція з i386 на amd64

www.lissyara.su -> статті -> FreeBSD -> налаштування -> i386 => amd64

Дистанційна міграція з i386 на amd64

Автор: serge .


& nbsp Для написання цієї замітки використовувалося безліч різного матеріалу, знайденого в глобальній мережі Internet. Вказати конкретно, що і звідки брав не представляеться можливим, так як іноді це була просто наводка в потрібному напрямку. Так що авторам, які помітили будь-які збіги зі своїми роботами, прохання написати і я додам вас до списку джерел інформації. Окреме спасибі товаришу lissyara, який півночі консультував мене по ходу міграції.
& Nbsp Все почалося з того, що сервер переїхав з dedicated (орендованого) на colocation (розміщений). На Дедик стояла дешева "залізяка" на базі одноядерного Intel Pentium IV з 1Гб оперативної пам'яті, а під colocation був куплений чотирьохядерний AMD Phenom з 4 Гб оперативної пам'яті. Відповідно хотілося отримати всі принади 64-бітного процесора AMD. Завдання ускладнювалося тим, що сервер був перенесений за допомогою стандартних утиліт dump / restore і був повністю налаштований. Варіант з установкою нової ОС FreeBSD amd64 з подальшою установкою і налаштуванням всього програмного забезпечення не вражав, так як мороки там було багато, та й призабув я вже деякі важливі дрібниці. Тому було прийнято рішення мігрувати з-під діючої, робочої ОС.
& Nbsp У підсумку маємо: сервер з процесором amd64, двома жорсткими дисками, 4 Гб ОЗУ, встановленої ОС FreeBSD 6.3-stable i386 без SMP і PAE. На виході потрібно отримати ОС FreeBSD 6.3-stable amd64 з SMP.
& Nbsp Приступимо.
& Nbsp ОС встановлена ​​на першому жорсткому диску hdd (ім'я диска ad4), другий жорсткий диск (ad5) соответствено залишився незадіяним (планувався під gmirror). Ось на нього (ad5) і будемо ставити нову ОС. Через sysinstall створюємо розділи і монтуємо їх в / mnt.

Part Mount Size Newfs ---- ----- ---- ----- ---- ad5s1a / mnt 232GB UFS2 + SY

& Nbsp У результаті повинно вийти приблизно наступне:

# 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

& Nbsp Збирати ядро ​​будемо відразу з необхідними нам опціями, тому створюємо файл конфігурації. У нього вписуємо тільки ті директиви, які нам потрібні і не присутні в конфігурації за замовчуванням. Все інше підключаємо з 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

& Nbsp При складанні ядра (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

& Nbsp При наповненні каталогу / 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 /

& Nbsp Якщо все пройшло успішно, на другому 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

& Nbsp Для того, щоб можна було підключитися до нової ОС віддалено (і не тільки), копіюємо файли для користувача учеток і інші настройки зі старої ОС:

# Cd / etc # cp -rp host.conf ssh passwd group master.passwd pwd.db / spwd.db resolv.conf / mnt / etc

& Nbsp Створюємо в новій ОС файл 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

& Nbsp Створюємо файл конфігурації ОС 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"

& Nbsp На цьому підготовка нової ОС закінчена. Тепер, схрестивши пальці, перезавантажується.

& Nbsp Якщо все було зроблено правильно, то перед вами постане FreeBSD amd64. Якщо десь помилилися, то доведеться дзвонити / писати в службу підтримки вашого дата-центру і замовляти kvm. Ось тут-то і виявляється перевага утиліти nextboot. Вона намагається запустити ОС в новій конфігурації тільки один раз. Якщо ОС була перезавантажена, то ви повернетеся до старого ядра.
& Nbsp Але, тим не менше, навіть якщо все було зроблено правильно, є можливість не побачити свій сервер в мережі. У мене, наприклад, нове ядро ​​перепризначити нумерацію другого hdd (було ad5, стало ad8) і, відповідно, в автоматичному режимі ядро ​​не завантажили. Довелося замовляти kvm і запускати ядро ​​вручну.

mountroot> ufs: / dev / ad8s1a

& Nbsp Після цього все піднялося нормально і я зміг підключитися до сервера по ssh.
& Nbsp Перевіряємо:

# Uname -a FreeBSD myhosting.ru 6. 3 -STABLE FreeBSD 6. 3 -STABLE # 0: Fri Apr 25 00:25:35 MSD 2008 [email protected]: / usr / obj / amd64 / usr / src / sys / MYKRN amd64

& Nbsp Трохи поясню, що у нас вийшло. Ми завантажилися з нового ядра і з новим світом з другого hdd. Стару ОС (перший hdd) ми змонтували в каталог / mnt.
& Nbsp Тепер нам необхідно зібрати і встановити мир і ядро ​​в стару ОС. Дії аналогічні тим, що були раніше, тільки відрізняється кількістю потоків (опція -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

& Nbsp Коментуємо все зайве в rc.conf, залишивши лише найпотрібніше: настройки мережі, запуск демона sshd, перевірку файлової системи. Видаляємо конфігураційний файл nextboot і перезавантажуємося:

# Vi /mnt/etc/rc.conf # rm /mnt/boot/nextboot.conf # shutdown -r now

& Nbsp Таким чином ми отримали ОС, успішно мігрувала з архітектури i386 на amd64. Але для повного щастя ще необхідно пересобрать все раніше встановлене програмне забезпечення і видалити старі бібліотеки. Щиро вам бажаю, щоб ваше програмне забезпечення було встановлено з портів.

# Portupgrade -fca # cd / usr / src && make delete-old-libs

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

# Vi /etc/rc.conf # shutdown -r now
Посилання на обговорення: php?f=14&t=8352> http://forum.lissyara.su/viewtopic.php?f=14&t=8352 .

розміщено: 2008-04-28,
останнє оновлення: 2008-05-03,
автор: serge





Php?

Новости