Я планирую скомпилировать собственное ядро, что я делал много раз раньше, но, как всегда, все еще есть вероятность, что это может пойти не так, и машина не сможет перезагрузиться.
Эта машина находится в удаленном центре обработки данных, к которому у меня нет физического доступа, и поэтому мне было бы очень дорого, если бы кто-то физически подошел к серверу, чтобы исправить это, если машина не загрузится правильно.
Есть ли способ настроить 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 and
savedefault 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, и если произойдет какой-либо сбой (ядро не найдено или паника ядра), будет использоваться первый, а затем второй резервный вариант (как указано в директиве возврата)
Обратите внимание, что в руководстве указано отсутствующее ядро или паника ядра, в нем ничего не говорится о неработающей сетевой карте. Что в вашем случае может быть так же плохо, как паника ядра