鉴于以下配置:
- 服务器采用 samba 版本 4.7.6-ubuntu
- 客户端使用以下方式挂载 Samba 共享
mount -t cifs
如果du -h /shared/filename
在客户端执行命令,客户端是否需要从服务器获取整个文件来确定其文件大小? 那又如何呢du --apparent-size
? 那一个简单的ls -lR
操作呢?
答案1
据我所知,du 使用 stat 调用并检索文件元数据来提供文件大小。它实际上并不检查文件长度,除非您使用标志-c
,否则它实际上会计算字节数。
因此它不应该获取该文件。
ls
进行相同的统计调用。
du --apparent-size
应该传输整个文件,因为它会检查稀疏区域等。
答案2
这样的操作肯定会不是读取文件。
du
和都只ls
对通过 stat() 调用变体检索的文件元数据进行操作(实际上最近ls
使用lstat()
而du
使用)。传递给或 的fstatat()
参数无关紧要。这些工具永远不会处理实际的文件数据。du
ls
我不知道任何文件系统(当涉及到使用 fuse 的深奥文件系统实现时可能会有例外)会读取实际文件来检索这些元数据。