前段时间(我想是在我升级到 16.04 后开始的)我开始收到有关根分区上可用空间不足的通知。首先,我认为这可能是由于升级后 /var/cache 中保留的软件包所致,因此我将文件夹移动到另一个分区并将它们符号链接到原始位置。这很有帮助,但效果不佳。然后我注意到我有相当多的旧内核和相关标头,因此我清理了它们。这给了我大约 1GB 的额外空间,但后来又消失了。这些是我的挂载点及其当前使用情况,如下所示df -h
:
Filesystem Size Used Avail Use% Mounted on
udev 981M 0 981M 0% /dev
tmpfs 200M 19M 181M 10% /run
/dev/sda6 8.0G 8.0G 16M 100% /
/dev/sda7 32G 16G 17G 49% /usr
tmpfs 999M 300K 999M 1% /dev/shm
tmpfs 5.0M 8.0K 5.0M 1% /run/lock
tmpfs 999M 0 999M 0% /sys/fs/cgroup
/dev/sda9 270G 41G 216G 16% /repo
/dev/sda8 99G 91G 2.6G 98% /home
/dev/sda10 504G 162G 317G 34% /mnt/media
cgmfs 100K 0 100K 0% /run/cgmanager/fs
tmpfs 200M 64K 200M 1% /run/user/1000
/dev/sr2 48M 48M 0 100% /mnt/usb-HUAWEI_Mass_Storage-0:0
如您所见/
(/dev/sda6
)实际上已满。运行时sudo du -h -x --max-depth=1 /
我得到:
469M /var
24M /etc
0 /media
13M /bin
54M /boot
326M /lib
198M /opt
6.9M /root
15M /sbin
0 /srv
8.0K /tmp
0 /cdrom
0 /mnt
0 /snap
1.1G /
据我所知,它显示使用的内存远少于 8GB。我从 90 年代开始就在桌面上使用 Linux,但显然我在这里遗漏了一些我无法解释的东西。我如何找出占用空间的是什么/
?
[编辑]:我尝试了这里提出的解决方案:https://serverfault.com/questions/406069/why-are-my-xfs-filesystems-suddenly-assuming-more-space-and-full-of-sparse-file(allocsize=64k 选项),但没有释放空间。
[编辑2]:根据 Andrius 的评论,输出来自xfs_db
:
magicnum = 0x58465342
blocksize = 4096
dblocks = 2096474
rblocks = 0
rextents = 0
uuid = 3a3ee397-d4e5-40f1-b179-94f3c0b566ac
logstart = 1048580
rootino = 128
rbmino = 129
rsumino = 130
rextsize = 1
agblocks = 524119
agcount = 4
rbmblocks = 0
logblocks = 2560
versionnum = 0xb4b4
sectsize = 512
inodesize = 256
inopblock = 16
fname = "u.root\000\000\000\000\000\000"
blocklog = 12
sectlog = 9
inodelog = 8
inopblog = 4
agblklog = 19
rextslog = 0
inprogress = 0
imax_pct = 25
icount = 60800
ifree = 27330
fdblocks = 2970
frextents = 0
uquotino = nic
gquotino = nic
qflags = 0
flags = 0
shared_vn = 0
inoalignmt = 2
unit = 0
width = 0
dirblklog = 0
logsectlog = 0
logsectsize = 0
logsunit = 1
features2 = 0x8
bad_features2 = 0x8
答案1
这非常有趣,但 xfs 在内部保留了有关 xfs 文件系统中文件的元数据,但 du 似乎并没有捕获到太多元数据,而 df 可以。但是 xfs 有自己的 xfs_estimate 命令。df 可以正确显示 xfs 分区上使用的可用空间。我发现,sudo du -h -x --max-depth=0 /path ; sudo xfs_estimate /path
如果普通用户无法看到某些文件(例如默认情况下的 kvm/qemu 虚拟机),则运行 sudo 是必要的,这些文件位于 / 中,确实占用了大量空间。例如,当我在sudo du -h -x --max-depth=0 /path ; sudo xfs_estimate /path
/etc 上运行时,etc 中有许多小配置文件,这显示 /etc 占用了 13 MB 的空间,但 xfs 估计显示它需要一个 20 MB 的分区,这看起来好像你在 du 命令上使用的是 65%,但实际上元数据使用了剩余的空间。所以最后xfs_estimate
可以告诉你很多信息。
答案2
我运行xfs_check
后发现分配的空间比实际使用的空间多。我试了一下,xfs_repair
问题解决了。据我所知,这个问题类似于 FAT 分区有时出现的问题,容易出现“丢失簇”错误。尽管如此,我仍然不知道是什么原因造成的,以及如何预防将来出现类似的问题。
答案3
恐怕您的 XFS 未处于“lazy-counter”模式,其中存在一些错误。因此,请尝试通过命令“xfs_admin -c 1”将您的 XFS 更改为“lazy-counter”模式。