На диске больше нет места

На диске больше нет места

Я использую Ubuntu 14.04. Какое-то время я не мог запускать больше программ одновременно. Вот что df -hвыдает:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G   25G  3.4G  88% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev             16G  4.0K   16G   1% /dev
tmpfs           3.2G  724K  3.2G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none             16G   59M   16G   1% /run/shm
none            100M   40K  100M   1% /run/user
/dev/sda2       438G  138M  416G   1% /scratch
AFS             8.6G     0  8.6G   0% /afs

и из df -i:

Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/sda1       1875968 1875968        0  100% /
none            4106915      11  4106904    1% /sys/fs/cgroup
udev            4103190     499  4102691    1% /dev
tmpfs           4106915     524  4106391    1% /run
none            4106915       3  4106912    1% /run/lock
none            4106915     122  4106793    1% /run/shm
none            4106915      27  4106888    1% /run/user
/dev/sda2      29138944     709 29138235    1% /scratch
AFS             9000000       0  9000000    0% /afs

Я также попробовал следующее предложение:bash: echo: ошибка записи: на устройстве не осталось места, не помогает, а наоборот, делает хуже. Теперь, если я захожу в терминал и частично пишу имя папки, нажимаю Tab и получаю:

cd Pybash: cannot create temp file for here-document: No space left on device

где я просто хотел написать

cd Python

Редактировать: Вывод sudo du -hxd1 /:

1.5G    /var
22G /usr
18M /etc
16K /lost+found
36K /home
349M    /opt
68K /tmp
9.7M    /bin
4.2M    /libx32
12K /.config
2.5M    /root
4.0K    /mnt
4.0K    /lib64
13M /sbin
81M /boot
505M    /lib
3.5M    /lib32
12K /media
4.0K    /srv
25G /

решение1

Проблема не в пространстве. У вас есть каталог с очень большим количеством пустых (или почти пустых) файлов. Каждый из них занимает иноду, и вы использовали их все. Найдите этот каталог:

for i in /* ; do echo "$i" ; find "$i" | wc -l ; done

(Вы должны сделать это как root). Это, вероятно, выведет список одного каталога с большим количеством файлов. Углубляйтесь, пока не найдете файлы, которые истощили ваши inodes. Удалите все эти файлы. Тогда на данный момент все будет в порядке. Откуда берутся эти файлы — это, конечно, другая история.

решение2

Как вы можете видеть из df -h, у вас все еще осталось место на вашем корневом разделе. Однако df -iпоказывает, что у вас закончились иноды. На моем компьютере у меня на корневом разделе занято 7,3 ГБ, но используется только 320 000 инодов, так что у вас, вероятно, есть много очень маленьких файлов, которые где-то засоряют все.

Для обсуждения того, где, см., например,Stack Exchange — найдите, где используются inodes. Я бы попробовал следующее с этой страницы:

sudo find / -xdev -printf '%h\0' | sort -z | uniq -cz | sort -nrzk 1 | tr '\0' '\n' | head -n 50

Если вы используете более позднюю версию Ubuntu (например, 15.10), то эта более короткая команда также может оказаться быстрее:

sudo du / --inodes -xS | sort -rh | head -n 50

Любой из них даст вам список каталогов, упорядоченных по количеству используемых inode. Вероятно, вы найдете один с очень большим номером (вероятно, где /var-то). Это должно дать вам представление о том, какие файлы можно удалить, но если у вас есть какие-либо вопросы, сначала задайте их здесь.

В качестве примера того, что может быть нормальным, на моем компьютере (работающем под управлением Ubuntu 15.10) я получаю следующий вывод этой команды:

3297    /usr/share/app-install/desktop
3022    /usr/share/man/man3
2325    /usr/bin
2149    /usr/share/man/man1
2104    /usr/share/app-install/icons
1816    /usr/lib/x86_64-linux-gnu
1089    /usr/src/linux-headers-4.2.0-19/include/linux
1089    /usr/src/linux-headers-4.2.0-18/include/linux
1089    /usr/src/linux-headers-4.2.0-16/include/linux
...

Вот объяснение более простой команды. sudoнеобходимо для запуска команды du как root, чтобы мы могли найти файлы в папках, которые ваш обычный пользователь, возможно, не сможет прочитать. du /дает Disk Usage корневого каталога /; --inodesсообщает ему о необходимости перечислить использование inode, -Sперечислить только файлы в самом каталоге, а не в подкаталогах, и -xне пересекать границы файловой системы (поскольку ваша проблема определенно есть /и не есть, например, /scratch). Затем мы передаем вывод этой команды в , чтобы sortнайти самых злостных нарушителей; -rменяет сортировку так, чтобы самые большие были вверху, и -hсортирует по числам, а не по алфавиту. Наконец, head -n 50выводит только первые 50 строк (т. е. 50 самых злостных нарушителей).


Вот объяснение более сложной команды. sudoнеобходимо для запуска команды find от имени пользователя root, чтобы мы могли найти файлы в папках, которые ваш обычный пользователь, возможно, не сможет прочитать. find /дает список всех файлов в корневом каталоге /; -xdevсообщает findне пересекать границы файловой системы (поскольку ваша проблема определенно находится на /и не на, например, /scratch); -printf '%h\0'печатает имя каталога, заканчивающееся нулевым байтом. Затем мы передаем вывод этой команды на sort -zи затем uniq -czподсчитываем, сколько раз был напечатан каждый каталог (т. е. сколько файлов находится в каждом каталоге); sortнеобходимо здесь, так как uniqтребует отсортированного списка. Затем мы сортируем, чтобы найти худших нарушителей; -rизменяет сортировку так, чтобы самые большие находились наверху, и -nсортирует по числам, а не по алфавиту. tr '\0' '\n'заменяет нулевые байты новыми строками. Наконец, head -n 50выводит только первые 50 строк (т. е. худших 50 нарушителей).

Связанный контент