使用 io.Copy() 复制稀疏文件时,它们经常会膨胀目的地的规模急剧扩大。
io.Copy() 传输原始字节,这掩盖了稀疏文件中存在的漏洞——实际上没有数据驻留的空间。此信息无法通过标准系统调用(如 read(2))访问。因此,io.Copy() 无法保持文件的稀疏性。
为了解决这个问题,我们需要使用系统调用包和手动处理进行更深入的研究。 lseek(2) 系统调用,具有特殊的 SEEK_HOLE 和 SEEK_DATA 值,可用于操作文件中的空洞。
如果您想在传输过程中保持文件的稀疏性转移之后,情况就更加复杂了。 Fallocate(2) 可用于尝试在支持的文件系统上创建漏洞。但是,某些文件系统本质上缺乏漏洞支持,例如 FAT 系列。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3