Утилита говорит, что больше нет свободного места на диске, когда есть много
Каким-то образом моя система в маринаде.
$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
linux-headers-3.2.0-29 linux-headers-3.2.0-29-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
linux-headers-3.2.0-80
The following NEW packages will be installed
linux-headers-3.2.0-80
0 to upgrade, 1 to newly install, 0 to remove and 251 not to upgrade.
3 not fully installed or removed.
Need to get 0 B/11.7 MB of archives.
After this operation, 56.4 MB of additional disk space will be used.
Do you want to continue [Y/n]?
(Reading database ... 1255202 files and directories currently installed.)
Unpacking linux-headers-3.2.0-80 (from .../linux-headers-3.2.0-80_3.2.0-80.116_all.deb) ...
dpkg: error processing /var/cache/apt/archives/linux-headers-3.2.0-80_3.2.0-80.116_all.deb (--unpack):
unable to create `/usr/src/linux-headers-3.2.0-80/include/linux/sunrpc/gss_err.h.dpkg-new' (while processing `./usr/src/linux-headers-3.2.0-80/include/linux/sunrpc/gss_err.h'): No space left on device
No apport report written because the error message indicates a disk full error
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/linux-headers-3.2.0-80_3.2.0-80.116_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Но:
us@desktop:/var/log$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 20158332 16166516 2967816 85% /
udev 4026512 4 4026508 1% /dev
tmpfs 807064 996 806068 1% /run
none 5120 0 5120 0% /run/lock
none 4035308 128 4035180 1% /run/shm
/dev/sda4 904990760 51533960 807485908 6% /home
Тупик!
us@desktop:~$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 1281120 1278499 2621 100% /
udev 1006628 507 1006121 1% /dev
tmpfs 1008827 445 1008382 1% /run
none 1008827 3 1008824 1% /run/lock
none 1008827 6 1008821 1% /run/shm
/dev/sda4 57466880 110192 57356688 1% /home
О, так что таблица инодов заполнена. Никогда такого раньше не было, что тогда вызывает?
2 ответа
Как показано в выводе df -iу вас очень мало свободных инодов / и, следовательно, dpkg не может завершить операцию.
В большинстве случаев это вызвано многочисленными небольшими файлами, созданными где-то (непреднамеренно) в файловой системе.
Вы можете проверить файлы размером менее 1 КБ и начать их удаление, если не нужно:
sudo find / -type f -size -1k -ls
Аналогичным образом вы можете проверять увеличение размера файла, пока не доберетесь до корня проблемы.
Вся благодарность @heemayl за указатели, которые привели к этому ответу. Я принял этот ответ, но вот подробности того, как я его исправил, на случай, если он пригодится другим.
Проблема была вызвана полной таблицей inode. Как я понимаю, файловая система состоит из двух частей: inode и space. Иноды относятся к количеству файлов, где как пространство, насколько они велики. Моя система была переполнена миллионами крошечных файлов, вызванных тем, что Ubuntu не удаляла старые ядра. Поскольку система долгое время работала, у меня было более 40 ядер, в т.ч. установленные заголовочные файлы, что слишком много для файловой системы системного раздела 20 ГБ.
Это означало, что dpkg не мог завершить установку - ему нужно больше места для завершения своей работы - но, к сожалению, это не означало, что я не мог создать пространство, используя apt для удаления вещей!
Решение, которое я нашел, состояло в том, чтобы переместить все /usr/src/ файлы на мой другой раздел, оставив только символическую ссылку на файлы на полную Fs:
sudo mv /usr/src /home/usr-src
sudo ln -s /home/usr-src /usr/src
После этого я смог завершить apt:
sudo apt install -f
И после этого я смог удалить все старые ядра, которые мне не нужны, освободив место, и затем я смог переместить папку src обратно.