Samba

samba 是否需要獲取整個文件以確定其大小?

  • February 12, 2019

給定以下配置:

  • 帶有 samba 版本 4.7.6-ubuntu 的伺服器
  • 客戶端使用掛載一個 samba 共享mount -t cifs

如果du -h /shared/filename在客戶端執行命令,客戶端是否需要從伺服器獲取整個文件以確定其文件大小?怎麼樣du --apparent-size?一個簡單的ls -lR操作呢?

據我所知 du 使用 stat 呼叫並檢索文件元數據以提供文件大小。它實際上並不檢查文件長度,除非您使用該-c標誌,否則它實際上會計算字節數。

因此它不應該獲取文件。

ls執行相同的統計呼叫。

du --apparent-size應該在檢查稀疏區域等時傳輸整個文件。

這樣的操作肯定不會讀取文件。

兩者duls僅對由 stat() 呼叫的變體檢索到的文件元數據進行操作(實際上是最近ls使用lstat()while duuses fstatat())。du傳遞給or的參數無關緊要ls。這些工具永遠不會處理實際的文件數據。

我不知道讀取實際文件以檢索此元數據的任何文件系統(在涉及帶有 fuse 的深奧文件系統實現時可能會有例外)。

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