Nfs

NFS 和 SMB 是否支持稀疏文件?

  • October 27, 2015

這個問題以前在堆棧溢出中被問過,但是那裡的好人建議我在這裡嘗試社區。

我正在研究有關各種文件系統的稀疏文件,並試圖找到一些具體的東西來說明網路文件系統 (NFS) 或伺服器消息塊 (SMB) 支持稀疏文件。

我知道 SMB 在 Windows 中被廣泛使用,根據這個條目,即使底層文件系統不支持,SMB 伺服器也可以支持稀疏文件。但是,如果我是對的,不支持稀疏文件的文件系統只會用零填充“漏洞”,這可能會導致性能問題。

關於 NFS,我無法找到有關使用 NFS 支持稀疏文件的任何資訊。

因此,我的問題是,

NFS 和 SMB 是否支持稀疏文件?

**NFS:部分支持稀疏文件。**基本上,它支持創建稀疏文件,但是在讀取時,文件會擴展為包含零。這意味著,雖然您可以通過 NFS 創建一個稀疏文件,但在讀回同一個文件時,傳輸中的網路數據將包括在原始文件中找到的任何零。一個簡單的測試表明該行為:

cd /mnt/nfs
truncate test.img -s 1G
ls -lh test.img

-rw-r–r–。1根根1.0G Oct 26 11:29 test.img

du -hs test.img

0 測試.img

如您所見,test.img 文件的磁碟大小為 0 字節。但是,使用dd if=test.img of=/dev/null bs=1M iflag=direct顯示回讀它

1024+0 條記錄
1024+0 條記錄
1073741824 字節 (1.1 GB) 已複製,10.2269 秒,105 MB/秒

很明顯,在傳輸稀疏文件時,它被擴展為包括全零。

NFSv4.2 將通過包括稀疏文件網路傳輸的特殊處理來擴展。換句話說,使用 NFSv4.2dd幾乎可以立即完成上述操作。

SMB:它與 NFS 具有相同的行為,至少在我的測試環境中,使用帶有 CIFS v1 的 Samba v3.6.x 伺服器和使用 mount.cifs 的 Linux 客戶端。也許在 Windows 下它的行為不同……

引用自:https://serverfault.com/questions/731632