Вопрос или проблема
Я собирался установить драйвер NVIDIA NVIDIA-Linux-x86_64-565.77.run
, и он показал
Не удается найти дерево исходных кодов ядра для текущего работающего ядра. Пожалуйста, убедитесь, что вы установили файлы исходных кодов ядра для вашего ядра и что они правильно настроены; в системах Red Hat Linux, например, убедитесь, что у вас установлен RPM пакет ‘kernel-source’ или ‘kernel-devel’. Если вы знаете, что правильные файлы исходных кодов ядра установлены, вы можете указать путь к ним с помощью параметра командной строки ‘–kernel-source-path’.
точно так же, как это произошло в https://blog.csdn.net/chris_pei/article/details/79203033.
Следуя инструкции, я попробовал выполнить простую команду yum install kernel-devel
:
...
Installing : 1:perl-parent-0.225-244.el7.noarch 45/72
Installing : perl-HTTP-Tiny-0.033-3.el7.noarch 46/72
Installing : perl-podlators-2.5.1-3.el7.noarch 47/72
Installing : perl-Pod-Perldoc-3.20-4.el7.noarch 48/72
Installing : 1:perl-Pod-Escapes-1.04-293.el7.noarch 49/72
Installing : perl-Encode-2.51-7.el7.x86_64 50/72
Installing : perl-Text-ParseWords-3.29-4.el7.noarch 51/72
Installing : perl-Pod-Usage-1.63-3.el7.noarch 52/72
Installing : 4:perl-macros-5.16.3-293.el7.x86_64 53/72
Installing : perl-Storable-2.45-3.el7.x86_64 54/72
Installing : perl-Exporter-5.68-3.el7.noarch 55/72
Installing : perl-constant-1.27-2.el7.noarch 56/72
Installing : perl-Time-Local-1.2300-2.el7.noarch 57/72
Installing : perl-Socket-2.010-4.el7.x86_64 58/72
Installing : perl-Carp-1.26-244.el7.noarch 59/72
Installing : 4:perl-Time-HiRes-1.9725-3.el7.x86_64 60/72
Installing : perl-PathTools-3.40-5.el7.x86_64 61/72
Installing : perl-Scalar-List-Utils-1.27-248.el7.x86_64 62/72
Installing : 1:perl-Pod-Simple-3.28-4.el7.noarch 63/72
Installing : perl-File-Temp-0.23.01-3.el7.noarch 64/72
Installing : perl-File-Path-2.09-2.el7.noarch 65/72
Installing : perl-threads-shared-1.43-6.el7.x86_64 66/72
Installing : perl-threads-1.87-4.el7.x86_64 67/72
Installing : perl-Filter-1.49-3.el7.x86_64 68/72
Installing : 4:perl-libs-5.16.3-293.el7.x86_64 69/72
Installing : perl-Getopt-Long-2.40-3.el7.noarch 70/72
Installing : 4:perl-5.16.3-293.el7.x86_64 71/72
Installing : kernel-devel-3.10.0-957.el7.x86_64 72/72
Non-fatal POSTIN scriptlet failure in rpm package kernel-devel-3.10.0-957.el7.x86_64
Non-fatal POSTTRANS scriptlet failure in rpm package p11-kit-trust-0.23.5-3.el7.x86_64
Non-fatal POSTTRANS scriptlet failure in rpm package centos-release-7-6.1810.2.el7.centos.x86_64
Installed:
kernel-devel.x86_64 0:3.10.0-957.el7
Dependency Installed:
basesystem.noarch 0:10.0-7.el7.centos bash.x86_64 0:4.2.46-31.el7 centos-release.x86_64 0:7-6.1810.2.el7.centos findutils.x86_64 1:4.5.11-6.el7
gawk.x86_64 0:4.0.2-4.el7_3.1 gdbm.x86_64 0:1.10-8.el7 glibc.x86_64 0:2.17-260.el7 glibc-common.x86_64 0:2.17-260.el7
gmp.x86_64 1:6.0.0-15.el7 grep.x86_64 0:2.20-3.el7 groff-base.x86_64 0:1.22.2-8.el7 info.x86_64 0:5.1-5.el7
keyutils-libs.x86_64 0:1.5.8-3.el7 krb5-libs.x86_64 0:1.15.1-34.el7 libacl.x86_64 0:2.2.51-14.el7 libattr.x86_64 0:2.4.46-13.el7
libcap.x86_64 0:2.22-9.el7 libcom_err.x86_64 0:1.42.9-13.el7 libffi.x86_64 0:3.0.13-18.el7 libgcc.x86_64 0:4.8.5-36.el7
libselinux.x86_64 0:2.5-14.1.el7 libsepol.x86_64 0:2.5-10.el7 libstdc++.x86_64 0:4.8.5-36.el7 libtasn1.x86_64 0:4.10-1.el7
libverto.x86_64 0:0.2.5-4.el7 ncurses.x86_64 0:5.9-14.20130511.el7_4 ncurses-base.noarch 0:5.9-14.20130511.el7_4 ncurses-libs.x86_64 0:5.9-14.20130511.el7_4
nspr.x86_64 0:4.19.0-1.el7_5 nss-softokn-freebl.x86_64 0:3.36.0-5.el7_5 nss-util.x86_64 0:3.36.0-1.el7_5 p11-kit.x86_64 0:0.23.5-3.el7
p11-kit-trust.x86_64 0:0.23.5-3.el7 pcre.x86_64 0:8.32-17.el7 perl.x86_64 4:5.16.3-293.el7 perl-Carp.noarch 0:1.26-244.el7
perl-Encode.x86_64 0:2.51-7.el7 perl-Exporter.noarch 0:5.68-3.el7 perl-File-Path.noarch 0:2.09-2.el7 perl-File-Temp.noarch 0:0.23.01-3.el7
perl-Filter.x86_64 0:1.49-3.el7 perl-Getopt-Long.noarch 0:2.40-3.el7 perl-HTTP-Tiny.noarch 0:0.033-3.el7 perl-PathTools.x86_64 0:3.40-5.el7
perl-Pod-Escapes.noarch 1:1.04-293.el7 perl-Pod-Perldoc.noarch 0:3.20-4.el7 perl-Pod-Simple.noarch 1:3.28-4.el7 perl-Pod-Usage.noarch 0:1.63-3.el7
perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 perl-Socket.x86_64 0:2.010-4.el7 perl-Storable.x86_64 0:2.45-3.el7 perl-Text-ParseWords.noarch 0:3.29-4.el7
perl-Time-HiRes.x86_64 4:1.9725-3.el7 perl-Time-Local.noarch 0:1.2300-2.el7 perl-constant.noarch 0:1.27-2.el7 perl-libs.x86_64 4:5.16.3-293.el7
perl-macros.x86_64 4:5.16.3-293.el7 perl-parent.noarch 1:0.225-244.el7 perl-podlators.noarch 0:2.5.1-3.el7 perl-threads.x86_64 0:1.87-4.el7
perl-threads-shared.x86_64 0:1.43-6.el7 popt.x86_64 0:1.13-16.el7 sed.x86_64 0:4.2.2-5.el7 setup.noarch 0:2.8.71-10.el7
tzdata.noarch 0:2018e-3.el7 zlib.x86_64 0:1.2.7-18.el7
Failed:
ca-certificates.noarch 0:2018.2.22-70.0.el7_5 chkconfig.x86_64 0:1.7.4-1.el7 coreutils.x86_64 0:8.22-23.el7 filesystem.x86_64 0:3.2-25.el7 openssl-libs.x86_64 1:1.0.2k-16.el7
Complete!
Однако после этого большинство команд начали завершаться с ошибкой segment fault (core dumped)
, даже простые команды как ls
, rm
, cp
и mv
, за исключением некоторых встроенных команд оболочки, таких как cd
, ulimit
и history
.
Есть два важных момента, которые, как я думаю, могут быть причиной:
-
Моя версия ядра Linux —
3.10.0-1160.42.2.el7.x86_64
, которая, по-видимому, не соответствует версии, которую я установил какkernel-devel.x86_64 0:3.10.0-957.el7
. -
Я запустил код в состоянии путаницы, следуя https://blog.csdn.net/chris_pei/article/details/79203033:
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-headers-4.13.0-041300_4.13.0-041300.201709031731_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-headers-4.13.0-041300-generic_4.13.0-041300.201709031731_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-image-4.13.0-041300-generic_4.13.0-041300.201709031731_amd64.deb
sudo dpkg -i *.deb
Но я никогда не делал никаких настроек для загрузки, потому что я считал это ненужным.
Поэтому я очень хочу узнать:
- Что вызвало
Segment fault (core dumped)
. - Что мне делать, чтобы восстановить компьютер без инструментов, таких как
cp
,rm
иmv
.
Что я пробовал: я могу загружать и загружать файлы в /workspace
, потому что я использую Jupyter
для доступа к своему компьютеру. Я пытался загрузить простую программу, чтобы поймать core файл, чтобы я мог проанализировать причину с помощью gdb program core
. К сожалению, я не знаю, как предоставить программе разрешения на выполнение, потому что при вводе команды chmod
по-прежнему показывалась ошибка Segment fault (core dumped)
.
Я буду признателен за любую помощь или совет, потому что это очень важно для меня. Большое вам спасибо.
Я предоставлю все команды, которые я ввел из history
:
Ответ или решение
Сегментация памяти (или "segmentation fault") и сброс ядра ("core dumped") — это распространённая ошибка в Linux-системах, сигнализирующая о проблемах с памятью. В большинстве случаев такая ошибка указывает на то, что программа пытается получить доступ к памяти, к которой она не должна иметь доступ. Причины такой ошибки могут быть разнообразными, и в вашем случае отладка требует тщательного анализа.
Теоретическая часть
-
Концепция сегментации памяти в Linux: Linux, как и большинство современных операционных систем, использует концепцию виртуальной памяти и сегментации для обеспечения безопасности и изоляции памяти. Когда программа обращается к памяти вне отведённого ей сегмента, ядро генерирует ошибку "segmentation fault", предотвращая доступ программы к чужой памяти и возможные последствия этого.
-
Роль пакетных систем (например, yum) и зависимости: Пакетные системы, такие как yum, предназначены для управления установками и обновлениями пакетов. Они следят за зависимостями между различными пакетами, что упрощает управление системой. Однако в случае несоответствия версий ядра и пакетов ядра может происходить нарушение функционирования системы, как случилось в вашем случае.
-
Важность совпадения версий ядра: Для корректной работы драйверов и модулей критично, чтобы версии ядра и установленных пакетов ядра были согласованы. В вашем случае, разница в версиях установленного ядра (3.10.0-1160.42.2.el7.x86_64) и ядра, для которого были установлены пакеты (3.10.0-957.el7), могла вызвать ошибку сегментации.
Примеры проблемы
В вашем описании проблемы упоминается, что при установке пакета kernel-devel
обнаружились нефатальные ошибки в post-install скриптах и нарушении работы пакетов. После этой установки простейшие команды (ls
, rm
, cp
, mv
) начали приводить к сегментации. Это указывает на возможные проблемы с библиотеками или основными системными компонентами, необходимыми для выполнения этих команд.
По вашим словам, вы также пытались установить заголовки и образы ядра версии 4.13, предназначенной для Ubuntu, в CentOS, что может привести к серьезным несовпадениям и сбоям в системе. Эти действия могли перемешать конфигурацию загрузки ядра, что также может быть причиной сегментации.
Применение решений
Теперь рассмотрим, как именно можно решить возникшую проблему, используя минимальные доступные инструменты:
-
Выяснение причины ошибки:
- Попробуйте использовать
dmesg
для получения сообщений от ядра, которые могут пролить свет на причину ошибок сегментации. - Если возможно, запустите систему в режиме восстановления или однопользовательский режим (single-user mode), чтобы исследовать состояние системы.
- Попробуйте использовать
-
Восстановление системы:
- Резервное копирование данных: Если у вас есть доступ к Jupyter и вы можете загружать/выгружать файлы, скопируйте все важные данные перед дальнейшими действиями.
- Обновление ядра и пакетов: Установите правильную версию
kernel-devel
, которая соответствует установленной версии ядра. Используйтеrpm
вручную, еслиyum
не работает. - Удаление конфликтующих пакетов: Удалите пакеты, которые вы устанавливали вручную, такие как Ubuntu-специфичные заголовки и образы ядра.
-
Используйте доступные инструменты:
- Поскольку у вас работают команды
cd
,ulimit
иhistory
, вы можете попытаться выстроить инструменты для восстановления через скрипты и конфигурацию системы.
- Поскольку у вас работают команды
-
Перезагрузка загрузчика (GRUB):
- Проверьте и, если нужно, отредактируйте файл конфигурации GRUB, чтобы убедиться, что система загружается с правильным ядром и параметрами.
- Используйте
grub2-mkconfig -o /boot/grub2/grub.cfg
для обновления конфигурации загрузчика.
-
Переустановка»:
- Если исправить систему не удается, рассмотрите возможность полной переустановки ОС, восстановив данные из резервной копии после стабильной установки.
В итоге, ваша проблема требует комплексного подхода к устранению, начиная от анализа системных журналов и заканчивая возможной переустановкой системы. Правильное соблюдение процедур установки пакетов и конфликтного разрешения версий поможет избежать таких проблем в будущем.