Interested Article - Kernel panic

Linux 2.6 не может смонтировать корневую файловую систему.

Kernel panic англ. «тревога, сбой в ядре», дословно паника ядра ) — сообщение о критической ошибке ядра операционной системы , после которой операционная система не может продолжать дальнейшую работу .

Обычно этот термин применяется в среде операционных систем типа UNIX . Её имя связано с текстом ошибки вида « Kernel panic: … » и именем функции ядра panic() из оригинальной ОС UNIX .

Kernel panic возможен на Android , который базируется на ядре Linux , и в самих Linux-системах. Поскольку Mac OS X и iOS базируются на Darwin , являющейся подсемейством UNIX-систем, они также подвержены kernel panic. .

История

Кен Томпсон и Деннис Ритчи , создатели UNIX и концепции kernel panic.

История Kernel panic тесно связана с историей операционной системы UNIX , которая была разработана в конце 1960-х годов сотрудниками Bell Labs , — в первую очередь Кеном Томпсоном , Деннисом Ритчи и Дугласом Макилроем .

Сообщение Kernel panic было введено в ранних версиях UNIX и представляло собой важное отличие в философии этой операционной системы от Multics — главного конкурента на то время и предшественника UNIX. Multics был разработан для работы на 36-битном мейнфрейме , в то время как UNIX разрабатывался для гораздо менее мощного 18-битного мини-компьютера PDP-7 и по этой причине UNIX было доступно меньше ресурсов, что привело к необходимости их экономии, в том числе и при обработке ошибок. Разработчик Multics Том ван Влек так описывает это изменение в дискуссии с разработчиком UNIX Деннисом Ритчи :

Я сказал Деннису, что примерно половина кода, который я написал для Multics, была кодом обработки ошибок. Он ответил: «Мы всё это отбросили. Если произошла ошибка, у нас есть процедура под названием panic , и если она вызвана, компьютер зависает и вы кричите: „Эй, перезапустите его!“».

Изначальная функция panic() принципиально не менялась от UNIX V5 до базирующихся на VAX систем 32V и выводила только сообщение об ошибке без дополнительной информации, после чего система переводилась в бесконечный пустой цикл . Позже — в процессе развития UNIX — функция panic() была доработана и стала выводить на терминал разнообразную информацию, необходимую для отладки.

Подобный принцип обработки критических ошибок был перенят большинством более поздних операционных систем, например Mac OS или Microsoft Windows .

Причины Kernel panic

Сообщение об аппаратной ошибке и Kernel panic.

Одной из самых распространённых причин kernel panic является невозможность найти и смонтировать корневую файловую систему. Часто это ошибка конфигурации, которая может быть исправлена при перезагрузке ядра вручную .

В Linux возникновению паники ядра зачастую предшествует состояние под названием « oops ». В ряде случаев «oops» может приводить к такому же неработоспособному состоянию системы, как и паника ядра .

В большинстве остальных случаев причиной Kernel panic является критическая аппаратная ошибка (отказ оперативной памяти , ошибка процессора , материнской платы , видеокарты или иного критически важного устройства) или ошибка в самом ядре ОС (например, попытка обращения к неверному или запрещённому адресу в памяти). Также причиной для Kernel panic могут быть ошибки в драйверах аппаратных (в частности периферийных) устройств или ошибки в файловой системе . Во время финальной стадии инициализации пространства пользователя kernel panic обычно возникает тогда, когда не удаётся запустить init , так как, несмотря на запущенное и работоспособное ядро, сама система все ещё остаётся в нерабочем состоянии .

Kernel panic может быть вызван и прикладной программой, если та некорректно работает с ядром. Так в 2012 году ошибка в Google Chrome вызывала Kernel panic в Mac OS X .

Исходный код функции panic()

