Я недавно сделал apt-get update
с последующим apt-get upgrade
на моем сервере Debian VPS. Вдруг (по крайней мере) wget
перестал работать с ошибкой Segmentation fault
. Это даже не попытка что-то сделать. Итак, после некоторого поиска в Google я установил gdb
и попытался отладить wget:
~# gdb wget
(gdb) run
Starting program: /usr/bin/wget
Error while mapping shared library sections:
'/lib/libc.so.5': not in executable format: File truncated
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
Смотря на /lib/
дает мне это:
~# ls -l /lib/
total 288
lrwxrwxrwx 1 root root 21 Oct 14 08:52 cpp -> /etc/alternatives/cpp
drwxr-xr-x 2 root root 4096 May 7 2015 discover
drwxr-xr-x 2 root root 4096 May 7 2015 ifupdown
drwxr-xr-x 2 root root 4096 May 7 2015 init
-rwxr-xr-x 1 root root 71416 Oct 5 2014 klibc-IpHGKKbZiB_yZ7GPagmQz2GwVAQ.so
-rwxr-xr-x 1 root root 23904 Jan 26 22:08 libc.so.5
lrwxrwxrwx 1 root root 17 Nov 8 2014 libip4tc.so.0 -> libip4tc.so.0.1.0
-rw-r--r-- 1 root root 31416 Nov 8 2014 libip4tc.so.0.1.0
lrwxrwxrwx 1 root root 17 Nov 8 2014 libip6tc.so.0 -> libip6tc.so.0.1.0
-rw-r--r-- 1 root root 31416 Nov 8 2014 libip6tc.so.0.1.0
lrwxrwxrwx 1 root root 15 Nov 8 2014 libipq.so.0 -> libipq.so.0.0.0
-rw-r--r-- 1 root root 10544 Nov 8 2014 libipq.so.0.0.0
lrwxrwxrwx 1 root root 16 Nov 8 2014 libiptc.so.0 -> libiptc.so.0.0.0
-rw-r--r-- 1 root root 5816 Nov 8 2014 libiptc.so.0.0.0
lrwxrwxrwx 1 root root 20 Nov 8 2014 libxtables.so.10 -> libxtables.so.10.0.0
-rw-r--r-- 1 root root 51896 Nov 8 2014 libxtables.so.10.0.0
drwxr-xr-x 3 root root 4096 May 7 2015 lsb
drwxr-xr-x 2 root root 4096 May 7 2015 modprobe.d
drwxr-xr-x 3 root root 4096 May 7 2015 modules
drwxr-xr-x 2 root root 4096 May 7 2015 startpar
drwxr-xr-x 8 root root 4096 Jan 27 15:19 systemd
drwxr-xr-x 15 root root 4096 May 7 2015 terminfo
drwxr-xr-x 4 root root 4096 Jan 27 15:13 udev
drwxr-xr-x 4 root root 12288 Jan 27 15:20 x86_64-linux-gnu
drwxr-xr-x 2 root root 4096 May 7 2015 xtables
Как мы видим, 26 января с libc.so.5 «что-то случилось», но я не знаю, что именно.
Я проверил dmesg | grep "wget"
:
(truncated)
[247973.065698] wget[9959]: segfault at 0 ip (null) sp 00007ffc31e37558 error 14 in wget[400000+63000]
[248272.905735] wget[10886]: segfault at 0 ip (null) sp 00007ffcf3e14038 error 14 in wget[400000+63000]
[248572.716856] wget[11824]: segfault at 0 ip (null) sp 00007fffdcc9e2d8 error 14 in wget[400000+63000]
[248873.509595] wget[12742]: segfault at 0 ip (null) sp 00007ffd84ad95d8 error 14 in wget[400000+63000]
[249173.463737] wget[13689]: segfault at 0 ip (null) sp 00007ffca87ba518 error 14 in wget[400000+63000]
[249472.948078] wget[14664]: segfault at 0 ip (null) sp 00007ffe54fd32a8 error 14 in wget[400000+63000]
[249776.082815] wget[15640]: segfault at 0 ip (null) sp 00007ffecc36c758 error 14 in wget[400000+63000]
[250072.819988] wget[16595]: segfault at 0 ip (null) sp 00007fff07f4f9d8 error 14 in wget[400000+63000]
[250373.130105] wget[17570]: segfault at 0 ip (null) sp 00007ffcec9c01d8 error 14 in wget[400000+63000]
[250672.640891] wget[18493]: segfault at 0 ip (null) sp 00007ffe9f78cc08 error 14 in wget[400000+63000]
[250975.950585] wget[19412]: segfault at 0 ip (null) sp 00007fff46300128 error 14 in wget[400000+63000]
Сервер - это VPS, работающий на Debian по адресу Wedos.com:
~# uname -a
Linux server1 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux
Может ли кто-нибудь помочь мне, что происходит и как исправить segfault? Это рабочий сервер с живым трафиком.
Спасибо!
Ключевым моментом здесь является линия
'/lib/libc.so.5': not in executable format: File truncated
Библиотека C - один из основных компонентов Unix-подобной системы, включая Linux. То, что он поврежден, означает, что практически ничего буду работать. Вам повезло, что ваша система хромает, но вполне возможно, что запуск или перезапуск чего-либо не удастся.
НЕ ПЕРЕЗАГРУЖАЙТЕ СИСТЕМУ. В его нынешнем состоянии он почти наверняка не вернется.
Особенно потому, что это VPS, и поскольку это произошло вместе с обновлением, мне интересно, может быть, у вас закончились ресурсы, такие как дисковое пространство или inodes. Я бы не стал ограничиваться чем-то вроде этого, чтобы сломать больше вещей в вашей системе, поэтому вам может потребоваться реализовать некоторую форму аварийного восстановления. Самым простым вариантом может быть восстановление самой последней резервной копии.
По крайней мере, вам придется переустановить библиотеку C. В моей системе Debian это обеспечивается libc6
семейство пакетов, в первую очередь libc6
. Вы можете запустить dpkg -S libc.so
чтобы перечислить все пакеты, которые предоставляют файлы с именами, содержащими подстроку libc.so
. Если вы не можете запустить это на рассматриваемом VPS, настройте отдельную систему (где-то может быть виртуальная машина с низким уровнем подготовки; это не имеет большого значения) с тем же выпуском Debian, обновите списки пакетов и запустите команда там; он сообщит вам, какие пакеты можно переустановить.
Когда вы вернетесь к основам работы, вы можете попробовать Как проверить, соответствуют ли файлы, установленные пакетом, оригиналам? как проверить, что (по крайней мере, в большинстве случаев) больше ничего не было повреждено.
Лично, особенно с учетом того, что, по-видимому, это важная система (поскольку вы утверждаете, что это «рабочий сервер с живым трафиком»), я, вероятно, предпочел бы просто инициировать любые имеющиеся у вас планы аварийного восстановления. Скорее всего, это будет проще и быстрее, чем пытаться исправить что-то на месте и никогда не знать, какие ошибки вы могли пропустить. На самом деле это просто вариация нужно ядерное оружие с орбиты, чтобы быть уверенным.