我正在使用 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
空间不是这里的问题。你有一个目录,里面有很多空文件(或接近空文件)。每个文件都占用一个 inode,而且你已经用完了它们。找到该目录:
for i in /* ; do echo "$i" ; find "$i" | wc -l ; done
(您应该以 root 身份执行此操作)。这可能会列出一个包含大量文件的目录。深入研究,直到找到耗尽 inode 的文件。删除所有这些文件。然后您暂时就没问题了。当然,这些文件来自哪里又是另一个故事。
答案2
从中可以看出df -h
,您的根分区上仍有剩余空间。但是,df -i
显示您的 inode 已用完。在我的计算机上,我的根分区上已使用了 7.3G,但只使用了 320,000 个 inode,因此您可能在某个地方有很多非常小的文件堵塞了系统。
有关 where 的讨论,请参见Stack Exchange - 查找 inode 的使用位置我将尝试从该页面执行以下操作:
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
需要以 root 身份运行 du 命令,这样我们才能找到普通用户可能无法读取的文件夹中的文件。 du /
给出根目录的磁盘使用情况/
; --inodes
告诉它列出 inode 使用情况,-S
仅列出目录本身中的文件而不列出子目录中的文件,并且-x
不要跨越文件系统边界(因为您的问题肯定是在/
而不是 ,例如/scratch
)。然后我们将该命令的输出通过管道传输到 以sort
查找最严重的违规者;-r
反转排序使最大的在顶部,并按-h
数字顺序排序而不是按字母顺序排序。最后,head -n 50
只输出前 50 行(即最严重的 50 名违规者)。
这里是对更复杂命令的解释。 sudo
需要以 root 身份运行 find 命令,这样我们才能在普通用户可能无法读取的文件夹中找到文件。 find /
给出根目录下所有文件的列表/
;-xdev
告诉find
不要跨越文件系统边界(因为您的问题肯定是 on/
而不是 on,例如/scratch
);-printf '%h\0'
打印以零字节结尾的目录名。然后我们将该命令的输出通过管道传输到sort -z
,然后uniq -cz
计算每个目录被打印了多少次(即每个目录中有多少个文件);因为需要排序列表,sort
所以这里是需要的。然后我们排序以找出最严重的违规者;反转排序使最大的在顶部,并按数字顺序排序而不是按字母顺序排序。 用新行替换零字节。最后,只输出前 50 行(即最严重的 50 个违规者)。uniq
-r
-n
tr '\0' '\n'
head -n 50