Вопрос или проблема
Я случайно удалил свой .config
для конфигурации ядра в Linux и помню, что был способ извлечь конфигурацию ядра через файловую систему proc.
Это все еще возможно, и если да, то как это сделать?
В зависимости от вашей системы, вы можете найти это в любом из следующих мест:
/proc/config.gz
/boot/config
/boot/config-$(uname -r)
и, возможно, в других местах.
Для запущенного ядра один из способов получить файл конфигурации — это
cat /proc/config.gz | gunzip > running.config
или,
zcat /proc/config.gz > running.config
Тогда running.config
будет содержать конфигурацию работающего ядра linux.
Однако это возможно только если ваше работающее ядро linux было настроено на наличие /proc/config.gz
. Конфигурация для этого находится в
Общие настройки
[*] Поддержка .config ядра
[*] Включить доступ к .config через /proc/config.gz
В большинстве дистрибутивов эта настройка не установлена. Они предоставляют файлы конфигурации ядра в своих пакетах ядра, и обычно они находятся в директории /boot/
.
Хотя это немного поздно, но может быть, это поможет кому-то. У меня не было /proc/config.gz
, ни /boot/config
, ни /boot/config-$(uname -r)
на компьютере. Мне пришлось запустить modprobe configs
от имени root. Затем /proc/config.gz
появился.
Независимо от дистрибутива, вы можете запустить: cat /lib/modules/$(uname -r)/build/.config
Источник: proc(5) страница man (поиск по /proc/config.gz
).
Если вы не смогли найти конфигурацию ядра в /boot/ и в /proc/config.gz, вы можете попробовать извлечь эту информацию из самого ядра.
Внутри любого исходного кода ядра есть скрипт для извлечения конфигурации, расположенный в scripts/extract-ikconfig
, передайте ядро, конфигурацию которого вы хотите получить, в качестве параметра этому скрипту.
Это решение будет работать только если Поддержка .config ядра
была включена в скомпилированном ядре.
Если вы не можете найти ни один из предложенных файлов и можете использовать modprobe
, вы почти всегда сможете получить копию текущей конфигурации таким образом.
modprobe configs # возможно, нужно будет использовать `sudo modprobe configs`
# Это создаст /proc/config.gz
zcat /proc/config.gz
# Или если вы ищете, была ли установлена конкретная опция
zgrep USBIP /proc/config.gz
Запустите modprobe configs
от имени root, чтобы создать /proc/config.gz
После этого zcat /proc/config.gz > /boot/config-$(uname -r)
, чтобы отобразить конфигурацию ядра.
Для дистрибутивов на базе RedHat файл .config стандартного ядра можно найти с помощью команды cat /lib/modules/$(uname -r)/build/.config
, которая доступна после установки пакета kernel-devel с помощью следующей команды:
yum -y install kernel-devel
Обратите внимание, что с настоящим дистрибутивом Red Hat Enterprise Linux вам нужно будет включить репозиторий источников, чтобы получить этот пакет. На RHEL8 используйте следующую команду для этого:
subscription-manager repos --enable=rhel-8-for-x86_64-baseos-source-rpms
"/proc/config.gz",
"/boot/config-" + k.kernelRelease,
"/usr/src/linux-" + k.kernelRelease + "/.config",
"/usr/src/linux/.config",
"/usr/lib/modules/" + k.kernelRelease + "/config",
"/usr/lib/ostree-boot/config-" + k.kernelRelease,
"/usr/lib/kernel/config-" + k.kernelRelease,
"/usr/src/linux-headers-" + k.kernelRelease + "/.config",
"/lib/modules/" + k.kernelRelease + "/build/.config",
Ответ или решение
Чтобы восстановить конфигурацию ядра на работающей системе Linux после удаление файла .config
, существует несколько подходов. Ниже описаны наиболее распространенные методы, которые помогут вам получить файл конфигурации.
1. Проверьте /proc/config.gz
На большинстве современных дистрибутивов Linux можно получить текущую конфигурацию ядра через файл /proc/config.gz
. Однако, чтобы этот файл был доступен, опция конфигурации CONFIG_IKCONFIG
должна быть активна при компиляции ядра. Для доступа к этому файлу выполните следующие команды:
# Если вы не видите файл /proc/config.gz, попробуйте:
modprobe configs
# Теперь вы сможете извлечь конфигурацию
zcat /proc/config.gz > running.config
Как альтернатива, можно использовать:
cat /proc/config.gz | gunzip > running.config
2. Проверьте директорию /boot
Дистрибутивы обычно сохраняют файлы конфигурации ядра в каталоге /boot
. Вы можете найти конфигурацию текущего ядра с помощью следующей команды:
cat /boot/config-$(uname -r)
Если там нет конфигурации, возможно, следует установить пакет с исходниками ядра (kernel-devel
).
3. Извлечение из загруженных модулей
В зависимости от вашей системы, возможно, вам удастся найти файл конфигурации в узле /lib/modules
:
cat /lib/modules/$(uname -r)/build/.config
Этот файл доступен только если установлен пакет kernel-devel
.
4. Получение конфигурации через исходный код ядра
Если у вас есть доступ к исходному коду ядра, вы можете извлечь конфигурацию, используя скрипт из директории scripts
. Для этого выполните следующие действия:
- Загрузите исходный код подходящего для вас ядра.
- Найдите и выполните скрипт
extract-ikconfig
, который извлечет конфигурацию, если она была включена в ядро при его сборке.
cd /путь/к/исходному/коду/ядра
scripts/extract-ikconfig < путь_к_вашему_диску
5. Полезная информация о RedHat и CentOS
Для пользователей дистрибутивов на базе RedHat, таких как CentOS, вы можете выполнить следующую команду, чтобы получить доступ к файлу конфигурации:
yum -y install kernel-devel
cat /lib/modules/$(uname -r)/build/.config
Если у вас не включены источники для пакетов, вам нужно будет активировать их с помощью следующих команд:
subscription-manager repos --enable rhel-8-for-x86_64-baseos-source-rpms
Заключение
Если ни один из перечисленных методов не сработал, вероятно, конфигурация ядра не была включена на этапе компиляции. В этом случае единственный выход — повторно скомпилировать ядро с необходимыми параметрами конфигурации.
Эти шаги помогут вам восстановить файл конфигурации ядра или извлечь из него нужные настройки, что значительно упростит администрирование вашей системы Linux.