Server Message Block文件共享已經(jīng)存在了很長(zhǎng)一段時(shí)間,一般來(lái)說(shuō)是穩(wěn)定和可靠的。但是一些管理員發(fā)現(xiàn)如果從Windows 7或Windows 8客戶端向Windows Server文件共享傳輸大文件的時(shí)候會(huì)出現(xiàn)一些古怪的問(wèn)題。
解決文件復(fù)制錯(cuò)誤的第一步是識(shí)別哪些行為是本來(lái)設(shè)計(jì)之初就有的,哪些行為代表出現(xiàn)了問(wèn)題。在Windows 7中,通常來(lái)說(shuō)區(qū)分正常文件復(fù)制行為和有問(wèn)題行為非常簡(jiǎn)單。不過(guò)基于Windows 8有緩存進(jìn)程工作的方式,有的時(shí)候看起來(lái)是問(wèn)題的實(shí)際上卻沒(méi)有任何問(wèn)題。
當(dāng)使用Windows 8來(lái)拷貝一個(gè)文件到遠(yuǎn)程文件共享系統(tǒng)的時(shí)候,會(huì)用到內(nèi)存緩存機(jī)制。它會(huì)將文件的一部分寫入內(nèi)存中,然后將它拷貝到文件共享系統(tǒng)。傳輸小文件的時(shí)候,這種機(jī)制可以讓傳輸?shù)乃俣茸兊梅浅?欤莻鬏敶笪募臅r(shí)候,文件傳輸進(jìn)程在開(kāi)始的時(shí)候非???,但是到后來(lái)就緩慢的進(jìn)行了(如圖1所示)。
圖1. 在Windows 8傳輸大文件到網(wǎng)絡(luò)文件共享時(shí),文件傳輸進(jìn)程在開(kāi)始的時(shí)候非???,然后速度會(huì)明顯下降
如果傳輸?shù)奈募皇欠浅5拇螅敲磮D1中顯示的這種現(xiàn)象會(huì)一直持續(xù)到拷貝結(jié)束為止。如果是更大的文件——或者使用的是很小緩存的計(jì)算機(jī)——的話,復(fù)制的過(guò)程會(huì)出現(xiàn)抖動(dòng)。一大塊的數(shù)據(jù)會(huì)被復(fù)制,然后會(huì)在一段時(shí)間內(nèi)沒(méi)有任何動(dòng)靜。在這段減速的過(guò)程中,操作系統(tǒng)會(huì)清空緩存然后將新的內(nèi)容注入內(nèi)存中去(如圖2所示)。
圖2. 在有些時(shí)候,文件復(fù)制過(guò)程中速度會(huì)發(fā)生變化
圖1和圖2中的這些情況都沒(méi)有表明任何問(wèn)題。因?yàn)檫@是在Windows 8.1中正常的行為。但是,有的時(shí)候文件復(fù)制過(guò)程中出現(xiàn)了超時(shí),導(dǎo)致錯(cuò)誤信息出現(xiàn)(如圖3所示)。
圖3. 有的時(shí)候,有效期超時(shí)也會(huì)導(dǎo)致復(fù)制出錯(cuò)
這個(gè)問(wèn)題只會(huì)出現(xiàn)在拷貝非常大的文件(10GB甚至更大)的時(shí)候出現(xiàn)。在圖3中出現(xiàn)的錯(cuò)誤代碼是"Error 0x80070079: The semaphore timeout period has expired."。這樣籠統(tǒng)的報(bào)錯(cuò)信息很難診斷問(wèn)題所在。這種錯(cuò)誤可能出現(xiàn)在Windows 7、Windows 8和其他Windows版本。這個(gè)問(wèn)題可能是因?yàn)閃indows桌面、Windows Server或者連接它們之間的網(wǎng)絡(luò)導(dǎo)致的。
檢查服務(wù)器日志
從檢查服務(wù)器的事件日志來(lái)開(kāi)始排錯(cuò)吧。雖然報(bào)錯(cuò)信息可能不會(huì)在日志中產(chǎn)生一個(gè)事件,但是你有可能可以從中找到一些關(guān)于導(dǎo)致超時(shí)的線索。
然后,檢查一下是服務(wù)器還是終端導(dǎo)致的問(wèn)題。盡管Performance Monitor可以幫到你,但主觀的測(cè)試也可以是很有效的。開(kāi)始傳輸一個(gè)可能會(huì)導(dǎo)致錯(cuò)誤的文件,然后測(cè)試服務(wù)器和客戶端的響應(yīng)能力。比如你能否在客戶端上播放視頻?你能否在復(fù)制過(guò)程中,用另一臺(tái)客戶端向這臺(tái)服務(wù)器寫入文件?在大多數(shù)的情況下,你可能會(huì)發(fā)現(xiàn)客戶端持續(xù)響應(yīng),但是服務(wù)器的性能在顯著地下降。
使用PowerShell來(lái)進(jìn)行進(jìn)一步診斷
如果你將問(wèn)題定位到了服務(wù)器端后,你還需要找到導(dǎo)致這個(gè)問(wèn)題的真正原因。問(wèn)題有很大的可能性是因?yàn)榇鎯?chǔ)設(shè)備的瓶頸或者網(wǎng)絡(luò)的瓶頸。這些瓶頸可能是因?yàn)樵O(shè)計(jì)的缺陷或者設(shè)備健康問(wèn)題。在你的文件服務(wù)器上執(zhí)行以下兩個(gè)PowerShell命令吧。
Get-PhysicalDisk
Get-PhysicalDisk | Get-StorageReliabilityCounter | Select-Object ReadErrorsTotal, WriteErrorsTotal, Temperature
這些命令會(huì)顯示你服務(wù)器上的磁盤是否是健康的狀態(tài),以及是否正在發(fā)生任何讀寫錯(cuò)誤。有的時(shí)候文件拷貝超時(shí)錯(cuò)誤的出現(xiàn)是因?yàn)橛幸粔K不健康的磁盤,它不能跟上I/O請(qǐng)求的速度。
檢查服務(wù)器使用的物理網(wǎng)卡狀態(tài)也是一個(gè)好的方法,特別如果文件服務(wù)器是一臺(tái)虛擬機(jī)的話。想象一下一臺(tái)只有單網(wǎng)卡的宿主機(jī)如果使用了它所有的帶寬這種情況。虛擬化相關(guān)的操作,例如實(shí)時(shí)遷移和同步操作都可以占用用戶的帶寬并且導(dǎo)致文件復(fù)制操作超時(shí)。
如果你不能馬上解決文件共享錯(cuò)誤的問(wèn)題,那么你可能需要用到專業(yè)的文件拷貝工具來(lái)作為短期內(nèi)的解決方案,例如使用Robocopy來(lái)替代操作系統(tǒng)自帶的拷貝功能。