Иногда процесс обновления, переконфигурирования, пересборки ядра может привести к печальным последствиям даже на локальной машине, но тут мы хотя-бы имеем физический доступ к консоли сервера и можем принять соответствующие меры по оживлению системы, в случае-же удаленного администрирования, все немного сложней. Поэтому постараюсь вкратце описать некоторые меры предосторожности при сборке нового ядра во FreeBSD, удаленно.
При
удаленном администрировании ядра FreeBSD, нужно обязательно(!) иметь под рукой KVM доступ к серверу, мало-ли чего. Благо сейчас у каждого хостера это есть, правда за отдельную плату как правило).
Итак, если по каким-то причинам новое ядро не завелось, сервер не загрузился и нужно загрузить старую версию ядра, делаем следующее:
Подключаемся через
KVM, перезагружаем сервер, на загрузочном экране консоли, выбираем 6-й пункт,
Command prompt, появится приглашение командной строки.
Вводим:
OK unload # Выгружаем все
OK boot kernel.old # Грузимся со старым ядром
Для просмотра всех возможных команд загрузчика, используйте команду
help.
Так-же при сборке ядра может произойти следующая ситуация:
Мы собираем новое ядро, но машина с ним не завелась. Загружаемся со старым ядром, правим конфиг ядра, пересобираем и снова устанавливаем, перезагружаемся, а машина и это новое ядро грузить не хочет. Но загрузиться со старого, заведомо рабочего ядра мы уже не можем, поскольку при последней сборке, ядро
kerrnel.old было перезаписано предыдущим, не работающим ядром. В итоге имеем мертвую FreeBSD, с 2 ядрами и невозможностью загрузиться.
Что-бы избежать такой неприятной ситуации, можно подстраховаться, что я всегда и делаю, когда удаленно администрирую реальную машину.
Самое первое что нужно, до начала каких-либо манипуляций с ядром системы, скопировать заведомо рабочую версию ядра ( в идеале GENERIC ) в отдельную папку, например:
freebsd /# cp -Rp /boot/kernel /boot/kernel.good
Теперь, что-бы у нас там не произошло при сборке ядра, у нас всегда есть возможность загрузить
kernel.good через системный загрузчик, как было описано выше.
Кроме того, опять-же для подстраховки, можно использовать следующую схему:
Устанавливаем ядро в отдельную папку, это можно задать переменной
DESTDIR= при установке ядра:
freebsd /# make -s installkernel KERNCONF=GARROTTE-TEST DESTDIR=/boot/testkernels
в результате ядро будет установлено в папку
/boot/testkernels/boot/kernel, далее воспользуемся командой
nextboot, которая одноразово задает ядро для следующей загрузки.
Обратите внимание на путь к ядру, он читается относительно директории
/boot.
freebsd /# nextboot -k testkernels/boot/kernel
Если
nextboot ни на что не ругнулась, все ок, при этом был создан файл
/boot/nextboot.conf. Можно перезагружаться.
После загрузки смотрим на каком мы ядре:
freebsd /# uname -i
GARROTTE-TEST
Теперь можно погонять систему, посмотреть все ли работает.
Если все в норме, копируем текущее ядро и ставим на его место, только что проверенное:
freebsd /# mv /boot/kernel /boot/kernel.bak
freebsd /# mv /boot/testkernels/boot/kernel /boot/kernel
freebsd /# reboot
После перезагрузки у нас рабочим будет новое ядро, на постоянной основе.