samba 是否需要获取整个文件来确定其大小?

samba 是否需要获取整个文件来确定其大小?

鉴于以下配置:

  • 服务器采用 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()参数无关紧要。这些工具永远不会处理实际的文件数据。duls

我不知道任何文件系统(当涉及到使用 fuse 的深奥文件系统实现时可能会有例外)会读取实际文件来检索这些元数据。

相关内容