apt-get: на устройстве не осталось места (12.04)

42

Я прочитал все темы, которые смог найти, даже те, в которых говорится, что на этот вопрос ответили в другом месте, но ни одна из них не затрагивает конкретную проблему, с которой я столкнулся. Диспетчер обновлений запустил и выдал ошибки, относящиеся к неудовлетворенной зависимости, и предложил использовать apt-get install -f, которая завершается с этим сообщением:

Unpacking linux-headers-3.5.0-36 (from .../linux-headers-3.5.0-36_3.5.0-36.57~precise1_all.deb) ...
dpkg: error processing /var/cache/apt/archives/linux-headers-3.5.0-36_3.5.0-36.57~precise1_all.deb (--unpack):
 unable to create `/usr/src/linux-headers-3.5.0-36/arch/arm/mach-iop32x/include/mach/glantank.h.dpkg-new' (while processing `./usr/src/linux-headers-3.5.0-36/arch/arm/mach-iop32x/include/mach/glantank.h'): No space left on device

Я подозреваю, что последние 5 слов На устройстве не осталось свободного места , но df и du оба показывают достаточно места. Вот мне и интересно, какому устройству нужно больше места?

Ouput от df -h

Filesystem 
Size Used Avail Use% 
Mounted on /dev/sda1 5.5G 4.4G 786M 86% 
/ udev 996M 4.0K 996M 1% 
/dev tmpfs 402M 880K 401M 1% 
/run none 5.0M 0 5.0M 0% /run/lock none 1004M 156K 1004M 1% 
/run/shm /dev/sdb1 30G 1.4G 27G 5% 
/home /dev/sdc1 299G 31G 268G 11% /media/HD-PCTU2 
Дон А
источник
У вас есть место на корневом разделе?
don.joey
1
Пожалуйста, вставьте (i) вывод df -hи (ii) вывод mount. После завершения работы dpkg очистит файлы, поэтому может показаться, что у вас достаточно места, а на самом деле его нет. Рассмотрите возможность запуска apt-get cleanдо запуска dpkg.
января
1
контролировать do watch -n 1 df -hв терминале во время выполнения apt-get install(это немного замедлит ваш ввод- вывод, но вы будете знать, какая файловая система слишком мала)
Эммануэль
Проблема возникает также с Ubuntu 14.04 и версией ядра 3.13.0.108 на одном компьютере из трех. Я начал с askubuntu.com/questions/223143/… но ответы, показанные здесь, в той же строке.
XavierStuvw

Ответы:

48

Я только что столкнулся с этой же проблемой. В другом месте я встретил упоминание inode и побежал в свой терминал, чтобы проверить использование inode:

  df -i 

Это показало использование инода на 99%. Таким образом, хотя на моем диске оставалось достаточно места, я не смог создать больше файлов из-за ограничения числа инодов. Некоторая очистка диска была решением моей проблемы.

