用FastCopy實現低成本的我的數據備份

提及備份數據的重要性,恐怕只有遭受過數據損失的人才會有深入的感覺。
bash

那是一種切膚之痛,多少年的工做成果都灰飛煙滅。ide

因此按期備份數據是絕對必要的,最簡單的方法就是手動拷貝,這在數據量少的時候有效,但若是數據量很大,目錄層次又不少就很麻煩了,由於你要自行判斷哪些文件是最新的文件,再也不重複拷貝未變化的文件。工具

這裏推薦一款工具軟件:FastCopy,正如其名,它能快速地拷貝文件,但咱們利用的是它的另外一個功能:同步,僅僅把上次同步以來更改過的文件,或者新建立的文件拷貝到移動介質,未變化的文件再也不重複拷貝,這就實現了增量備份。spa

fastcopy有圖形界面,指定須要同步的源和目的磁盤,選擇sync,點擊Execute,就開始增量備份了:操作系統

QQ圖片20210305225918.png

人工操做當然能夠,但若是常常作備份仍是嫌麻煩,並且備份過程自己就有風險,由於每次都要選擇源和目的磁盤,萬一選錯了,因爲目的磁盤沒有源盤文件,那就不是增量備份,而是從零開始的完整備份了,會耗費大量時間,並且以前備份的數據會被清空。視頻

爲此我寫了一個批處理,能自動化備份數據,而且能適應盤符的變化,其原理以下:blog

QQ圖片20210305225918.png

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
相關文章
相關標籤/搜索