Ошибка переполнения диска: apt-get не может установить или удалить

24

Я столкнулся со следующей ошибкой при обновлении сервера Ubuntu 12.04. Теперь apt-getневозможно установить или удалить какой-либо пакет.

Распаковка linux-headers-3.13.0-62 (из ... / linux-headers-3.13.0-62_3.13.0-62.102 ~ precision1_all.deb) ...
dpkg: обработка ошибок /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb (--unpack):
 невозможно создать `/usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h.dpkg-new ' 
(при обработке `./usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h '): на устройстве 
не осталось места. Отчет apport не записан, поскольку сообщение об ошибке указывает на диск полная ошибка
 dpkg-deb: ошибка: вставка подпроцесса была прервана по сигналу (сломанный канал)
При обработке возникли ошибки:
 /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb
E: Подпроцесс / usr / bin / dpkg вернул код ошибки (1)

Хотя у меня нет свободного места на диске,

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       6.8G  4.7G  1.8G  69% /  

Во всяком случае, мои иноды полны,

# df -i
Filesystem     Inodes   IUsed  IFree IUse% Mounted on
/dev/sda1      458752  455214   3538  100% /

У меня более десяти старых ядер, но я не могу удалить их, так как мое apt-getсамо по себе хромое. Поэтому я не могу следить за этим постом, в котором сообщается о подобной проблеме.

Кажется, что единственный вариант - удалить несколько старых ядер вручную. Это вызовет какие-либо проблемы?

Есть ли лучший выход? Могу ли я использовать зарезервированное пространство для root на данный момент и удалить старые ядра?

souravc
источник
1
Действительно, я вручную удалил пару старых ядер, /usr/srcчтобы избавиться от ситуации. К счастью, все прошло хорошо и aptснова начало работать. Но я попрошу вас вернуться, прежде чем делать это на производственной машине. Я сделал это на виртуальной машине с полным резервным копированием.
Souravc
Оно работает! Я сделал то же самое здесь (ubutu 14.04.1) для обновления до ядра 4.4.0-51-generic. Я просто не уверен, что это вызовет какие-либо проблемы в будущем. Спасибо.
Морено

Ответы:

36

Я знаю, что этот пост немного устарел, но я нашел здесь ответ для любого, кто может наткнуться на этот пост: https://help.ubuntu.com/community/RemoveOldKernels

В случае, если эта ссылка не работает, вот соответствующий фрагмент:

Безопасное удаление старых ядер

Для пользователей систем LVM, зашифрованных систем или систем с ограниченным хранилищем наиболее частой проблемой является то, что раздел / boot просто заполнен. Диспетчер пакетов не может установить ожидающее обновление из-за недостатка места. Кроме того, apt-get не может удалить пакет из-за нарушенной зависимости.

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


$ sudo rm -rv ${TMPDIR:-/var/tmp}/mkinitramfs-*  
                                  ## In Ubuntu 16.04 and earlier there may be leftover temporary
                                  ## files to delete.
                                  ## See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=814345

$ uname -r                        ## This command identifies the currently-running kernel
4.2.0-21-generic                  ## This is the current kernel.
                                  ## DO NOT REMOVE it!

$ dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)
                                  ## This command lists all the kernels excluding the booted
                                  ## kernel in the package database, and their status.
rc  linux-image-4.2.0-14-generic  ## The oldest kernel in the database
                                  ## Status 'rc' means it's already been removed
ii  linux-image-4.2.0-15-generic  ## The oldest installed kernel. Eligible for removal.
                                  ## Status 'ii' means Installed.
ii  linux-image-4.2.0-16-generic  ## Another old installed kernel. Eligible for removal
ii  linux-image-4.2.0-18-generic  ## Another old installed kernel. Eligible for removal
ii  linux-image-4.2.0-19-generic  ## The previous good kernel. Keep
iU  linux-image-4.2.0-22-generic  ## DO NOT REMOVE. Status 'iU' means it's not installed,
                                  ## but queued for install in apt.
                                  ## This is the package we want apt to install.

                                  ## Purge the oldest kernel package using dpkg instead of apt.
                                  ## First you need to remove the image initrd.img file manually
                                  ## due to Bug #1678187.
$ sudo update-initramfs -d -k 4.2.0-15-generic
$ sudo dpkg --purge linux-image-4.2.0-15-generic linux-image-extra-4.2.0-15-generic
                                  ## If the previous command fails, some installed package
                                  ## depends on the kernel. The output of dpkg tells the name
                                  ## of the package. Purge it first.

                                  ## Also purge the respective header package.
$ sudo dpkg --purge linux-headers-4.2.0-15-generic
                                  ## Try also purging the common header package.
$ sudo dpkg --purge linux-headers-4.2.0-15
                                  ## Do not worry, if the previous command fails.

$ sudo apt-get -f install         ## Try to fix the broken dependency.

Я последовал за этим с:

sudo apt-get autoremove --purge
Junkle
источник
9

Теперь я нашел выход из ситуации и удалил пару старых ядер, /usr/srcчтобы избавиться от ситуации. К счастью, все прошло хорошо и снова начало работать.

Настоятельно рекомендуется выполнить резервное копирование перед удалением старых ядер на производственном компьютере.

souravc
источник
Любое лучшее решение по-прежнему приветствуется. Я публикую этот комментарий как ответ, так как он может кому-то помочь.
souravc
1
После удаления некоторых старых ядер, apt-get autoremove запуска и установки некоторых зависимостей apt-get -f installисправлены мои проблемы
Thamaraiselvam
СПАСИБО. Я удалил все linux- * под, /bootно не использовал, dkpgтак что все еще были *-headerфайлы/usr/src
Дилан Пирс