簡體   English   中英

CIFS / SMB寫入優化

[英]CIFS/SMB Write Optimization

我正在考慮對CIFS / SMB進行寫優化,以便抑制重復塊的寫入。 例如,我從遠程共享中讀取文件,然后修改文件末尾附近的部分。 保存文件時,我只想將實際已更改的文件部分的寫請求發送回遠程端。 因此,基本上,抑制所有寫入,直到遇到非重復寫入為止。 到那時,抑制將被禁用,並且將照常允許寫入。 問題是我找不到任何文檔MS-SMB / MS-SMB2 / MS-CIFS或其他說明這是否是有效的操作。 有人知道這是否有效嗎?

深入研究Linux內核的源代碼,有關於CIFS的文檔-包括源代碼和文本。 例如http://www.mjmwired.net/kernel/Documentation/filesystems/cifs.txt

如果您想研究例如CIFS協議的行為,則可以使用unix命令“ dd”對其進行測試。 通過CIFS掛載任何遠程文件系統,例如到/media/remote 切換到此文件夾

cd /media/remote
現在創建一個包含一些隨機內容的文件(例如,來自內核的隨機池):
dd if=~/test_chunk.bin of=test.bin bs=4M count=1 seek=3 conv=notrunc
在此示例中,您應該看到大約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塊做到了這一點。 但這應該有助於了解網絡上發生的情況。

CIFS協議確實允許應用程序寫回文件的特定部分。 這由SMB WriteAndX數據包中的參數DataOffset和DataLength控制。

相同的文檔可以在這里找到: http : //msdn.microsoft.com/en-us/library/ee441954.aspx

客戶端可以使用這些字段將特定長度的數據寫入文件中的特定偏移量。

該協議的最新版本中也存在類似的支持...

SMB協議具有這樣的寫優化。 它與append cifs操作一起使用。 協議在其中讀取文件的EOF並開始寫入偏移量設置為EOF值和長度作為追加數據字節的新數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM