使用io.Copy() 讓稀疏檔案膨脹
使用io.Copy() 複製檔案時,大型稀疏檔案往往會不成比例地膨脹在他們的目的地。此行為源自於 io.Copy() 對原始位元組的處理,它缺乏傳達檔案漏洞訊息的方法。
處理漏洞
管理漏洞,您必須深入研究系統呼叫套件並修改 lseek(2) 的 SEEK_HOLE 和 SEEK_DATA 值。不幸的是,這些值不存在於標準系統呼叫套件或其對應的 golang.org/x/sys 中。
解決方案
要解決此問題,請按照以下步驟操作:
例如,在Linux 上,您可以使用:
// +build linux const ( SEEK_DATA = 3 SEEK_HOLE = 4 )
讀取和傳輸稀疏檔案
偵測資料區域並傳輸稀疏檔案
偵測資料區域並在讀取稀疏檔案時從中讀取。為了以完整的稀疏性傳輸文件,該過程更加複雜,並且需要特定於平台的考慮。
Linux 特定方法
在 Linux 上,使用 fallocate(2) 用FALLOC_FL_PUNCH_HOLE | FALLOC_FL_PUNCH_HOLE | FALLOC_FL_PUNCH_HOLE | FALLOC_FL_PUNCH_HOLE | FALLOC_FL_PUNCH_HOLE |FALLOC_FL_PUNCH_HOLE | FALLOCZE_KE_EP_FL.如果失敗,鏟起歸零的塊來覆蓋洞。
以上是如何在 Go 中高效複製稀疏檔案而不膨脹?的詳細內容。更多資訊請關注PHP中文網其他相關文章!