restic 是一個(gè) Go 語(yǔ)言編寫的備份工具竞端,特點(diǎn)是快速被因、高效而且安全蝗蛙。
下載最新版本:release page
目前最新版本是 0.0.4,你可以下載回來(lái)解壓構(gòu)建使用敲长。但是郎嫁,我習(xí)慣使用 Docker,畢竟我懶得裝 Golang 到服務(wù)器編譯祈噪,所以我還是用 Docker 運(yùn)行吧泽铛。
上面 release 有已經(jīng)編譯好的版本,我寫完全文才發(fā)現(xiàn)辑鲤,打臉盔腔。
( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)
官方給了一份 Dockerfile,官方的鏡像自然是比較全面的月褥,但我基本用不上那些功能弛随,所以還是自己寫一份吧:
FROM alpine:edge
ENV RESTIC_VERSION=0.4.0
RUN apk add --no-cache go git musl-dev openssl ca-certificates && \
wget https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic-${RESTIC_VERSION}.tar.gz && \
tar -xzvf restic-${RESTIC_VERSION}.tar.gz && \
cd restic-${RESTIC_VERSION} && \
go build build.go && \
./build && \
mv restic /bin/restic && \
cd ../ && \
rm -rf restic-* && \
apk del -q go git musl-dev openssl && \
rm -rf /var/cache/apk/*
上面從源代碼構(gòu)建整個(gè)程序,和官方那目測(cè)幾百 MB 的鏡像體積宁赤,我這個(gè) Dockerfile 僅有 14 MB舀透。
如果你需要的話可以使用
docker pull zuolan/restic
拉取鏡像,只有 6MB 的傳輸體積决左。
先運(yùn)行看一下說(shuō)明愕够,順便測(cè)試一下鏡像運(yùn)行時(shí)是否正常:
docker run --rm -it zuolan/restic restic --help
一般來(lái)說(shuō)沒(méi)什么問(wèn)題,畢竟都構(gòu)建成功了佛猛。
這個(gè)備份工具有點(diǎn)類似于 Git 這種版本控制工具惑芭,有著倉(cāng)庫(kù)(repository)的概念,所以我們先初始化倉(cāng)庫(kù):
$ docker run --rm -it -v ~/backup:/tmp/backup zuolan/restic restic init --repo /tmp/backup
enter password for new backend:
enter password again:
created restic backend 085b3c76b9 at /tmp/backup
Please note that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverably lost.
記住密碼挚躯,不然你數(shù)據(jù)就無(wú)法恢復(fù)了强衡。
然后創(chuàng)建一個(gè)快照:
$ docker run --rm -it \
-v ~/backup:/tmp/backup \
-v ~/nginx:/tmp/nginx \
zuolan/restic \
restic -r /tmp/backup backup /tmp/nginx
enter password for repository:
scan [/tmp/work]
scanned 764 directories, 1816 files in 0:00
[0:29] 100.00% 54.732 MiB/s 1.582 GiB / 1.582 GiB 2580 / 2580 items 0 errors ETA 0:00
duration: 0:29, 54.47MiB/s
snapshot 40dc1520 saved
這里面第一次索引可能會(huì)比較耗時(shí)間擦秽,但實(shí)際上也是挺快的码荔,幾GB的數(shù)據(jù)也是喝一杯水的功夫就搞定了。
查看一下倉(cāng)庫(kù)的快照:
$ docker run --rm -it \
-v ~/backup:/tmp/backup \
zuolan/restic \
restic -r /tmp/backup snapshots
enter password for repository:
ID Date Host Tags Directory
----------------------------------------------------------------------
9236eead 2017-02-09 14:51:10 e1c6f61cb5e0 /tmp/nginx
注意的是感挥,倉(cāng)庫(kù)和快照不是一對(duì)一的缩搅,你可以在一個(gè)倉(cāng)庫(kù)中存放不同目錄的多個(gè)快照,所以一般只用一個(gè)備份倉(cāng)庫(kù)就可以了触幼,除非你數(shù)據(jù)很多很復(fù)雜硼瓣。
例如給其他目錄也備份:
$ docker run --rm -it \
-v ~/backup:/tmp/backup \
-v ~/apache:/tmp/apache \
zuolan/restic \
restic -r /tmp/backup backup /tmp/apache
注意 -v 參數(shù)中原來(lái)的 nginx 改為了 apache,這樣在數(shù)據(jù)卷中也要相應(yīng)修改名稱,避免程序認(rèn)為是同一個(gè)目錄的變動(dòng)而修改了原有的快照堂鲤。
排除文件/夾自然也是老辦法:--exclude 或者 --exclude-file 之類的參數(shù)亿傅。
恢復(fù)快照:
$ docker run --rm -it \
-v ~/backup:/tmp/backup \
-v ~/nginx:/tmp/nginx \
zuolan/restic \
restic -r /tmp/backup restore 9236eead --target /tmp/nginx
restoring <Snapshot 9236eead of [/tmp/nginx] at 2017-02-09 14:51:10.376787233 +0000 UTC by @e1c6f61cb5e0> to /tmp/nginx
完美恢復(fù)!~
官方教程地址:
https://restic.readthedocs.io/en/stable/Manual/
詳細(xì)的我還要再看看瘟栖,我才剛接觸這個(gè)軟件兩個(gè)小時(shí)葵擎,有什么問(wèn)題可以留言,笑半哟。
寫在最后酬滤,為了使用愉快,你最好用 alias 把整個(gè) Docker 命令丟到 .bashrc 中:
alias restic="docker run --rm -v ~/data:/tmp/data zuolan/restic restic"
~/data 是你備份數(shù)據(jù)的地方寓涨,因?yàn)槲沂恰叭f(wàn)物皆容器”的原則盯串,所以服務(wù)器全部數(shù)據(jù)都統(tǒng)一放置在一個(gè)文件中,管理備份很輕松戒良。
這樣你使用 restic 命令時(shí)實(shí)際上就是調(diào)用這個(gè)鏡像運(yùn)行容器了体捏。總之使用方式隨機(jī)應(yīng)變糯崎。