Собственно, upgrade и downgrade мало чем отличаются по сути. Если конечно разброс земены железок маловат, а вот если платформа меняется кaрдинально, то это уже интересней.

Как было
А была у меня в распоряжении, под некоторые нужды интернет пользователей (а для роутера и простенького веб-сервера сойдет), хорошая такая машинка с P4 на борту и стояла там Gentoo. Мой первый сервер на котором я поставил gentoo (о чем ничуть не жалею). Ставил долго, дня 3-4 просидел за ним, зато пол года проработал без единого вмешательства. Но речь сейчас не об этом. Случилось так, что железки пришлось передать на другие нужды, а заменить их подручным хламом. Чтож делать, хоть со старым железом покопаюсь. В итоге откопались материнская плата и процессор Pentium MMX 200МГц. Чтож, подумалось тогда мне, вот и проверим познания мои и силенки linux’a.

В чем собственно загвоздка при таком кардинальном обновлении железа. Во-первых, железо поменялось, надо обновлять ядро т.к. оно и отвечает за работу аппаратной части нашего компьютера (ака драйвера). Во-вторых, бинарная совместимость исполняемых файлов, ведь если дистрибутив собран под архитектуру процессора i686 он не обязан запускаться на i386. Поэтому то все популярные дистрибутивы и собираются под i386/x86, чтобы запуститься на любом процессоре. Но у меня случай другой, и я лично собирал систему под P4, а stage3 был i686 (system я так и не пересобрал, просто было лень, но погоды это не поменяло), а вот поступивший P-MMX был под i586. Из этого следует то, что ничего не запустится даже если пересобрать ядро под новый процессор, но об этом я узнаю позже, вот проверю сам лично и узнаю.

Теперь расскажу все по порядку.

Первым делом был перенос с прежде заготовленного полного бэкапа системы на новый жесткий диск. Все операции проводились вне рабочего сервера, дабы не потревожить его боеготовность до самого последнего. Диск подключен и подмонтирован, копия распакована и первым делом был установлен загрузчик GRUB, и подправлен fstab, т.к. таблица разделов временно изменилась.

$ mount /dev/hdb1 /mnt/gentoo 
$ tar -xjvf backup-02122007.tar.bz2 -C /mnt/gentoo 
$ mount -o bind /dev /mnt/gentoo/dev 
$ mount -t proc none /mnt/gentoo/proc 
$ chroot /mnt/gentoo 
$ env-update 
>> Regenerating /etc/ld.so.cache... 
$ source /etc/profile 
$ grep -v rootfs /proc/mounts > /etc/mtab 
$ vim /etc/fstab 
$ vim /boot/grub/grub.conf 
$ grub-install /dev/hdb

Чтож, grub установился без проблем и пора переставлять диск. Питание, жужание и вот оно — меню grub’a. Grub появился, а дальше пусто. Пишет, что ядро вроде как загрузилось, а вот процесс дальше не идет. Вот тут то и всплывает проблема номер один — необходимость пересборки ядра под другой процессор, если конечно оно не универсальное (i686 & x86 например) что есть правда в большинстве бинарных дистрибутивов. Но т.к. у меня gentoo, то я и ядро собирал сам и под свой P4. Чтож, отключаемся и несем винт на пересборку ядра. Кроме типа процессора (Processor type and features) особо менять ничего не надо… хотя я выкинул некоторые особенности новых процессоров, проверил поддержку ide контролера, и вкомпилировал модуль новой сетевой карты (нашел старую на время тестирования) и на последок выкинул поддержку USB т.к. нету такого на моей новой материнке.

Ядро быстренько собралось, закинулось, винт подключился и процесс пошел дальше меню grub’a. Это порадовало, но на таком вот этапе

Freling kernel memory ...

все опять встало. По началу грешил на ядро, хотя и не долго. Тут уже на лицо вторая проблема — бинарная несовместимость, т.к. в этом месте при нормальной загрузке запускается первая програма нашей системы — init, и раз она не запустилась значит наш процессор не тот, что надо.

