Загружаем тестовое ядро Linux единожды с помощью GRUB

1 455 посмотрели
Posted by Алексей Нещадим in IT | Tagged , , , , , , , , | Leave a comment

Частенько перед многими системными администраторами и владельцами выделенных серверов (dedicated servers) Linux возникает задача обновления ядра операционной системы. Проблема заключается лишь в том, что 100%-ой уверенности в нормальном рестарте системы с новым ядром дать не может никто. Хорошо когда консоль сервера под руками и мы можем просто перезагрузить сервер и в меню GRUB выбрать рабочее ядро. Еще очень хорошо, когда например у админа под руками есть такая чудная вещь как KVM over ip. Тогда никаких проблем с доступом к консоли тоже нет. Но что делать если Дата Центр далеко, физического доступа туда нет, сервер бюджетный и из доступных фишек есть только удаленный ребут (что тоже есть не у всех). Вот в этом нам и поможет наш загрузчик GRUB.

На данный момент практически у всех RPM based дистрибутивов Linux в качестве загрузчика операционных систем установлен GRUB. В любом случае разговор будет про него. Описания инсталляции и настройки GRUB достаточно много на русском языке. Вот например тут.

Итак после установки нового ядра файл /etc/grub.conf выглядит примерно следующим образом:

default=1
 timeout=5
 splashimage=(hd0,0)/grub/splash.xpm.gz
 hiddenmenu
 #вот это номер "0"
 title CentOS (2.6.8-022stab061.1)
 root (hd0,0)
 kernel /vmlinuz-2.6.8-022stab061.1 ro root=/dev/VolGroup00/LogVol00
 initrd /initrd-2.6.8-022stab061.1.img
 #вот это номер "1"
 title CentOS_ServerCD (2.6.9-42.ELsmp)
 root (hd0,0)
 kernel /vmlinuz-2.6.9-42.ELsmp ro root=/dev/VolGroup00/LogVol00
 initrd /initrd-2.6.9-42.ELsmp.img
 #вот это номер "2"
 title CentOS_ServerCD-up (2.6.9-42.EL)
 root (hd0,0)
 kernel /vmlinuz-2.6.9-42.EL ro root=/dev/VolGroup00/LogVol00
 initrd /initrd-2.6.9-42.EL.img

Мы видим, что перечислено три варианта загрузки. Причем нумерация начинается с цифры 0.

Таким образом default=1 означает загрузку по умолчанию варианта:

 title CentOS_ServerCD (2.6.9-42.ELsmp)
 root (hd0,0)
 kernel /vmlinuz-2.6.9-42.ELsmp ro root=/dev/VolGroup00/LogVol00
 initrd /initrd-2.6.9-42.ELsmp.img

Предположим что нам необходимо единожды загрузить сервер с вариантом загрузки 0. Заходим в консоль и набираем:

echo "savedefault --default=0 --once" | grub --batch

после чего перегружаем сервер командой:

reboot

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

uname -a

и видим версию нашего нового ядра. После чего, если нас все устраивает, изменяем файл /etc/grub.conf. Меняем в нем default=1 на default=0, после чего во время следующей перезагрузки загрузится новое ядро. Если же сервер остался недоступен, то его необходимо удаленно перезагрузить. Благо такая функция у нормальных продавцов бесплатна. После ребута сервера загрузится наше старое оригинальное ядро (которое в нашем случае имеет номер 1).

Таким образом можно максимально безболезненно удаленно заменить ядро и протестировать его нормальную загрузку.

Добавить комментарий