Рейтинг:2

Как восстановить поврежденный glibc на сервере Ubuntu 20.04

флаг us

Будь у меня второй шанс, я бы перепроверил, но случайно запустил sudo ln -sf что-то /usr/lib/x86_64-linux-gnu/libc-2.31.so. И нет другой копии glibc, потому что это настоящий общий объект, а не символическая ссылка.

Так как я могу оправиться от него? Я думаю, что мне, возможно, придется получить еще одну копию glibc, загрузить машину с USB-устройства и скопировать чистую libc-2.31.so к /usr/lib/x86_64-linux-gnu.

Как правильно это сделать? Мне также нужно перестроить символические ссылки libc.so.6 под /lib/x86_64-линукс-гну и /usr/lib/x86_64-linux-gnu?

Рейтинг:1
флаг zw

Не создавайте симлинки в папках, которые контролируются APT!!!
Вы сломаете систему и/или создадите кошмар для ее дальнейшего обслуживания!!!

Чтобы исправить ситуацию, переустановите пакет libc6 к

sudo apt-получить обновление
sudo apt-get install --переустановить libc6 

и не трогайте симлинки в следующий раз.
Если хотите поиграться с системой - делайте это в /USR/местные/бен который находится вне контроля APT.


Примечание: на свежей минимальной версии 20.04 LTS есть только один файл с именем libc-2.31.so - видеть

# найти / -name libc-2.31.so
/usr/lib/x86_64-linux-gnu/libc-2.31.so

и один по имени libc.so.6:

 # найти / -name libc.so.6
 /usr/lib/x86_64-linux-gnu/libc.so.6

в то время как они символически связаны следующим образом (центральная часть заменена на (...)):

 # ls -al /usr/lib/x86_64-linux-gnu/libc-2.31.so /usr/lib/x86_64-linux-gnu/libc.so.6
 -rwxr-xr-x (...) /usr/lib/x86_64-linux-gnu/libc-2.31.so
 lrwxrwxrwx (...) /usr/lib/x86_64-linux-gnu/libc.so.6 -> libc-2.31.so

Обе предоставлены к libc6 deb-пакет.

Fengkai Sun avatar
флаг us
Извините, я не дал ясности, но сервер в настоящее время не работает и не может снова загрузиться, потому что он говорит, что не может найти `libc.so.6`. Если я запускаю команду на загрузочном USB-накопителе, glibc не устанавливается на исходный диск сервера, верно?
N0rbert avatar
флаг zw
Затем вам нужно загрузиться с помощью live-USB, смонтировать rootfs файловой системы сервера, выполнить chroot к ней и переустановить там пакет `libc6`. Или скопируйте как `/usr/lib/x86_64-linux-gnu/libc-2.31.so`, так и `/usr/lib/x86_64-linux-gnu/libc-2.31.so` из действующей системы на файловую систему сервера, затем перезагрузитесь на ОС и переустановите последний deb-пакет `libc6`.
Fengkai Sun avatar
флаг us
Спасибо за ваше быстрое разъяснение! Я запускаю `find / -name libc-2.31.so` на новой работающей системе и получаю тот же результат, что и вы. Но когда я запускаю `ls /lib/x86_64-linux-gnu/ | grep libc`, есть еще `libc-2.31` и `libc.so.6`...
N0rbert avatar
флаг zw
У меня опечатка в предыдущем комментарии. Спасибо! Я отредактировал ответ, чтобы прояснить этот момент о символических ссылках между libc-2.31 и libc.so.6. Я думаю, что теперь он завершен, и вы можете принять его.
Fengkai Sun avatar
флаг us
Большое спасибо за подробную консультацию! Я все еще на пути к серверу и обновлю вопрос, если что-то пойдет не так.
N0rbert avatar
флаг zw
Я надеюсь, что все будет хорошо. Будьте осторожны в следующий раз :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.