xfs 似乎比文件所需的磁盘空间多使用 15-30%:
# du
0 .
# dd if=/dev/zero of=test bs=1M count=5k
5120+0 records in
5120+0 records out
5368709120 bytes (5,4 GB) copied, 10,527 s, 510 MB/s
# ls -l
total 8388608
-rw-r--r-- 1 root root 5368709120 Oct 19 16:04 test
# du
8388608 .
它似乎在一定程度上对整个文件系统做到了这一点。当添加小于文件系统大小 1% 的文件时,此文件系统会报告磁盘已满:
# df
/dev/sdb6 40957913088 35624042728 5333870360 87% /xfs-export
是否是在执行 mkxfs 时某些奇特的选项引起的(类似于 ext2 中保留的 5%)?
# uname -a
Linux server 2.6.39-bpo.2-amd64 #1 SMP Tue Jul 26 10:35:23 UTC 2011 x86_64 GNU/Linux
答案1
我强烈怀疑您看到如此奇怪的数字,因为您将环境变量 BLOCKSIZE 设置为 640。BLOCKSIZE 影响 ls、du 和 df 打印的内容。将 BLOCKSIZE 设置为“1024”或“1k”,您应该会看到预期的输出。
答案2
我已经很久没有重现这个问题了。我想我现在明白了:
$ ls -l
total 0
$ dd if=/dev/md0 >> a bs=10000k &
$ ls -l
total 9111552
-rw-r--r-- 1 rt rt 5816320000 Jan 7 23:31 a
它会一直保持这个状态直到dd
完成(或被杀死) - 即使dd
被挂起。之后事情看起来很正常:
$ kill %1; ls -l
total 20120000
-rw-r--r-- 1 rt rt 20602880000 Jan 7 23:33 a
因此,看起来 xfs 似乎正在为文件扩展保留空间。
问题中的内容dd
已完成,但可能还有其他一些打开的文件可以证明保留的合理性。
答案3
XFS 有一个称为动态推测 EOF 预分配的功能。它可以分配更多空间以期望写入更多字节以减少文件碎片。 (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=055388a3188f56676c21e92962fc366ac8b5cb72)