Служба аварийного дампа ядра Debian Linux настраивает вашу машину на сброс всего, что находится в RAM (памяти) на диск, когда выполнение ядра Linux остановлено или аварийно завершено. Например, такие события, как паника ядра, NMI, MCE, аппаратный сбой могут вызвать такие проблемы. Как системный администратор или разработчик, вы должны отследить проблему. Чтобы предотвратить повторение подобных проблем, вы можете проверить содержимое скопированной памяти с диска. На этой странице объясняется, как установить, включить и настроить аварийный дамп ядра Linux в Debian Linux версии 10/11.
Пакеты, необходимые для включения аварийного дампа ядра Debian Linux
- crash : Утилита отладки ядра Linux
- kdump-tools : Скрипты и инструменты Debian для автоматизации kdump (аварийных дампов Linux)
- kexec-tools : Инструменты для поддержки быстрых перезагрузок kexec
- linux-image-$(uname -r)-dbg : Символы отладки для текущего запущенного образа ядра Linux. Например, linux-image-5.10.0-11-amd64.
- makedumpfile : Программа, которая может извлечь подмножество памяти, доступной либо через /dev/mem, либо через /proc/vmcore для crashdumps. Можно получить образы памяти без лишней ненужной информации, такой как нулевые страницы, программы пользовательского пространства и многое другое.
Включение аварийного дампа ядра в Debian
Процедура установки и включения аварийного дампа ядра в Debian Linux 10/11 выглядит следующим образом:
Откройте приложение терминала.
Для удалённого сервера используйте команду ssh. Например:
1 | ssh [user]@[имя ip-адреса вашего сервера-debian] |
Введите команду apt command/apt-get для установки пакетов аварийного дампа ядра:
1 | sudo apt install kdump-tools crash kexec-tools makedumpfile linux-image-$(uname -r)-dbg |
После этого появится следующее диалоговое окно:
Если вы выберете эту опцию, перезагрузка системы будет вызывать перезагрузку ядра, загруженного kexec, вместо того, чтобы проходить через полный процесс загрузчика системы.
Убедитесь, что вы выбрали Да, чтобы подключить kexec-tools для всех перезагрузок. После этого на экране появится еще одно приглашение:
Если вы выберете эту опцию, механизм kdump-tools будет включен. Для включения параметра ядра crashkernel все равно потребуется перезагрузка
Здесь также необходимо выбрать Yes, чтобы включить kdump-tools.
Если по ошибке вы выбрали No, то вы можете включить опцию Yes, просто выполнив следующие две команды от имени пользователя root:
1 2 | sudo dpkg-reconfigure kexec-tools sudo dpkg-reconfigure kdump-tools |
Проверить, что следующие параметры установлены в true и включены, можно с помощью команды grep:
1 2 | grep USE_KDUMP /etc/default/kdump-tools grep LOAD_KEXEC /etc/default/kexec |
Проверка настроек
Давайте посмотрим текущее состояние kdump, введите:
1 | sudo kdump-config show |
Приведенный выше результат указывает на то, что аварийный дамп Linux не включен. Чтобы включить его, перезагрузите Linux-машину, запустите:
1 | sudo reboot |
После перезагрузки выполните следующую команду, и теперь вы должны увидеть подтверждение:
1 | sudo kdump-config show |
Этот результат с картинки выше говорит о том, что вы найдёте дампы ядра в каталоге /var/crash, и система готова к kdump.
Как проверить, что аварийное ядро настроено?
Выполните команду cat:
1 | cat /proc/cmdline |
И затем найдите параметр crashkernel:
1 | BOOT_IMAGE=/boot/vmlinuz-5.10.0-21-amd64 root=UUID=de7d88a9-6370-4c98-9a03-ccfd5fe8f87d ro quiet crashkernel=384M-:128M |
Значение crashkernel=384M-:128M означает:
- Если RAM меньше 384M, то ничего не резервируйте.
- Если размер оперативной памяти находится между 386M и 2G (эксклюзив), то зарезервируйте 64M памяти.
- Если объем оперативной памяти больше 2G, зарезервируйте 128M ram для дампов.
Вы также можете использовать команду dmesg вместе с командой grep для просмотра запрашиваемой области памяти для ядра kdump:
1 | sudo dmesg | grep -i crash |
Как протестировать механизм аварийного дампа Debian Linux
Выполнение этих примеров приведёт к краху вашего компьютера Debian Linux. Тестирование механизма аварийного сброса ВСЕГДА приводит к перезагрузке системы Debian и может привести к потере данных в некоторых ситуациях, если система находится под большой нагрузкой. Поэтому убедитесь, что система простаивает. nixCraft или автор не несут ответственности за потерю данных.
Убедитесь, что kernel.sysrq установлен в 1. Вот как проверить и установить его:
1 | sudo sysctl kernel.sysrq |
Если значение не равно 1, то:
1 | sudo sysctl -w kernel.sysrq=1 |
Отредактируйте файл /etc/sysctl.d/1000-custom.conf и добавьте следующую конфигурацию:
1 2 3 | kernel.sysrq=1 # включить автоматическую перезагрузку при панике ядра тоже # kernel.panic=10 |
Выполните любую из следующих команд с помощью команды echo:
1 2 | sudo -s echo c > /proc/sysrq-trigger |
ИЛИ
1 | sudo sync; echo c | sudo tee /proc/sysrq-trigger |
Просмотр аварийных дампов
Используйте команду cd и войдите в папку /var/carsh, а затем перечислите файлы с помощью команды ls:
1 2 3 | sudo -i cd /var/crash/ ls -l |
Вот файлы дампов аварий внутри каталога 202303180744/:
Вы можете прочитать файл дампа, такой как dump.202303180744, с помощью команды crash, используя отладочное ядро из /usr/lib/debug/vmlinux* следующим образом:
1 | crash /usr/lib/debug/vmlinux-$(uname -r) dump.202303180744 |
Команда uname используется для получения текущей версии ядра:
Просмотр аварийного дампа в Linux с помощью команды crash
Хотите прочитать и файл dmesg.202303180744? Попробуйте воспользоваться командой more, командой less, командой cat или текстовым редактором по вашему выбору, включая команду egrep/grep:
1 2 3 | cat dmesg.202303180744 grep something dmesg.202303180744 egrep -i 'code1|error|warning|failed|hardware|crash' dmesg.202303180744 |
Заключение
В этом руководстве объясняется, как установить и включить дамп ядра Linux в Debian Linux версий 10 и 11. Однако обсуждение команды crash выходит за рамки данного руководства. Вам потребуется некоторый опыт работы сисадмином. Однако, если вам нужен учебник и примеры команды crash, дайте мне знать в комментариях ниже. Я настоятельно рекомендую прочитать следующие страницы руководства с помощью команды man или help
1 2 3 4 5 6 | man 8 crash man 8 makedumpfile man 1 gdb man 8 kexec man 8 kdump-config man 5 kdump-tools |