Вопрос или проблема
У меня проблема с удалением пакетов на моем сервере (20.04 LTS).
Когда я запускаю apt remove metricbeat
, получаю следующее сообщение:
root@elk:/home/elk# apt remove metricbeat
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
metricbeat
0 upgraded, 0 newly installed, 1 to remove and 183 not upgraded.
1 not fully installed or removed.
After this operation, 182 MB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 151385 files and directories currently installed.)
Removing metricbeat (7.16.2) ...
Setting up linux-image-5.4.0-92-generic (5.4.0-92.103) ...
Processing triggers for linux-image-5.4.0-92-generic (5.4.0-92.103) ...
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-5.4.0-92-generic
Progress: [ 80%] [############################################.......]
Процесс зависает на этом этапе, ctrl+c ctrl+z не работают.
Я открываю другое ssh-соединение и снова запускаю apt remove metricbeat
, получаю следующее сообщение:
^Citing for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1890890 (apt)... 1s
Я нашел PID для apt с помощью ps -aux | grep apt
и убил его.
Затем снова запускаю команду удаления:
root@elk:/home/elk# apt remove metricbeat
^Citing for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process 1891272 (dpkg)... 1s
Запущенные процессы dpkg:
root 1891272 0.0 0.0 11136 5328 ? Ss 14:47 0:00 /usr/bin/dpkg --status-fd 42 --configure --pending
root 1891282 0.0 0.0 2608 608 ? S 14:47 0:00 /bin/sh /var/lib/dpkg/info/linux-image-5.4.0-92-generic.postinst triggered linux-update-5.4.0-92-generic
после убийства этих процессов снова запускаю команду удаления пакета и получаю:
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
так что я запускаю sudo dpkg --configure -a
, и процесс застревает на этом этапе:
root@elk:/home/elk# dpkg --configure -a
Setting up linux-image-5.4.0-92-generic (5.4.0-92.103) ...
Processing triggers for linux-image-5.4.0-92-generic (5.4.0-92.103) ...
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-5.4.0-92-generic
С помощью ctrl+c:
error processing package linux-image-5.4.0-92-generic (--configure):
installed linux-image-5.4.0-92-generic package post-installation script subprocess was interrupted
Errors were encountered while processing:
linux-image-5.4.0-92-generic
Я проверил содержимое /boot:
root@elk:/boot# ls -lh
total 218M
-rw-r--r-- 1 root root 233K Apr 20 2020 config-5.4.0-26-generic
-rw-r--r-- 1 root root 233K Nov 5 16:02 config-5.4.0-91-generic
-rw-r--r-- 1 root root 233K Nov 26 14:42 config-5.4.0-92-generic
drwxr-xr-x 4 root root 4.0K Apr 9 08:14 grub
lrwxrwxrwx 1 root root 27 Apr 9 08:14 initrd.img -> initrd.img-5.4.0-92-generic
-rw-r--r-- 1 root root 78M Feb 15 2021 initrd.img-5.4.0-26-generic
-rw-r--r-- 1 root root 81M Dec 9 06:37 initrd.img-5.4.0-91-generic
-rw-r--r-- 1 root root 0 Apr 9 14:58 initrd.img-5.4.0-92-generic.new
lrwxrwxrwx 1 root root 27 Jan 5 06:48 initrd.img.old -> initrd.img-5.4.0-91-generic
-rw------- 1 root root 4.6M Apr 20 2020 System.map-5.4.0-26-generic
-rw------- 1 root root 4.6M Nov 5 16:02 System.map-5.4.0-91-generic
-rw------- 1 root root 4.6M Nov 26 14:42 System.map-5.4.0-92-generic
lrwxrwxrwx 1 root root 24 Jan 5 06:48 vmlinuz -> vmlinuz-5.4.0-92-generic
-rw------- 1 root root 12M Apr 20 2020 vmlinuz-5.4.0-26-generic
-rw------- 1 root root 12M Nov 5 16:04 vmlinuz-5.4.0-91-generic
-rw------- 1 root root 14M Nov 26 14:45 vmlinuz-5.4.0-92-generic
lrwxrwxrwx 1 root root 24 Jan 5 06:48 vmlinuz.old -> vmlinuz-5.4.0-91-generic
root@elk:/boot#
Я думаю, проблема связана с initrd.img-5.4.0-92-generic
, и я не знаю, как её решить.
Этот цикл повторяется снова и снова.
Как долго вы ждете? Я знаю, что мне приходилось ждать несколько минут, пока выполняется update-initramfs: Generating /boot/initrd.img
. Попробуйте взять кофе и посмотреть телевизор, когда дойдете до этого.
Попробуйте запустить update-initramfs
в режиме подробного вывода, чтобы посмотреть, на каком модуле процесс зависает:
update-initramfs -v -u
Или ps
может показать, какой крючок в данный момент выполняется:
ps f | grep initram
24830 pts/1 S+ 0:00 \_ /bin/sh -e /etc/kernel/postinst.d/initramfs-tools 4.19.0-21-amd64 /boot/vmlinuz-4.19.0-21-amd64
24832 pts/1 S+ 0:00 \_ /bin/sh /usr/sbin/update-initramfs -c -k 4.19.0-21-amd64 -b /boot
24834 pts/1 S+ 0:00 \_ /bin/sh /usr/sbin/mkinitramfs -o /boot/initrd.img-4.19.0-21-amd64.new 4.19.0-21-amd64
28372 pts/1 S+ 0:00 \_ /bin/sh /usr/share/initramfs-tools/hooks/mdadm
Я бился над этой проблемой целый день!
apt install --reinstall initramfs-tools
помог мне её решить.
Ответ или решение
Теория
Процесс обновления initramfs — это важная часть администрирования Linux-систем. Initramfs (initial ram filesystem) — это файловая система, загружаемая в память на начальных стадиях загрузки. Она играет ключевую роль в процессе инициализации ядра и предоставляет необходимые средства для монтирования корневой файловой системы. Команда update-initramfs
генерирует новый файл initrd или обновляет существующий.
В вашем случае процесс update-initramfs
застревает на этапе генерации образа /boot/initrd.img-5.4.0-92-generic
, что указывает на проблемы в системе, связанные с зависимостями этих пакетов или состоянием файловой системы.
Пример
Основанием для вашего предположения о возможных проблемах с initrd.img-5.4.0-92-generic
может быть ситуация, когда предыдущие шаги завершались ошибками или на определённых этапах процесс зависал. Мы видим это в логах, где процесс зависал на обновлении initramfs, и это могло быть вызвано нескольким причинами: отсутствие необходимых пакетов, повреждение файлов, или проблемы с доступом к дисковому пространству.
Применение
-
Проверка дискового пространства. Убедитесь, что на разделе
/boot
достаточно места. Это можно сделать с помощью командыdf -h
. Убедитесь, что место не исчерпано, поскольку недостаток места может приводить к проблемам с записью новых файлов initrd. -
Ручное выполнение
update-initramfs
. Запустите команду в verbose-режиме для получения более детальной информации об этапах процесса:update-initramfs -v -u
Просмотр вывода команды позволит выявить, где именно возникают затруднения.
-
Проверка и ремонт файловой системы. Запустите проверку файловой системы с помощью
fsck
, особенно если подозреваете о возможных повреждениях. Важно выполнить это в безопасном или восстановительном режиме, чтобы избежать негативных последствий от работы системы с возможными ошибками. -
Переустановка пакетов initramfs. Иногда проблема может решиться переустановкой инструментов, обеспечивающих работу с initramfs:
sudo apt install --reinstall initramfs-tools
-
Удаление ненужных старых ядер. Скрытое заполнение дискового пространства старыми версиями ядра также может быть причиной проблем. Используйте
dpkg --list 'linux-image*'
для просмотра установленных версий и удалите ненужные с использованиемsudo apt remove
. -
Ручное удаление временных файлов. Если у вас есть файл, который, как кажется, является причиной проблемы (
initrd.img-5.4.0-92-generic.new
), его можно попробовать удалить, если подтвердите, что это безопасно. -
Обработка зависимостей и состояний пакетов. Если проблема связана с зависимостями, попробуйте использовать:
sudo dpkg --configure -a sudo apt-get install -f
Эти шаги позволяют систематически работать с проблемами, возникающими при генерации initramfs. Учитывая, что у вас установлена Ubuntu 20.04 LTS, рекомендуется также обновить систему и ядро до последней версии, если это возможно в вашей инфраструктуре. Периодически повторяющиеся проблемы с зависимостями и установкой пакетов могут указывать на необходимость более глубокой диагностики системы или пересмотра применяемых конфигураций и привычек администрирования.
Правильное понимание и следование этим шагам обеспечит успешное разрешение возникших проблем и сделает работу вашей системы более стабильной и предсказуемой.