2019-12-22

使用7z(7-zip)備份資料:完整備份(FULL Backup) / 差異備份(DIFF Backup)。用7z+工作排程建立你專屬的備份策略。

7z (7-zip) ( https://www.7-zip.org/ )常被用來壓縮檔案 / 解壓縮檔案,是一個免費(free software)並且開放原始碼(open source)的超好用的軟體。
(目前7-zip正式發行的版本:v19.0 2019-02-21)
  1. 7z格式使用LZMA及LZMA2的壓縮方式,可以進行高壓縮比的打包效果。
  2. 可以壓縮跟解壓縮的打包格式,有:7z, XZ, BZIP2, GZIP, TAR, ZIP 及 WIM。
  3. 也提供解壓縮下列的打包格式:AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VMDK, WIM, XAR 及 Z。
  4. 對7z及zip格式的打包,提供AES-256的加密演算。
  5. 提供壓縮內容的檔案瀏覽及管理功能。
  6. 除了可以透過操作介面來提供壓縮及解壓縮的進行,也提供列命列(command line)操作模式。因為有命令列的操作模式,可以讓程式開發人員在程式中輕易地用7z縮縮/解壓縮,也可以將7z指令,以批次檔的方式,用來執行定時備份。
7z安裝後,可以使用滑鼠右鍵呼叫開啟7z的功能視窗:

除了功能視窗,也提供CRC-32, CRC-64, SHA-1, SHA-256的檔案雜湊值計算,這是我很喜歡的一個附加功能。

在 https://gist.github.com/amobiz/d0be531a7c109c785845 可以下載取得 differential-backup-using-7-zip-windows-7z-bak.cmd
這個批次檔可以提供完整備份(FULL BACKUP) 及 差異備份(DIFF BACKUP)
正式使用這個批次檔前,必須稍微調整設定一下。

  1. 第10/11行
    set BAK_DIR=[你要儲存備份檔的目錄,不要包含路徑最後的 \ 字元]
    set SRC_DIR=[你要備份的目錄,不要包含路徑最後的 \ 字元。用空格或逗號區隔不同目錄。如果目錄包含空白字元,請使用 "" 括住完整路目錄名稱]
  2. 調整一下7z執行檔的檔名
    第47 / 59行,7za 改為 7z。 (之前7-zip有區分GUI / Command Line版本,目前我安裝的版本就沒有區分了)
    必要的話,可以用 -p 參數幫壓縮檔加入開啟的密碼 ,例如 -pPASSWORD
    7z a %FULL% %Z_OPT% %DIR% -pPASSWORD
    7z u "%FULL%" %Z_OPT% -u- -up0q3r2x2y2z0w2^^!%DIFF% %DIR% -pPASSWORD

    修改這四行後,這個cmd批次檔,就可以正常運作了 ... 
在這程式投入運作前,可以先將檔名differential-backup-using-7-zip-windows-7z-bak.cmd,依照備份的特性更改檔名為:7z-bak_HanniDocs.cmd 7z-bak_LargeFiles.cmd ... 並把批次檔放到要儲存備份檔的目錄。

以下是執行完整備份的執行歷程:
(使用FULL參數,執行7z-bak_test.cmd,批次檔會用指定被備份的目錄及當天的日期,建立壓縮檔 )
D:\myWorks\BatchBackup>7z-bak_test FULL
BAK_DIR=D:\myWorks\BatchBackup
SRC_DIR=D:\MyWorks\test
TYPE=FULL
date: "20191221"
time: "103412"
------------------
Requesting full backup for "D:\myWorks\test"...
...performing full backup...

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Scanning the drive:
2 folders, 8 files, 42 bytes (1 KiB)

Creating archive: D:\myWorks\BatchBackup\test_20191221.7z

Add new data to archive: 2 folders, 8 files, 42 bytes (1 KiB)


Files read from disk: 8
Archive size: 288 bytes (1 KiB)
Everything is Ok
.
..."D:\myWorks\BatchBackup\test_20191221.7z"...done!
D:\myWorks\BatchBackup>

以下是執行差異備份的執行歷程:
(使用DIFF參數,執行7z-bak_test.cmd,批次檔會在存放備份壓縮檔的目錄,找到完整備份的壓縮檔,以此完整備份為基礎,進行差異備份 )
D:\myWorks\BatchBackup>7z-bak_test DIFF
BAK_DIR=D:\myWorks\BatchBackup
SRC_DIR=D:\MyWorks\test
TYPE=DIFF
date: "20191221"
time: "103651"
------------------
Requesting diff backup for "D:\myWorks\test"...
...finding full backup...
......found: "D:\myWorks\BatchBackup\test_20191221.7z"
...full backup found: "D:\myWorks\BatchBackup\test_20191221.7z"
...performing diff backup on "D:\myWorks\BatchBackup\test_20191221.7z"...

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Open archive: D:\myWorks\BatchBackup\test_20191221.7z
--
Path = D:\myWorks\BatchBackup\test_20191221.7z
Type = 7z
Physical Size = 288
Headers Size = 256
Method = LZMA2:12 7zAES
Solid = +
Blocks = 1

Scanning the drive:
2 folders, 8 files, 60 bytes (1 KiB)

Creating archive: D:\myWorks\BatchBackup\test_20191221_diff_20191221_103651.7z

Add new data to archive: 2 folders, 4 files, 38 bytes (1 KiB)
2 anti-files


Files read from disk: 4
Archive size: 308 bytes (1 KiB)
Everything is Ok
.
..."D:\myWorks\BatchBackup\test_20191221_diff_20191221_103651.7z"...done!
D:\myWorks\BatchBackup>


用工作排程器,建立備份計畫:
Windows系統管理工具→工作排程器
備份計畫舉例:
  1. 每月1日,上午06:00,執行一次完整備份。
  2. 每日上午07:00起,每隔2小時執行一次差異備份。

以下是另一個實際設定工作排程的實例:

  1. 一般頁籤:
  2. 觸發程序頁籤:
    執行週期的設定:
    每天。
    重複工作每隔:2小時。(先選取1小時,再把1改為2)
    持續時間為:不限制。(這樣這個排程就可以一直循環執行下去)
  3. 動作頁籤:
    選取程式的所在位置。
    新增引數。(執行程式所需的參數,這個備份程式,可以指定參數為FULL或DIFF)

每一次的差異備份,都是一所取得的完整備份為基礎,進行備份,所以一段時間後可以、也必須刪除一些多於不需要的差異備份。
如果每次的差異備份檔案都很大,那就要考慮重新建立完整備份,或調整建立完整備份的策略了。

沒有留言:

張貼留言