Go 編寫(xiě)的備份工具——Restic 體驗(yàn)筆記

restic 是一個(gè) Go 語(yǔ)言編寫(xiě)的備份工具,特點(diǎn)是快速、高效而且安全。

下載最新版本:release page

目前最新版本是 0.0.4,你可以下載回來(lái)解壓構(gòu)建使用。但是,我習(xí)慣使用 Docker,畢竟我懶得裝 Golang 到服務(wù)器編譯,所以我還是用 Docker 運(yùn)行吧。

上面 release 有已經(jīng)編譯好的版本,我寫(xiě)完全文才發(fā)現(xiàn),打臉。
( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)

官方給了一份 Dockerfile,官方的鏡像自然是比較全面的,但我基本用不上那些功能,所以還是自己寫(xiě)一份吧:

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)題可以留言,笑。


寫(xiě)在最后,為了使用愉快,你最好用 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)行容器了??傊褂梅绞诫S機(jī)應(yīng)變。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,850評(píng)論 15 147
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡(jiǎn)介 Docke...
    極客圈閱讀 10,755評(píng)論 0 120
  • 0. 前言 docker是什么?docker是用GO語(yǔ)言開(kāi)發(fā)的應(yīng)用容器引擎,基于容器化,沙箱機(jī)制的應(yīng)用部署技術(shù)???..
    sessionboy閱讀 4,008評(píng)論 2 49
  • 人民的名義已經(jīng)大結(jié)局,說(shuō)實(shí)話,對(duì)于這樣的結(jié)局,讓人充滿無(wú)盡遐想。比如說(shuō):陳海醒了,他究竟知道什么真相;易學(xué)習(xí)的紀(jì)委...
    隨y風(fēng)閱讀 528評(píng)論 0 0
  • PORT,管理者第一思考模型 P:目的 1.參加訓(xùn)練營(yíng)是因?yàn)樗亲鲎约旱腃EO的前置課程,通過(guò)真自由訓(xùn)練營(yíng),得到C...
    淘淘的故事閱讀 264評(píng)論 0 0

友情鏈接更多精彩內(nèi)容