Ну а решение довольно простое — перекомпилировать весь дистрибутив. Так и сделал, правда на самом ММХ я этого делать поостерегся, а вот простаивающий ночами еще один P4 грех было не попользовать. Распаковал снова мой бэкап. chroot и уже на месте:

# vi /etc/make.conf 
# emerge gcc 
# emerge -e system 
# emerge word

Но первым делом поменял архитектуру процессора под свой с i686 на i586 и кое чего изменил в make.conf:

CHOST="i586-pc-linux-gnu" 
CFLAGS="-march=pentium-mmx -O2 -pipe -fomit-frame-pointer" 
CXXFLAGS="${CFLAGS}"

Взял вот здесь: Safe Cflags

Кажется дело было так. Всего было около 300 пакетов. Снова архивируем и переносим на новый винт. Не забываем про grub.conf. Так же было продложено сделать etc-update, я выбрал «-9» т.к. система полностью настроенная и ничего лишнего не надо.

Грузимся и вуаля! Загрузка прошла успешно и без ошибок, я даже не ожидал такого.

Итог
Теперь этот Pentium ММХ 200MHz обрел вторую жизнь и тянет на себе такую вот ношу. Хорошо, что все distfiles были на месте, новая система на старом железе вышла точь в точь похожей на исходную, в плане версий программ, что даже ничего не пришлось править или шаманить т.е. обновления програмного обеспечения не произшло. А зачем оно нам? Все и так отлично работает, а что то менять не было желания и времени, ведь я эту систему уже более полугода не обновлял, мало ли чего за это время случилось.

Вот именно так оно и было, так что Вы узнали принципиальные основы up/down grade системы, что нужно поменять ядро и не только из-за того что процессор стал другим, но и поменялось еще некоторое оборудовние.

Впринципе, если железо «одного уровня», то могут только не запуститься Х-ы, следовательно нужно перегонфигурировать xorg под новые системные требования и все будет замечательно и даже работать.

Погладел в Debian, там есть пакеты типа linux-image-2.6.18-5-686, которые содержат уже готовый образ ядра под различные архитектуры, так что в нем даже проще, переустановить пакет и можно запускаться, а сами бинарники дистрибутива наверное собраны под i386, так что в этом случае им не страшен любой даунгрейд. Но вот как быть если это не так или надо перехать на 64битный процессор? Этого я пока что не знаю.

Ну и в завершении темы, скажите а на win можно так вот легко переехать?

— опять эта черта —

В прошлое воскресенье ничего не писал, а дело в моем жестком диске. Чего то он у меня начал капризничать и вообще не давал работать за компьютером, 100% загрузка ЦП и все тут. «Сыпаться начал» говорят, но у меня раньше не было проблем такого рода, так что не знаю точно ли он решил «обсыпаться» или проблема другого рода. Много чего перепробовал, даже домашний раздел (т.к. дисковая активность больше всего приходится на него) на JFS перевел, но это мало помогало. Решил уже его отформатировать полностью и хорошенько (низкоуровневое форматирование). Но прежде проверить все хорошенько, поглядел smart:

# smartctl --all /dev/hda

но он ничего толкового не показал. Кстати тут: http://mydebianblog.blogspot.com/ есть интересная статья о причинах помирания жестких дисков.

Потом был mhdd. Там даже картинка показывалась всех секторов. Но он тоже ничего не выявил, даже интересно, что после проверки mhdd диск стал работать нормально. Ну еще в перерывах между тестами я смазал вентилятор процессора, поэтому уже нельзя точно сказать что помогло: другая ФС, улучшенная вентиляция или может прилетал злой дух? Сейчас по данным smart’a температура жесткого диска 44 по целсию, буду следить дальше, чтобы не повышалась.

Вобщем я потихоньку откладываю денежку на новый винт и готовлюсь к полному переформатированию (так на всякий случай) и настройки системы заново.

Напомните мне рассказать про некоторые прелести grub’a.