
Я использую 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 нарушителей).