2010年7月22日 星期四

Arsee Wits:複製移動檔案時,系統停滯不動的解決方案

author:arsee


  由於在評測不同作業系統的功能,於是使用虛擬機VirtualBox做測試。隨便一個windows系統裝完都1.4 GiB以上,windows 7 評估版裝完更要5.1 GiB,為了要省事以避免重裝系統,所以一定要先備份,這時候問題就來了!竟然,在備份虛擬系統檔案時,整個系統沒反應!這是什麼原因呢?且聽我道來......


  原來,作者的電腦USB規格是v1.1 管道流量很小,所以在Windows作業系統設計不良的狀況下,凡是使用系統預帶功能去移動/複製一個對硬體效能而言是非常大的檔案,而當資料經過這個USB I/O出入時,就會產生「系統停滯」的狀況。實際上作業系統是還在工作,只是一直佔用資源在傳送資料而不把執行權限放手而已(或太忙而來不及處理GUI,或GUI上所傳來停止的命令),所以,這使其它的程式作業必須等這個檔案複製完畢之後,才能再取得執行權。


  觀察上述這樣的問題,在MS其它系統上幾乎都會發生,尤其在與週邊I/O有關的作業上問題更嚴重。例如要存取A磁碟機或印表機,因為它沒反應,於是整個系統就掛在當下不動不接受插斷,這是說,就算您要把目前的作業工作停止都沒辦法。


  作者猜測為何系統會停滯沒反應的原因,也許是I/O程式的權限太高,再加上系統設計不良,啟動時又不給使用者選擇要「區塊(block)工作」或「串流(stream)工作」,所以預設值就是用區塊工作方式,使得這支I/O程式遇到問題就一直輪詢週邊設備,不但吃太多CPU資源,也佔著執行權不放,而使其它程式無法得到執行機會。


  為了因應這問題,作者就去找具有「斷點續傳」功能的複製軟體來使用,並且找到一款好用的軟體:TeraCopy。它的確幫忙不少,傳送中斷之後,還可以從上次斷點續傳,雖然速度慢了些,但卻不會影響其它同時操作中的作業。


  但很不幸的,因為當時在測試另一支新種瀏覽器程式,不知它在搞什麼,侵犯到系統DEP區域,加上這時候作者同時在清除Registry中的垃圾,大約是掃的太猛了,不知動到那一個組態,於是,糊裡糊塗的就使得這支好用程式失效!最後,它就變成是一個死樣子:「解除安裝正常,重新安裝正常,開啟正常,關閉正常......什麼都正常,但就是複製與移動資料功能不正常」......唉,嘆氣哉~


  因此,作者不得不再去網路上找其它具有「斷點續傳」功能軟體,可惜沒找到適合的,難道,為了這個需求要自己去寫支複製/移動檔案的管理程式嗎?@@a


  正在思惟時,忽然靈機一動!執行程式權限太大,那就給它權限小點就行了!I/O管道太小而資料區塊太大,那就給它串流就行了!於是我就想起下載管理器(download manager)的「串流下載」及「斷點續傳」的功能,就去找出「迅雷」這套免費工具下載,而且還是綠色、繁體、去廣告版 (點按下載)。


  於是我在自己電腦上架一個Web Server,寫一個只有下載項目的網頁(參考圖一),就用下載軟體來把它從USB 外接硬碟下載傳到本地端硬碟,而且所有的行為都符合「不影響其它程式作業」的前提(參考圖二)。在使用時,建議下載「線程數」(執行緒)設定為1或2(依您的硬體效能而定),雖然速度慢,但卻可避免佔用太多的CPU資源,而影響其它的作業,



圖一:只有下載項目的網頁



點按看大圖

圖二:迅雷綠色去廣告繁體版,具有資料串流及斷點續傳功能。下載時迅雷所佔CPU資源,大約在18%~28%之間



歇後語:

  目前這辦法也只能算是「治標」的方法,大約以後還是要自己去寫支具有斷點續傳的檔案複製與移動管理程式,再不然就繼續的在網路上找免費的(一個小功能若要付費,那我寧可自己寫這支程式,寫完之後我再去賣給跟我有同樣困擾的人 ^_^),或自己重裝作業系統後(目前剛好正有在想換作業系統)再使用TeraCopy這支程式,這三件事無論做那一件都是個麻煩......

.