вторник, 14 сентября 2010 г.

Удалённое обновление ядра

Иногда может возникнуть ситуация, когда при обновлении ядра на сервере, стоящем в дата-центре и последующей перезагрузке, сервер не поднимается. Как избежать этого, как обеспечить его перезагрузку в старое ядро в случае сбоев с новым ядром?


Итак, ставим новое ядро.
apt-get install linux-image-xxx linux-headers-xxx
Проверяем, что в /boot/grub/menu.lst прописалось новое ядро. Обращаем внимание на то, что параметр Default теперь указывает на новое ядро. Меняем его значение так, чтобы он указывал на старое ядро, которое точно работает.

В параметрах нового ядра в строчке kernel=... в самом конце дописываем panic=5

Для всех автоматически монтируемых разделов диска запускаем такую команду:
tune2fs -c 30 -C 0 -i 0 /dev/device (где /dev/device - это раздел диска)
Это сброс счётчиком количества монтирования, чтобы при перезагрузке вдруг не начали проверяться разделы.

Запускаем grub и пишем команды:
#grub
#savedefault --default=0 --once (где 0 - порядковый номер нового ядра в конфиге).
#quit
Эта команда говорит grub-у, что при следующей перезагрузке грузить ядро с номером 0, а при всех последующих перезагрузках - то ядро, которое прописано дефолтным в конфиге (а мы уже прописали там старое ядро дефолтным)

В /etc/crontab дописываем строчку:
mm hh * * * root /sbin/reboot
(где mm - минуты, hh - часы. Текущее время +10-15 минут)
Всё, можно перезагружаться. Если всё хорошо, то загрузится новое ядро. Тогда можно будет пойти в /etc/crontab, убрать строчку про reboot, потом пойти в конфиг grub-а и сделать дефолтным новое ядро. Если что-то не сложилось, то либо новое ядро перезагрузится по kernel panic-у в старое ядро, либо если перепутались имена сетевых интерфейсов, то через 15 минут комп перезагрузится по кронтабу и вернётся в старое ядро.


Источник

Комментариев нет:

Отправить комментарий