Исходный код функции panic() в UNIX V6 :

 char    *panicstr;
 /*
  * Panic is called on unresolvable
  * fatal errors.
  * It syncs, prints "panic: mesg" and
  * then loops.
 */
 panic(s)
 char *s;
 {
 	panicstr = s;
 	update();
 	printf("panic:%s\n", s);
 	for(;;)
 		idle();
 }

Обработка Kernel panic

В нормальном случае при возникновении Kernel panic происходит аварийная остановка (авост) работы операционной системы с выдачей сообщений об ошибках на экран, после чего система ожидает выключения или перезагрузки компьютера . Однако такой механизм обработки этого события неприемлем тогда, когда простой компьютера крайне нежелателен или человека нет рядом (например, на удалённых серверах или в нерабочее время) .

В современных ОС (в частности в GNU/Linux , FreeBSD или Solaris ) существует возможность изменить стандартное поведение функции panic() и производить перезагрузку компьютера автоматически. В GNU/Linux данная настройка осуществляется при помощи procfs :

echo 5 > /proc/sys/kernel/panic

Чтобы изменения действовали в GNU/Linux и после перезагрузки, необходимо добавить в файл /etc/sysctl.d/99-sysctl.conf строку:

kernel.panic=5

Значение параметра kernel.panic — количество секунд, после которых произойдёт перезагрузка. При установке отрицательного или равного 0 значения этого параметра автоматической перезагрузка не произойдёт .

Также в BSD -системах есть специальная опция в ядре. Цитата из файла /usr/src/sys/conf/NOTES :

# Set the amount of time (in seconds) the system will wait before
# rebooting automatically when a kernel panic occurs. If set to (-1),
# the system will wait indefinitely until a key is pressed on the
# console.
options PANIC_REBOOT_WAIT_TIME=16

В Solaris автоматическая перезагрузка после Kernel panic является стандартным поведением системы .

Перезагрузка после Kernel panic имеет и очень серьёзный недостаток, особенно если это изменение не пропадает после первой перезагрузки . В случае, если перезагрузка не устраняет ошибку, вызывавшую Kernel panic, система будет останавливаться и перезапускаться вновь и вновь, что может привести к аппаратным ошибкам или потерям данных . В случае если такая ситуация возникла после сборки нового ядра, решением проблемы может стать загрузка сохранённой копии старого работающего ядра. Как правило, для этого достаточно вручную указать при загрузке путь к работоспособной копии ядра .

Для изучения причины паники ядра Linux может пригодиться файл System.map .

Kernel panic в различных операционных системах

Kernel panic в Mac OS X версии 10.6 и ниже.

Изначально сообщение о Kernel panic ограничивалось коротким текстом о необходимости перезагрузки системы. В современных системах обычно выдается больше дополнительной информации.

  • GNU/Linux и большинство других UNIX -совместимых операционных систем создают лог с описанием ошибки и выводят на экран сообщение об ошибке, содержащее информацию, необходимую для отладки и поиска причин этой ошибки. Этот механизм носит название Linux oops . В современных дистрибутивах Linux используется графический сервер X Window , и Kernel panic не приводит к переключению на физическую консоль, на которую выводятся диагностические сообщения. Распознать Kernel panic можно по мигающим светодиодам Caps Lock и Scroll Lock на клавиатуре .
  • В изначальных версиях Mac OS X (от 10.0 до 10.0.1.5) по аналогии с операционными системами, базирующимися на ядре Linux, на экран выводилась информация о произошедшей ошибке, после чего система останавливалась. Начиная с версии Mac OS X 10.2 это сообщение было упрощено и указывает лишь на необходимость перезапустить компьютер на четырёх языках (английском, немецком, французском и японском) вне зависимости от языковой версии операционной системы . Однако OS X позволяет заменить изображение на любое другое, что дает возможность разработчикам показывать изменённые сообщения об ошибках в различных ситуациях . Благодаря этой возможности на OS X возможно даже симулировать синий экран смерти операционной системы Windows , заменив стандартное изображение скриншотом соответствующего изображения Windows .

