提及備份數據的重要性,恐怕只有遭受過數據損失的人才會有深入的感覺。
bash
那是一種切膚之痛,多少年的工做成果都灰飛煙滅。ide
因此按期備份數據是絕對必要的,最簡單的方法就是手動拷貝,這在數據量少的時候有效,但若是數據量很大,目錄層次又不少就很麻煩了,由於你要自行判斷哪些文件是最新的文件,再也不重複拷貝未變化的文件。工具
這裏推薦一款工具軟件:FastCopy,正如其名,它能快速地拷貝文件,但咱們利用的是它的另外一個功能:同步,僅僅把上次同步以來更改過的文件,或者新建立的文件拷貝到移動介質,未變化的文件再也不重複拷貝,這就實現了增量備份。spa
fastcopy有圖形界面,指定須要同步的源和目的磁盤,選擇sync,點擊Execute,就開始增量備份了:操作系統
人工操做當然能夠,但若是常常作備份仍是嫌麻煩,並且備份過程自己就有風險,由於每次都要選擇源和目的磁盤,萬一選錯了,因爲目的磁盤沒有源盤文件,那就不是增量備份,而是從零開始的完整備份了,會耗費大量時間,並且以前備份的數據會被清空。視頻
爲此我寫了一個批處理,能自動化備份數據,而且能適應盤符的變化,其原理以下:blog
PC本地有3個盤符:D、E、F,移動硬盤的盤符是G,每一個盤符的卷標如上,編寫批處理把PC本地磁盤的數據備份到移動硬盤。token
在固定的盤符之間對拷是不行的,由於可能發生變化,如上圖,移動硬盤是G盤,若是在這以前插入U盤佔用了G,隨後插入的移動硬盤就會變爲H,批處理要可以感知這種變化,得到正確的源盤符和目標盤符。圖片
感知的關鍵是」卷標「,盤符雖然會變化,但卷標不會!批處理經過卷標找到變化以後的盤符,就能找到正確的源和目的磁盤,舉例就是:input
源盤卷標是」視頻「,盤符是D;目的磁盤卷標是」移動硬盤「,盤符是G,備份方向是D→G
源盤卷標是」視頻「,盤符是K;目的磁盤卷標是」移動硬盤「,盤符是H,備份方向是K→H
雖然盤符發生了變化,但仍然達到了目的:把卷標爲」視頻「的磁盤裏的數據備份到了移動硬盤。
批處理附文末,本例是把3個源盤(卷標分別是視頻、照片、數據,備份)備份到目標磁盤(卷標是移動磁盤),根據你的實際狀況修改語句。
數據備份的一些注意事項。
數據必定要」離線備份「,也就是不能本機備份到本機,而要備份到獨立於PC的移動存儲設備上,並且移動存儲設備要是機械硬盤,不能是U盤或者SSD(固態硬盤)。
由於U盤/SSD使用NAND閃存保存數據,這種存儲器是有數據保質期的,過了保質期數據就會」揮發「,隨着製程的提升,存儲密度也愈來愈高,保質期也愈來愈短,目前普遍使用的TLC閃存的保質期不到一年,理論上說,一年之後的SSD不必定能讀出原始數據。
你可能會問,如今SSD的應用愈來愈普遍,大量PC已經內置了SSD,難道它們的數據都不能保存超過一年?非也,SSD廠商爲了不數據揮發,在固件裏寫了搬運程序,當判斷出某塊數據快到保質期,馬上將其拷貝到另外一處,數據從新寫入,保質期也就從頭開始算了。
很明顯,SSD須要通電才能完成搬運,PC是長時間通電的設備,因此SSD有時間搬運數據,但U盤/移動硬盤是長時間斷電放置的,沒有時間搬運數據。
因而可知,若是筆記本/臺式機內置了SSD,長時間斷電是有數據丟失的風險的,建議把數據拷貝出來,或者按期開機讓SSD搬運數據。
最後說說數據備份設備的選擇,高大上的選擇固然是NAS,有好幾個磁盤作冗餘,可是價格不菲,若是對備份沒有很高的要求,能夠購買臺式機機械硬盤+USB 3.0轉SATA線,能夠實現廉價的備份,必定要是 USB 3.0或更高版本,不然備份速度太慢了。
::本批處理的目的是把PC硬盤裏的數據自動同步(備份)到外置的機械硬盤。 ::把fastcopy放入系統路徑,或者本批處理的目錄下。 ::由於PC硬盤的」卷標「和」盤符「不是固定的對應關係(好比插入U盤以後),因此不能在2個固定的盤符之間對拷。 ::爲此,先得到指定卷標的盤符,而後把該盤符下的數據用fastcopy同步到外置硬盤。 ::有容錯機制,若是發現任何一個這裏指定的卷標找不到盤符,會顯示報錯信息並退出。 ::插入硬盤之後等待一會,讓操做系統認出盤符以後再備份。 ::須要備份的3個源盤的卷標分別是:視頻、照片、數據 ::備份到的設備:移動硬盤的卷標是「移動硬盤」 @echo off ::=============得到卷標爲「視頻」的盤符========== cls set flag=0 set input= for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do ( for /f "tokens=4" %%j in ('vol %%i: 2^>nul') do if /i "%%j"=="視頻" call :s2 %%i&set flag=1 ) if %flag% neq 1 echo 沒有卷標爲「視頻」的盤符&pause goto :eof :s2 set sp1=%1 echo. echo 卷標爲「視頻」的盤符是:%sp1% echo. ::=============得到卷標爲「照片」的盤符========== set flag=0 set input= for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do ( for /f "tokens=4" %%j in ('vol %%i: 2^>nul') do if /i "%%j"=="照片" call :s4 %%i&set flag=1 ) if %flag% neq 1 echo 沒有卷標爲「照片」的盤符&pause goto :eof :s4 set ph=%1 echo. echo 卷標爲「照片」的盤符是:%ph% echo. ::=============得到卷標爲「數據」的盤符========== set flag=0 set input= for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do ( for /f "tokens=4" %%j in ('vol %%i: 2^>nul') do if /i "%%j"=="數據" call :s5 %%i&set flag=1 ) if %flag% neq 1 echo 沒有卷標爲「數據」的盤符&pause goto :eof :s5 set xbf=%1 echo. echo 卷標爲「數據」的盤符是:%xbf% echo. ::=============得到卷標爲「移動硬盤」的盤符,這是備份用的移動硬盤========== set flag=0 set input= for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do ( for /f "tokens=4" %%j in ('vol %%i: 2^>nul') do if /i "%%j"=="移動硬盤" call :s1 %%i&set flag=1 ) if %flag% neq 1 echo 沒有卷標爲「移動硬盤」的盤符&pause goto :eof :s1 set lxbf=%1 echo. echo 卷標爲「移動硬盤」的盤符是:%lxbf% echo. ::=============將數據備份到移動硬盤========== ::變量:sp1,ph,xbf,lxbf echo 正在將數據同步到移動硬盤 %lxbf%:(修改時間最新者,以及新建立的文件) echo 同步: 視頻 %sp1%:\ 到 移動硬盤 %lxbf%: FastCopy.exe /cmd=sync /force_close %sp1%:\* /to=%lxbf%:\視頻 echo 同步: 照片 %ph%:\ 到 移動硬盤 %lxbf%: FastCopy.exe /cmd=sync /force_close %ph%:\* /to=%lxbf%:\照片 echo 同步: 數據 %xbf%:\ 到 移動硬盤 %lxbf%: FastCopy.exe /cmd=sync /force_close %xbf%:\* /to=%lxbf%:\數據 echo. echo. echo 備份完畢,請檢查是否有報錯信息,按任意鍵退出。 echo. pause :eof