0

我正在考虑对 CIFS/SMB 进行写入优化,以抑制重复块的写入。例如,我从远程共享读取文件并修改文件末尾附近的部分。当我保存文件时,我只想将文件中实际更改的部分的写请求发送回远程端。所以基本上,抑制所有写入,直到遇到非重复写入为止。届时,抑制将被禁用,并且将照常允许写入。问题是我找不到任何文档 MS-SMB/MS-SMB2/MS-CIFS 或其他表明这是否是有效的做法。有谁知道这是否有效?

4

3 回答 3

0

CIFS 协议确实允许应用程序写回文件的特定部分。这由 SMB WriteAndX 数据包中的参数 DataOffset 和 DataLength 控制。

可以在此处找到相同的文档:http: //msdn.microsoft.com/en-us/library/ee441954.aspx

客户端可以使用这些字段将特定长度的数据写入文件中的特定偏移量。

该协议的更新版本中也存在类似的支持......

于 2013-02-06T12:58:02.590 回答
0

深入研究 Linux 内核的源代码,有关于 CIFS 的文档——包括源代码和文本。例如http://www.mjmwired.net/kernel/Documentation/filesystems/cifs.txt

如果您想研究例如 CIFS 协议的行为,您可以使用 unix 命令“dd”对其进行测试。通过 CIFS 挂载任何远程文件系统,例如到/media/remote. 切换到这个文件夹

cd /媒体/远程
现在创建一个包含一些随机内容的文件(例如来自内核的随机池):
dd if=/dev/urandom of=test.bin bs=4M count=5
在此示例中,您应该看到大约 20MB 的流量。然后在您机器上的某个位置创建另一个较小的文件,例如您的主文件夹:
dd if=/dev/urandom of=~/test_chunk.bin bs=4M count=1
有趣的是,如果您尝试将块写入远程测试文件的特定位置,会发生什么:
dd if=~/test_chunk.bin of=test.bin bs=4M count=1 seek=3 conv=notrunc
实际上,这应该只更改目标文件中 5 个块中的第 4 个块。我想你可以调整块大小......我用 4 MB 块做了这个。但这应该有助于了解网络上发生的事情。

于 2012-12-06T10:53:38.130 回答
0

SMB 协议有这样的写优化。它适用于附加 cifs 操作。其中协议读取文件的 EOF 并开始写入偏移量设置为 EOF 值和长度的新数据作为附加数据字节。

于 2018-10-29T03:35:30.010 回答