В не-UNIX операционных системах

В то время как термин Kernel panic употребляется в основном для UNIX -совместимых операционных систем, в других операционных системах обработка критических ошибок методом остановки системы тоже прижилась и получила следующие названия:

  • В большинстве версий Microsoft Windows система останавливается с выдачей голубого экрана с кратким описанием ошибки , который получил название синий экран смерти . В операционной системе Windows XP при возникновении ошибки компьютер перезагружается автоматически. Это поведение системы управляется через панель управления Windows . Если ошибка происходит при загрузке ОС, изменить поведение системы можно через меню кнопки F8 .
  • В старых компьютерах Macintosh : Sad Mac (аппаратная ошибка при запуске системы) , (для ошибок программ или операционной системы) .
  • На компьютерах Amiga в AmigaOS до 2.04 этот механизм назывался Guru Meditation и работал аналогично Kernel panic в Unix . В последующих версиях текст «Guru meditation» был удалён из сообщения об ошибке .

См. также

Примечания

  1. , p. 51.
  2. . BSD manpage on The UNIX and Linux Forums (11 августа 1995). Дата обращения: 24 июля 2012. 6 августа 2012 года.
  3. . macmaps.com. Дата обращения: 24 июля 2012. 6 августа 2012 года.
  4. . www.multicians.org (03/21/93). Дата обращения: 24 июля 2012. 6 августа 2012 года.
  5. . Microsoft Corp.. Дата обращения: 24 июля 2012. 6 августа 2012 года.
  6. , p. 170.
  7. . Apple Inc.. Дата обращения: 24 июля 2012. 6 августа 2012 года.
  8. Wolfgang Mauerer. (неопр.) . — John Wiley and Sons , 2008. — С. 1238—1239. — ISBN 978-0-470-34343-2 . от 15 декабря 2016 на Wayback Machine
  9. . Betanews (7 января 2012). Дата обращения: 24 июля 2012. 6 августа 2012 года.
  10. . Unix-tree. Дата обращения: 24 июля 2012. 6 августа 2012 года.
  11. , p. 178.
  12. . OpenBSD. Дата обращения: 24 июля 2012. 6 августа 2012 года.
  13. , p. 9.3.4.2.
  14. , p. 172.
  15. , p. 21.
  16. , p. 52.
  17. . Amit Singh. Дата обращения: 30 июля 2012. 6 августа 2012 года.
  18. , p. 133.
  19. , p. 83.
  20. , p. 230.

Литература

  • Karl Kopper. The Linux Enterprise Cluster: Build a Highly Available Cluster. — No Starch Press, 2005. — С. 430. — ISBN 1593270364 .
  • Michael Urban, Brian Tiemann. Sams Teach Yourself FreeBSD in 24 Hours. — Sams Publishing, 2002. — С. 456. — ISBN 0672324245 .
  • James Kirkland, Christopher L. Tinker. Linux Troubleshooting for System Administrators And Power Users. — Prentice Hall Professional, 2006. — С. 571. — ISBN 0-13-185515-8 .
  • Karim Yaghmour, Jon Masters, Gilad Ben-Yossef, Philippe Gerum. Building Embedded Linux Systems. — O'Reilly Media, 2008. — С. 439. — ISBN 0596529686 .
  • Solaris System Engineers. Solaris 10 System Administration Essentials. — Pearson Education, 2009. — С. 456. — ISBN 013700009X .
  • Michael Schwarz. Multitool Linux: Practical Uses for Open Source Software. — Addison-Wesley Professional, 2002. — С. 532. — ISBN 0201734206 .
  • Ted Landau. . — Peachpit Press, 2000. — С. . — ISBN 020169963X .
  • Eric S. Raymond. The New Hacker's Dictionary. — MIT Press, 1996. — С. 547. — ISBN 0262680920 .

Ссылки

Источник —

Same as Kernel panic