Меню Закрыть

Kernel panic что делать

Содержание

Состояние отпатрулирована

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

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

Kernel panic возможен на Andro >[3] .

Содержание

История [ править | править код ]

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

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

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

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

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

Причины Kernel panic [ править | править код ]

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

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

В большинстве остальных случаев причиной Kernel panic является критическая аппаратная ошибка (отказ оперативной памяти, ошибка процессора, материнской платы, графической карты или другого критически важного устройства) или ошибка в самом ядре операционной системы, например, попытка обращения к ошибочному или запрещённому адресу в памяти. Также причиной для Kernel panic могут быть ошибки в драйверах периферийных устройств или ошибки в файловой системе [3] [7] . Во время финальной стадии инициализации пространства пользователя, kernel panic обычно возникает тогда, когда не удалось запустить init, так как, несмотря на запущенное и работоспособное ядро, сама система остаётся непригодной к дальнейшей работе [8] . Kernel panic может быть вызван и прикладными программами, если те некорректно работают с ядром. Так, ошибка в Google Chrome вызывала Kernel panic на Mac OS X [9] .

Исходный код функции panic() [ править | править код ]

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

Обработка Kernel panic [ править | править код ]

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

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

Читайте также:  Best tools bt333 электролобзик дрель болгарка

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

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

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

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

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

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

Kernel panic в различных операционных системах [ править | править код ]

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

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

В не-UNIX операционных системах [ править | править код ]

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

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

При работе с Linux иногда возникает ошибка ядра Kernel Panic. Это может произойти при использовании экспериментальных модулей ядра, при написании своего модуля или из-за сбоя оборудования.Автоматическую перезагрузку после Kernel Panic можно настроить тремя способами, хотя суть у них одна — установка параметра ядра panic.

Первый способ состоит в том чтобы добавить параметр ядра panic=num_seconds в конфигурационном файле загрузчика Grub. Num_seconds — количество секунд до автоматической перезагрузки.

sudo nano /boot/grub/grub.cfg

linux /vmlinuz-3.18.7-gentoo root=/dev/sda3 ro panic=10

Читайте также:  System tweaker pro 4pda

Можно также добавить этот параметр в шаблон конфигурации, как это сделать читайте в статье Устанавливаем параметры ядра в grub

Второй способ — указать параметр kernel.panic в файле sysctl.conf:

sudo nano /etc/sysctl.conf

sudo sysctl -p /etc/sysctl.conf

И наконец можно использовать подсистему /proc для изменения параметра panic:

sudo echo 10 > /proc/sys/kernel/panic

Обратите внимание, что в отличие от первых двух методов, этот метод действует только до перезагрузки, так как любые изменения в подсистеме /proc при перезагрузке стираются.

Состояние отпатрулирована

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

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

Kernel panic возможен на Andro >[3] .

Содержание

История [ править | править код ]

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

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

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

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

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

Причины Kernel panic [ править | править код ]

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

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

В большинстве остальных случаев причиной Kernel panic является критическая аппаратная ошибка (отказ оперативной памяти, ошибка процессора, материнской платы, графической карты или другого критически важного устройства) или ошибка в самом ядре операционной системы, например, попытка обращения к ошибочному или запрещённому адресу в памяти. Также причиной для Kernel panic могут быть ошибки в драйверах периферийных устройств или ошибки в файловой системе [3] [7] . Во время финальной стадии инициализации пространства пользователя, kernel panic обычно возникает тогда, когда не удалось запустить init, так как, несмотря на запущенное и работоспособное ядро, сама система остаётся непригодной к дальнейшей работе [8] . Kernel panic может быть вызван и прикладными программами, если те некорректно работают с ядром. Так, ошибка в Google Chrome вызывала Kernel panic на Mac OS X [9] .

Исходный код функции panic() [ править | править код ]

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

Обработка Kernel panic [ править | править код ]

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

Читайте также:  Как настроить ottplayer на смарт тв самсунг

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

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

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

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

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

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

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

Kernel panic в различных операционных системах [ править | править код ]

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

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

В не-UNIX операционных системах [ править | править код ]

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

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

Рекомендуем к прочтению

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

Ваш адрес email не будет опубликован.