场景
假设在 2 GB 的文件系统中有一个 1GB 的稀疏文件,并且该稀疏文件仅占用 0.1 GB 的空间。
问题
我猜你会有 1.9 GB 的磁盘空间来存储数据,对吗?
如果磁盘中实际上有 1.9 GB 的可用空间,那么如果我将 1.5 GB 存储在稀疏文件之外,只剩下 0.4 GB 的可用空间(稀疏文件之外的 1.5 GB + 稀疏文件的 0.1 GB)会怎么样?这是否意味着即使我看到稀疏文件为 1GB,我也只能在其中存储总共 0.5 GB(正在使用的 0.1 GB + 可用的 0.4 GB)?
在这种情况下操作系统会做什么?
思考
如果上述情况属实,那么使用稀疏文件听起来不错,因为它可以节省空间,但是假设我将此文件用作存储点(循环设备),并且我想依靠该空间,我想使用稀疏文件不是一个好主意,因为如果我需要整个 1 GB,我将无法使用它。我最好使用非稀疏文件。
是的。
如果您尝试使用超过可用空间,它会报告没有剩余空间:
您必须对此进行风险评估并自行决定。这是一种权衡。如果您想绝对确定自己有足够的空间,那么您必须提前预留空间,而不是使用稀疏文件。
我喜欢 @muru 的回答。玩了一会儿,我发现了一些有趣的发现,但太长了,无法发表评论。以下是我的看法。
使用 size 和 mkfs 进行测试
mkfs 创建稀疏文件
显然,mkfs 默认将 100MB.bin 文件设为稀疏文件
使用 nodiscard 的 mkfs
但显然使用 nodiscard 不会将文件转换为稀疏文件。但它仍然减少了 100MB.bin 的大小。
包含额外信息的整个示例
与 @muku 的答案相同的例子,但一路检查大小。还使用 fallocate 来打孔,使我们所做的更加稀疏。