Утилита говорит, что больше нет свободного места на диске, когда есть много

Каким-то образом моя система в маринаде.

$ 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 обратно.

Другие вопросы по тегам