Samba
samba 是否需要獲取整個文件以確定其大小?
給定以下配置:
- 帶有 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
應該在檢查稀疏區域等時傳輸整個文件。
這樣的操作肯定不會讀取文件。
兩者
du
和ls
僅對由 stat() 呼叫的變體檢索到的文件元數據進行操作(實際上是最近ls
使用lstat()
whiledu
usesfstatat()
)。du
傳遞給or的參數無關緊要ls
。這些工具永遠不會處理實際的文件數據。我不知道讀取實際文件以檢索此元數據的任何文件系統(在涉及帶有 fuse 的深奧文件系統實現時可能會有例外)。