概要
本文簡單介紹restic備份程式,及其安裝方式與簡單使用例,展示環境為Ubuntu MATE 20.04。
restic簡介
restic是以Go語言開發的備份程式,採BSD授權的開放源碼軟體,支援Linux, BSD, macOS與Windows作業系統。備份儲存的目的位置可以在本機,或者是遠端的自建或線上服務,像Amazon S3、Alibaba OSS、Microsoft Azure Blob Storage、Google Cloud Storage。備份過程加密。
restic開發工作已歷數年,看來相當活躍,目前版號是0.12.0,已經有相當不錯的功能,使用上並不複雜,提供清楚的官方說明文件,可挑自己有需求的方面查閱即可。為避免文章過長,以下僅挑個簡單的使用情境——備份儲存在本機——做示例說明,其他情境的詳細情形可查閱說明文件。
安裝
單一執行檔,可以在專案的release頁下載二進制執行檔的壓縮檔下來,或者下載源碼自行編譯。Ubuntu可以用apt安裝,但這裡採用snap安裝,因版本會較新:
$ sudo snap install restic --classic
restic有提供自我升級版本的功能,故安裝好後,往後若想升級新版本可以執行restic self-update
,不過因為snap會自動檢查並升級軟體版本,所以這工作就交給snap處理即可。
裝好後執行 restic
會顯示簡介與使用方法,其中的簡介文字如下:
restic is a backup program which allows saving multiple revisions of files and
directories in an encrypted repository stored on different backends.
使用方法的文字這裡就不錄了,自行執行一次就看到了。看到上面repository這字是不是也聯想到 git ?是的,使用restic時在某些方面會有點像git的用法,譬如這兩者都可以加tag,不過兩者的工作性質並不同,只是某些工作方式在觀念上有些雷同。上述簡介文字中提到different backends即前述的備份儲存,這裡以本機為例,所以先準備個本機用的儲存倉庫以存放備份。
準備本機倉庫
假定備份要放到 /media/MyDisk/backup/ ,在此目錄做初始化工作,有點類似 git init
的做法:
$ restic init --repo /media/MyDisk/backup/
要輸入兩次密碼,然後顯示執行結果:
enter password for new repository:
enter password again:
created restic repository 7bf75a00ee at /media/MyDisk/backup
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
密碼務必記好,否則往後就沒戲唱了。完成後在 /media/MyDisk/backup/ 中會出現一些子目錄與檔案,這些是restic記錄資料用的,別去動它。
也可以用參數來指定密碼檔,記得密碼檔要保護好。
以上是儲存在本機的作法,如果備份是儲存到遠端機器,請查閱說明文件以了解如何在遠端機器初始存放備份用的倉庫。
備份、還原等工作
備份
假定要備份 ~/dotfiles/ :
$ restic backup ~/dotfiles -r /media/MyDisk/backup --verbose
輸入正確的密碼後顯示執行結果:
open repository
enter password for repository:
repository 7bf75a00 opened successfully, password is correct
created new cache in /home/fygul/.cache/restic
lock repository
load index files
no parent snapshot found, will read all files
start scan on [/home/fygul/dotfiles/]
start backup on [/home/fygul/dotfiles/]
scan finished in 0.530s: 3 files, 4.761 KiB
Files: 3 new, 0 changed, 0 unmodified
Dirs: 3 new, 0 changed, 0 unmodified
Data Blobs: 3 new
Tree Blobs: 4 new
Added to the repo: 6.876 KiB
processed 3 files, 4.761 KiB in 0:00
snapshot 73813906 saved
restic的備份作法是採用儲存快照snapshot(即資料夾中在某特定個時間點的內容)的方式,上述是全新的快照會擷取所有檔案,最後一行顯示編號 73813906 的快照已儲存。
有提供包含 include 與排除 exclude 的功能,這方面請見說明文件。
列示快照
$ restic snapshots -r /media/MyDisk/backup/
顯示目前有一個快照:
enter password for repository:
repository 7bf75a00 opened successfully, password is correct
ID Time Host Tags Paths
---------------------------------------------------------------------------
73813906 2021-05-16 22:56:57 LH532 /home/fygul/dotfiles
---------------------------------------------------------------------------
1 snapshots
此時如果在此資料夾中做了些修改,比如新增一個檔案,再次以restic備份時,新的快照就只加入新內容,而不加入與前一快照重複的東西:
$ restic backup ~/dotfiles/ -r /media/MyDisk/backup/ -v
這回顯示發現有既有的快照 73813906 ,只存新增的東西到新的快照中:
open repository
enter password for repository:
repository 7bf75a00 opened successfully, password is correct
lock repository
load index files
using parent snapshot 73813906
start scan on [/home/fygul/dotfiles/]
start backup on [/home/fygul/dotfiles/]
scan finished in 0.529s: 4 files, 4.761 KiB
Files: 1 new, 0 changed, 3 unmodified
Dirs: 0 new, 3 changed, 0 unmodified
Data Blobs: 0 new
Tree Blobs: 4 new
Added to the repo: 2.421 KiB
processed 4 files, 4.761 KiB in 0:00
snapshot 2ff53254 saved
再次列示快照:
$ restic snapshots -r /media/MyDisk/backup/
顯示有二個快照:
enter password for repository:
repository 7bf75a00 opened successfully, password is correct
ID Time Host Tags Paths
---------------------------------------------------------------------------
73813906 2021-05-16 22:56:57 LH532 /home/fygul/dotfiles
2ff53254 2021-05-16 23:10:23 LH532 /home/fygul/dotfiles
---------------------------------------------------------------------------
2 snapshots
還原資料
想把備份中的資料還原時,有二種作法:一是直接自備份的快照中還原;二是透過掛載點的方式,自行從掛載點把資料複製出來。
自快照中還原
比如想把上述 ID 2ff53254的快照內容還原到 ~/newdotfiles/ 。
$ restic -r /media/MyDisk/backup/ restore 2ff53254 --target ~/newdotfiles/
enter password for repository:
repository 7bf75a00 opened successfully, password is correct
restoring <Snapshot 2ff53254 of [/home/fygul/dotfiles] at 2021-05-16 23:10:23.091840909 +0800 CST by fygul@LH532> to /home/fygul/newdotfiles/
這樣還原的資料路徑會包含上層目錄。
以mount來還原
先準備好一個掛載點,比如:
$ mkdir -p ~/mnt/restic
再用 restic mount
命令把倉庫掛載到前述掛載點:
$ restic -r /media/MyDisk/backup/ mount ~/mnt/restic/
enter password for repository:
repository 7bf75a00 opened successfully, password is correct
Now serving the repository at /home/fygul/mnt/restic/
When finished, quit with Ctrl-c or umount the mountpoint.```
掛載好後,可用檔案總管之類的GUI程式開啟掛載點,自行複製所要的檔案出來。完成後在上述命令行按 Ctrl-C 來卸載掛載點。
刪除快照
例如想刪除前述的 73813906 :
$ restic -r /media/MyDisk/backup/ forget 73813906 -n
此例加了 -n
即 --dry-run
並不會真的刪除,而只會列示出將要刪除的快照:
enter password for repository:
repository 7bf75a00 opened successfully, password is correct
Would have removed the following snapshots:
{73813906}
真要刪除時, forget
做完還要再 prune
才會真正刪除資料;或者 forget
加上 --prune
就會自動做 prune
。
上述是手動刪除單一快照的作法,另外也可依某個原則來刪快照,如只留最後3個 --keep-last 3
。
結語
本文僅簡單介紹 restic 的使用,官方文件有較詳細的說明,其中有些細節建議還是要了解一下,例如倉庫在遠端機器時,刪除快照時可能會涉及 repacking ,此工作會較耗時。
restic體積小巧,功能不差,是 tar 或是其他備份工具程式之外的好選擇。
沒有留言:
張貼留言