使用 io.Copy() 复制稀疏文件时,它们经常会膨胀
io.Copy() 传输原始字节,这掩盖了稀疏文件中存在的漏洞 - 没有数据的空间实际上居住着。此信息无法通过标准系统调用(如 read(2))访问。因此,io.Copy() 无法保持文件的稀疏性。
为了解决这个问题,我们需要使用系统调用包和手动处理进行更深入的研究。 lseek(2) 系统调用,具有特殊的 SEEK_HOLE 和 SEEK_DATA 值,可用于操作文件中的空洞。
如果你想在传输过程中保持文件的稀疏性,情况就更复杂了。 Fallocate(2) 可用于尝试在支持的文件系统上创建漏洞。但是,某些文件系统本质上缺乏漏洞支持,例如 FAT 系列。
以上是## 如何在 Go 中复制稀疏文件而不扩展它们?的详细内容。更多信息请关注PHP中文网其他相关文章!