![損壞的檔案複製 Windows 2012 -> VPN -> Windows 2012](https://rvso.com/image/617824/%E6%90%8D%E5%A3%9E%E7%9A%84%E6%AA%94%E6%A1%88%E8%A4%87%E8%A3%BD%20Windows%202012%20-%3E%20VPN%20-%3E%20Windows%202012.png)
我在透過 Cisco ASA5505 VPN 將檔案從一台 Windows 2012 伺服器複製到另一台伺服器時遇到問題。我對 Win2008 伺服器進行了類似的設置,但從未發現過問題(此端相同的 ASA5505)
對於大約每 20 個大約 20MB 或更多的檔案(每天一次或兩次)中的大約 1 個,我傾向於發生資料損壞。
損壞往往以大約 5 個損壞區域的形式出現(有時全部位於檔案的 1MB 部分內),每個區域大約 12 個位元組長,整個檔案中總共有大約 60 個損壞位元組。文件大小不會改變。
我已經在本機 SQLServer log-ship-copy 和 robocopy 中看到了這一點。
與此相關的是,當我使用 Windows 拖放複製 40GB 檔案時,複製通常會在 15-30GB 後失敗(或複製有一些損壞)。當我複製 Win2012 -> VPN -> SBS2011,然後複製 SBS2011 -> Win2012 時,似乎不會發生這種情況。
ASA5505 上似乎未啟用壓縮。標準 NetMonitor SMBErrors 追蹤中未發現任何錯誤。
答案1
這是 VPN(或網路 - TBC)問題,而不是 Windows 問題。
我是這樣找到它的。
在 VPN 兩端執行 Microsoft 網路監視器後,我成功捕獲了與損壞檔案內容相關的 TCP/IP 封包。在遠端擷取的資料包沒有損壞。目的地的資料包已損壞。
為了找到壞的網路封包,我用十六進位轉儲了檔案的好版本和壞版本,然後使用 KDiff3 來比較十六進位。然後,我在 NetMonitor 擷取中搜尋檔案損壞之前發生的 4 位元組十六進位模式。我找不到這個模式,所以我在損壞後嘗試了另一種模式,找到了它,然後向後通過位元組到有問題的區塊(第一個模式跨越了資料包邊界)。