Назад | Перейти на главную страницу

Обновление ядра - Grub по умолчанию

Я планирую скомпилировать собственное ядро, что я делал много раз раньше, но, как всегда, все еще есть вероятность, что это может пойти не так, и машина не сможет перезагрузиться.

Эта машина находится в удаленном центре обработки данных, к которому у меня нет физического доступа, и поэтому мне было бы очень дорого, если бы кто-то физически подошел к серверу, чтобы исправить это, если машина не загрузится правильно.

Есть ли способ настроить grub на использование нового ядра только для одной загрузки, но вернуться к старому ядру при дополнительной перезагрузке. Таким образом, я мог бы использовать свою консоль удаленного управления питанием для перезагрузки машины, если она не могла правильно загрузиться с новым ядром, тогда она вернулась бы к старому ядру.

Я знаю, что это возможно с lilo, используя lilo -r kernel команда, есть ли эквивалент grub?

Процитирую немного из Руководство GRUB что добавляет немного дополнительной проверки ответа Катриэль.

Вы можете научить GRUB загружать запись только при следующей загрузке. Предположим, у вас есть старое ядро ​​old_kernel и новое ядро ​​new_kernel. Вы знаете, что old_kernel может правильно загружать вашу систему, и вы хотите протестировать new_kernel.

Чтобы гарантировать, что ваша система вернется к старому ядру, даже если новое ядро ​​выйдет из строя (например, произойдет паника), вы можете указать, что GRUB должен попробовать новое ядро ​​только один раз и после этого загрузить старое ядро.

Сначала измените свой файл конфигурации. Вот пример:

 default saved        # This is important!!!
 timeout 10

 title the old kernel
 root (hd0,0)
 kernel /old_kernel
 savedefault

 title the new kernel
 root (hd0,0)
 kernel /new_kernel
 savedefault 0         # This is important!!!

Обратите внимание, что этот файл конфигурации использует default saved' (see default) at the head andsavedefault 0 '(см. savedefault) в записи для нового ядра. Это означает, что GRUB по умолчанию загружает сохраненную запись, а загрузка записи для нового ядра сохраняет «0» в качестве сохраненной записи.

В конце концов, с этим конфигурационным файлом GRUB всегда пытается загрузить старое ядро ​​после загрузки нового, потому что "0" - это запись старого ядра.

Следующим шагом будет указание GRUB загрузить новое ядро ​​при следующей загрузке. Для этого выполните grub-set-default (см. Вызов grub-set-default):

 # grub-set-default 1

Эта команда устанавливает для сохраненной записи значение «1», то есть для нового ядра.

Этот метод полезен, но все же не очень надежен, потому что GRUB прекращает загрузку, если есть какая-либо ошибка в загрузочной записи, так что новое ядро ​​имеет недопустимый формат исполняемого файла. Таким образом, даже лучше использовать резервный механизм GRUB. Посмотрите следующий подраздел об этой функции.

Вы можете попробовать использовать «запасную» директиву в /boot/grub/menu.lst. Вам нужно будет указать резервное ядро ​​или ядра и использовать директиву savedefault в разделах ядра для использования, например, в качестве резервных копий (взятых из руководство по grub):

default saved        # This is important!!!
timeout 10
fallback 1 2         # This is important!!!

title A
root (hd0,0)
kernel /kernel
savedefault fallback # This is important!!!

title B
root (hd1,0)
kernel /kernel
savedefault fallback # This is important!!!

title C
root (hd2,0)
kernel /kernel
savedefault

Это приведет к загрузке ядра A, и если произойдет какой-либо сбой (ядро не найдено или паника ядра), будет использоваться первый, а затем второй резервный вариант (как указано в директиве возврата)

Обратите внимание, что в руководстве указано отсутствующее ядро ​​или паника ядра, в нем ничего не говорится о неработающей сетевой карте. Что в вашем случае может быть так же плохо, как паника ядра