Kevin
источник
6
У меня была та же проблема, вызванная обновлениями ядра, которые не удаляют старые ядра автоматически. Заголовки Linux каждого обновления ядра занимают значительное количество inode! --- Мой «безопасное» решение было переместить два заголовки ядра каталогов в другую файловую систему: cd /usr/src ; cp -a linux-headers-3.2.0-3{2,3}* /home/tmp-hdr ; rm -r linux-headers-3.2.0-3{2,3}*, apt-get-install -f, удалить некоторые другие заголовки правильного путь: apt-get purge linux-headers-...переместите заголовки из TMP спины: cd /usr/src ; cp -a /home/tmp-hdr/* .. Удалите больше старых ядер, используя apt-get purge.
Пабук
1
Пожалуйста, рассмотрите возможность участия в сообщениях об ошибках с низкой активностью: Ошибка # 1089195 linux-headers будет съедать ваши inode на LTS. , Ошибка # 690911 При установке без форматирования не удаляются старые ядра
pabouk
@pabouk Интересно, а можно было бы использовать, dpkg --purge linux-headers-3.2.0-3{2,3}*; apt-get -f installчтобы копирование не требовалось?
Ярно
@jarno Это было давно, но я думаю, что все команды, использующие базу данных dpkg или apt, терпели неудачу. Я думаю, что это было из-за сломанных зависимостей и других несоответствий, вызванных недостаточным количеством inode во время автоматического обновления.
Пабук
Требуемая очистка диска может быть выполнена sudo linux-purge --fixпосле публикации скрипта .
Ярно
37

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

dpkg -l linux-headers-\* linux-image-\* | grep ^ii

в окно терминала. Когда я делаю это, я получаю

ii  linux-headers-3.8.0-18                    3.8.0-18.28                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-18-generic            3.8.0-18.28                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-19                    3.8.0-19.30                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-19-generic            3.8.0-19.30                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-21                    3.8.0-21.32                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-21-generic            3.8.0-21.32                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-22                    3.8.0-22.33                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-22-generic            3.8.0-22.33                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-23                    3.8.0-23.34                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-23-generic            3.8.0-23.34                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-25                    3.8.0-25.37                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-25-generic            3.8.0-25.37                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-generic                     3.8.0.25.43                            amd64        Generic Linux kernel headers

Так как у меня есть довольно много, я мог бы удалить некоторые из самых старых с

sudo apt-get remove linux-headers-3.8.0-18

Если происходит apt-getсбой, потому что он пропускает некоторые зависимости пакета (которые вы не можете установить из-за отсутствия свободных инодов), вы можете dpkgвместо этого прибегнуть непосредственно:

sudo dpkg --remove linux-headers-3.8.0-18

Сделайте это пару раз со своим старшим, linux-headers-*и у вас должно быть место.

Марк
источник
4
Это выявляет другую проблему. Каждый раз, когда я пытаюсь запустить dpkg, он говорит мне, что у него есть неудовлетворенная зависимость. У следующих пакетов есть неудовлетворенные зависимости: linux-headers-3.5.0-36-generic: Зависит от: linux-headers-3.5.0-36, но это не так. собирается быть установленным, и это - вещь, которая не будет устанавливаться, потому что не хватает места
Дон A
Возможно, резервная копия ваших пользовательских файлов в порядке, прежде чем связываться с загрузочным разделом? У меня никогда не было проблем с этим, но если бы я это сделал, у меня было бы все необходимое для переустановки. Конечно, я делаю резервное копирование каждый день в любом случае.
Марк
Я надеялся, что мне не нужно возиться с загрузочным разделом и что есть способ вырваться из бесконечного цикла зависимости. Теперь я понимаю, что, вероятно, будет проще сделать резервную копию данных и начать все сначала. Теперь, когда я знаю важность очистки старых вещей, я сделаю это привычкой. Спасибо всем за помощь.
Дон А
Не за что . , , резервное копирование - это всегда хорошая идея, и вы на самом деле не слишком много работаете с загрузочным разделом, просто удалив некоторые пакеты с помощью apt-get. Это должен быть кусок пирога. Я просто предложил выполнить резервное копирование ваших данных, потому что я всегда предлагаю резервное копирование данных, если у вас есть проблемы (или даже если у вас нет!) Я фактически запускал эти команды в моей собственной системе, чтобы проверить их. Мне потребовалось три минуты, чтобы удалить linux-headers-3.8.0-18.
Марк
1
Если произойдет сбой снова sudo dpkg --remove linux-headers-3.8.0-18, удалите, sudo dpkg --remove linux-headers-3.8.0-18-genericи он возьмет с собой другой заголовок.
Theson
17

Я использовал sudo apt-get autoremoveи удалил кучу старых пакетов с заголовками ядра. Хорошо пойти после этого.

Фрэнк Сфаланга младший
источник
В моем случае apt-get отказался делать автоудаление, отдавая приоритет тому факту, что был разбитый пакет для сортировки. Какой сломанный пакет был вызван насыщением inode. Смотрите также эту ветку AskUbuntu
XavierStuvw
Ну, это только спасло меня! После обновления мой сеанс x никогда не входил, просто просил снова войти в систему, и я часто получал сообщение «нет свободного места». Я думал, что должен был отформатировать мой HD, но ваш трюк просто спас меня :)
user5193682
1
Lol Я не могу запустить это, потому что у меня слишком много файлов ...
Брайан говорит восстановить Monica
2

Насколько я знаю, предел inode в файловых системах Linux ext * составляет около 4 миллиардов, но не меньше, что составляет огромное количество файлов. Итак, ваша проблема в том, что что-то генерирует много файлов. Я могу предложить вам сначала проверить это: http://blog.scoutapp.com/articles/2014/10/08/understanding-disk-inodes Итак, вы найдете, что заполняет иноды вашей FS. Я могу также предложить очистить кэш apt:

sudo apt-get clean

а также

sudo apt-get autoclean
Стефан
источник