2012/05/04

利用陰影複製功能寫批次檔備份檔案

(using VSS backup locked files with diskshadow utility)

前言:
本文適用: windows 2008 r2


有陰影複製功能的 windows 是從 windows 2003 開始

windows 2003 需使用 volDist.exe ,這個檔案是在 windows 2003 resource kit 裡面的 rktools.exe

說明:
dos 時代起我就習慣用批次檔去備檔案,這一招一直用到 windows 2008 的現在
雖然 windows 2003 起就有支援陰影複製(以下簡稱vss),但是我一直以為是要用GUI操作,所以就只是啟用vss,需要的時候再用GUI把檔案抓出來,所以不能用批次檔去呼叫

最近有個case,一來需要自動把檔案從vss取出,二來取出之後要放到某個位置

這種事偶一為之就算了,變成例行工作可不是IT人應做的事;既然是例行工作當然就是交給電腦去做,我們只要偶爾檢查LOG有沒正常就好 :P

範例:
diskshadow -s vmbackups.dsh


#vmbackups.dsh
#Make shadows persistent
SET CONTEXT PERSISTENT
SET VERBOSE ON
#Cab location for process
SET METADATA d:\temp\Backup.cab
BEGIN BACKUP
#Alias volume with alias
ADD VOLUME D: ALIAS DVOL
#Create Snapshot
CREATE
#Expose the volume and run command file then unexpose
EXPOSE %DVOL% X:
EXEC D:\Scripts\copycommands.cmd
UNEXPOSE X:
END BACKUP
#Delete the shadow copy
DELETE SHADOWS SET %VSS_SHADOW_SET%

呼叫外部批次檔copycommands.cmd執行robocopy 時,robocopy會噴出 error code #1 ,這會造成diskshadow執行中斷
查詢 robocopy 錯誤碼 #1 ,"One of more files were copied successfully."
為了這種事robocopy 中斷 diskshadow 的程序... 哇咧哩@#$@# (以下消音處理)

解法:
在 robocopy 的參數加上這一個就可以解決

robocopy /? |find /i "np"
                /NP :: 無進度 - 不顯示複製百分比。


測試:
  • 將檔案開分享,然後從外部電腦開啟檔案,造成檔案鎖定
  • 執行 diskshadow,呼叫備份批次檔
  • 檢查log及備份目的地
  • 確認無異常
  • 備份檔案存在且日期一致,鎖定的檔案也有複製過去
  • 測試成功
參考資料:
http://technet.microsoft.com/en-us/library/cc772172(v=ws.10).aspx
http://blogs.technet.com/b/deploymentguys/archive/2008/06/16/robocopy-exit-codes.aspx

沒有留言: