自由度
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 30830588 22454332 6787120 77% /
none 4 0 4 0% /sys/fs/cgroup
udev 1014124 4 1014120 1% /dev
tmpfs 204996 336 204660 1% /run
none 5120 0 5120 0% /run/lock
none 1024976 0 1024976 0% /run/shm
none 102400 0 102400 0% /run/user
那个77%昨天才60%,几天后就会填满100%。
我已经监视文件大小有一段时间了:
sudo du -sch /*
9.6M /bin
65M /boot
224K /build
4.0K /dev
6.5M /etc
111M /home
0 /initrd.img
0 /initrd.img.old
483M /lib
4.0K /lib64
16K /lost+found
8.0K /media
4.0K /mnt
4.0K /opt
du: cannot access ‘/proc/21705/task/21705/fd/4’: No such file or directory
du: cannot access ‘/proc/21705/task/21705/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/21705/fd/4’: No such file or directory
du: cannot access ‘/proc/21705/fdinfo/4’: No such file or directory
0 /proc
21M /root
336K /run
12M /sbin
8.0K /srv
4.1G /swapfile
0 /sys
4.0K /tmp
1.1G /usr
7.4G /var
0 /vmlinuz
0 /vmlinuz.old
14G total
它每天都给我(或多或少)相同的数字。总共 14G 还不到磁盘大小的一半。其余的都去哪儿了?
我对 Linux 的了解还不是很深入。
是否有可能文件不显示在这里?是否有可能以其他方式分配空间?
答案1
如果磁盘空间出现不可见的增长,那么罪魁祸首可能是已删除的文件。在 Windows 中,如果您尝试删除某个程序打开的文件,则会收到错误。在 Linux 中,该文件将被标记为已删除,但数据将保留,直到应用程序释放。在某些情况下,这可以用作一个干净整洁的方法- 应用程序崩溃不会阻止清理临时文件。
查看已删除但仍使用的文件:
lsof -b 2>/dev/null | grep deleted
您可能删除了大量文件 - 这本身不是问题。但单个删除的文件变大才是问题。
重新启动应该可以解决这个问题,但如果您不想重新启动,请检查所涉及的应用程序(lsof
输出中的第一列)并重新启动或关闭看起来合理的应用程序。
如果你看到类似这样的内容:
zsh 1724 muru txt REG 8,17 771448 1591515 /usr/bin/zsh (deleted)
如果应用程序和删除的文件相同,则可能意味着应用程序已升级。您可以忽略这些占用大量磁盘空间的因素(但您仍应重新启动程序,以便应用错误修复)。
中的文件/dev/shm
是共享内存对象,不会占用太多磁盘空间(我认为最多占用一个 inode 号)。它们也可以安全地忽略。命名的文件vteXXXXXX
是来自基于 VTE 的终端仿真器(如 GNOME Terminal、Terminator 等)的日志文件。这些可以很大,如果你打开了终端窗口很多(我的意思是很多)正在输出的内容。
答案2
补充一下 muru 的精彩回答:
- df 显示磁盘大小,
- du 显示文件内容的总大小。
也许您在 du 中看不到的是许多小文件的出现......(查看最后一列,df -i
看看 inode(即文件)的数量是否也随着时间的推移而增加很多)
如果你碰巧有 1'000'000(1 百万)个 1 字节的小文件,du
那么总共将算作 1'000'000 字节,假设为 1Mb(...纯粹主义者,请不要畏缩)
但在磁盘上,每个文件由两部分组成:
- 1 个 inode(指向文件的数据),该 inode 本身可以是 16kb(!),
- 并且每个文件的数据(=文件的内容)都放在磁盘块上,并且这些块不能包含多个文件的数据(通常......),因此您的 1 字节数据将占用至少 1 个块
因此,一百万个 1 字节文件将占用1'000'000'000 * size_of_a_block
数据的总空间,加上1'000'000'000 * size_of_an_inode
inode 的大小......一百万个“1 字节”文件可能会占用几 GB 的磁盘使用量。
如果您有 1024 字节的块和另外 256 字节的 inode 大小,您的 1'000'000 个文件将被报告为大约 1Mb du
,但在磁盘上将计为大约 1.25Gb(如所见df
)!(或者甚至是 2Gb,如果每个 inode 也必须位于 1 个专用磁盘块上...我不知道是否是这种情况)
答案3
如果/dev/vda1
已满,则可能是由 Jenkins 或 Docker(或等)引起的,您可能需要使用lsof
命令来清理日志并设置其大小。