我对它的理解是它的“按需零填充”程度。这意味着文件系统不会向文件分配写入数据,但它只是为我们提供 ZFOD 范围,当应用程序尝试读/写数据时,它只是填充数据零,然后执行读/写 [来源]。
我的问题是:
- 我的上述理解正确吗?
- 如果它只是不分配数据,是否意味着它是一个漏洞?
答案1
您必须考虑两件事:
- 是否为数据分配了空间,以及
- 是否有实际写入的数据。
如果文件没有数据并且没有为其分配空间,则在尝试读取该文件时会收到文件结束指示。如果写入,文件系统必须在写入时分配空间:换句话说,如果没有可用磁盘空间可供分配,则写入操作可能会失败并出现 ENOSPC 错误。
稀疏文件中的漏洞没有为其分配空间,如果您尝试读取文件的该部分,您将得到全为零的数据。如果写入文件的该部分,文件系统必须在写入操作时再次为其分配空间,因此如果磁盘已满,写入操作可能会失败并出现 ENOSPC 错误。
ZFOD 盘区名义上已分配给文件,但尚未向其中写入数据。如果你读了它,你会得到全零;如果写入,则空间已分配,因此不存在 ENOSPC 错误情况的风险。
最后,还有一个正常的数据范围:如果您读取它,您将返回实际数据,如果您写入它,您将用新数据替换现有数据。
换句话说,ZFOD 范围是针对应用程序可能分配大文件、不会立即使用所有文件、并且仍然需要保证空间在需要时可用的情况的优化。对于 SSD 存储,从块中擦除现有数据是最慢的操作,因此 ZFOD 扩展区允许系统通过最初将其分配为 ZFOD 扩展区来快速创建一个大数据区:然后文件系统可以按需进行实际的擦除和填充零实际使用的每个块。
如果 SSD 存储用于存储虚拟机磁盘映像之类的内容,ZFOD 扩展可以帮助最大限度地减少实际磁盘块需要擦除的次数,从而提高 SSD 的使用寿命。