我的 XFS 分区上的 inode 已达到上限。关于这个问题有很多疑问。有人建议答案是增加分配给 inode 的最大空间百分比。或者,正如xfs_growfs
手册页中所述:
-m 为文件系统中可分配为 inode 的最大空间百分比指定一个新值。
我试过这个,但我不确定我看到的是什么。当我达到限制时,默认值为 25%。这给了我在 781GB 磁盘映像上 409,600,129 个 inode。
我将其增加到 100%,现在它可以允许我使用 1,566,536,296 个 inode。
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
...
/dev/loop3 1566536040 409600129 1156935911 27% /mnt/tiles
我预计会写入超过 20 亿个条目(大部分是符号链接),因此即使达到 100% 也不够。据我了解,XFS 可以支持更多文件,因此我认为我遗漏了某些内容。
我尝试使用 重新安装-o inode64
,但没有什么变化。(无论如何,此选项应为默认选项)。
$ sudo xfs_growfs -m 100 .
meta-data=/dev/loop3 isize=512 agcount=4, agsize=51200000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1 spinodes=0 rmapbt=0
= reflink=1
data = bsize=4096 blocks=204800000, imaxpct=100
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=100000, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
inode max pct unchanged, skipping
我的驱动器容量是否不够?还是有我不知道的其他配置或限制?为什么 100% 的 inode 分配仅等于 1.5GB?
答案1
虽然你增加了 inode 可以使用的最大空间,但你可能没有足够的空间自由的空间可支持超过 1.5B 个 inode。由于每个 inode 使用大约 512 字节,我估计您有 ~750 GB 的可用空间。
尝试释放一些空间和/或扩展文件系统。
答案2
信不信由你,配置的卷对于你想要完成的任务来说太小了。使用循环冗余校验(你使用的是默认设置)时,XFS 的最小 inode 大小为 512 字节。20 亿个符号链接,每个链接 512b,意味着你需要至少 953 GB 或 1TB(取决于你对十亿的定义)来存储所有这些 inode。
如果您有能力重新格式化该卷,您可以使其更好地适合您的目的。
-i maxpct=90
在 mkfs 过程中将创建一个新的卷,该卷可以使用 90% 的空间作为 inode。它不适合你的硬件,但如果你可以改变可以投入的空间,它将让 xfs 使用几乎所有的空间来跟踪符号链接。-m crc=0 -i size=256
在 mkfs 过程中将禁用 CRC 支持并将 inode 大小减半。此选项将适合您当前的硬件,但代价是无法防范硬件问题。