我們中有些人出于安全原因,在家里或者VPS上通過Linux統(tǒng)一密鑰配置(LUKS)為硬盤驅(qū)動器加密,而這些驅(qū)動器的容量很快會增長到數(shù)十或數(shù)百GB。因此,雖然我們享受著LUKS設(shè)備帶來的安全感,但是我們也該開始考慮一個可能的遠(yuǎn)程備份方案了。對于安全的非現(xiàn)場備份,我們將需要能在LUKS加密的設(shè)備上以塊級別操作的東西。因此,最后我們發(fā)現(xiàn)這么個狀況,我們每次都需要傳輸想要做備份的整個LUKS設(shè)備(比如說200GB大)。很明顯,這是不可行的。我們該怎么來處理這個問題呢?
一個解決方案: Bdsync
這時,一個卓越的開源工具來拯救我們了,它叫Bdsync(多虧了Rolf Fokkens)。顧名思義,Bdsync可以通過網(wǎng)絡(luò)同步“塊設(shè)備”。對于快速同步,Bdsync會生成并對比本地/遠(yuǎn)程塊設(shè)備的塊的MD5校驗和,只同步差異部分。rsync在文件系統(tǒng)級別可以做的,Bdsync可以在塊設(shè)備級別完成。很自然,對于LUKS加密的設(shè)備它也能工作得很好。相當(dāng)?shù)仂`巧!
使用Bdsync,首次備份將拷貝整個LUKS塊設(shè)備到遠(yuǎn)程主機,因而會花費大量時間來完成。然而,在初始備份后,如果我們在LUKS設(shè)備新建一些文件,再次備份就會很快完成,因為我們只需拷貝修改過的塊。經(jīng)典的增量備份在起作用了!
安裝Bdsync到Linux
Bdsync并不包含在Linux發(fā)行版的標(biāo)準(zhǔn)倉庫中,因而你需要從源代碼來構(gòu)建它。使用以下針對特定版本的指令來安裝Bdsync及其手冊頁到你的系統(tǒng)中。
Debian,Ubuntu或Linux Mint
$ sudo apt-get install git gcc libssl-dev
$ git clone https://github.com/TargetHolding/bdsync.git
$ cd bdsync
$ make
$ sudo cp bdsync /usr/local/sbin
$ sudo mkdir -p /usr/local/man/man1
$ sudo sh -c 'gzip -c bdsync.1 > /usr/local/man/man1/bdsync.1.gz'
Fedora或CentOS/RHEL
$ sudo yum install git gcc openssl-devel
$ git clone https://github.com/TargetHolding/bdsync.git
$ cd bdsync
$ make
$ sudo cp bdsync /usr/local/sbin
$ sudo mkdir -p /usr/local/man/man1
$ sudo sh -c 'gzip -c bdsync.1 > /usr/local/man/man1/bdsync.1.gz'
對LUKS加密的設(shè)備實施非現(xiàn)場增量備份
我假定你已經(jīng)準(zhǔn)備好了一個LUKS加密的塊設(shè)備作為備份源(如,/dev/LOCDEV)。同時,我假定你也有一臺遠(yuǎn)程主機,用以作為源設(shè)備的備份點(如,/dev/REMDEV)。
你需要在兩臺系統(tǒng)上具有root帳號訪問權(quán)限,并且設(shè)置從本地訪問遠(yuǎn)程的無密碼SSH訪問。最后,你需要安裝Bdsync到兩臺主機上。
要在本地主機上初始化一個遠(yuǎn)程備份進(jìn)程,我們需要以root執(zhí)行以下命令:
# bdsync "ssh root@remote_host bdsync --server" /dev/LOCDEV /dev/REMDEV | gzip > /some_local_path/DEV.bdsync.gz
這里需要進(jìn)行一些說明。Bdsync客戶端將以root打開一個到遠(yuǎn)程主機的SSH連接,并執(zhí)行帶有--server選項的Bdsync客戶端。明確說明一下,/dev/LOCDEV是我們的本地主機上的源LUKS塊設(shè)備,而/dev/REMDEV是遠(yuǎn)程主機上的目標(biāo)塊設(shè)備。它們可以是/dev/sda(作為整個磁盤),或者/dev/sda2(作為單個分區(qū))。本地Bdsync客戶端的輸出結(jié)果隨后被管道輸送到gzip,用來在本地主機中創(chuàng)建DEV.bdsync.gz(所謂的二進(jìn)制補丁文件)。
你第一次運行上面的命令的時候,它會花費很長一段時間,這取決于你的互聯(lián)網(wǎng)/局域網(wǎng)速度,以及/dev/LOCDEV的大小。記住,你必須有兩個大小相同的塊設(shè)備(/dev/LOCDEV和/dev/REMDEV)。
下一步是要將補丁文件從本地主機拷貝到遠(yuǎn)程主機。一種方式是使用scp:
# scp /some_local_path/DEV.bdsync.gz root@remote_host:/remote_path
最后一步,是要在遠(yuǎn)程主機上執(zhí)行以下命令,它們會將補丁文件應(yīng)用到/dev/REMDEV:
# gzip -d /remote_path/DEV.bdsync.gz | bdsync --patch=/dev/DSTDEV
我推薦在使用真實數(shù)據(jù)部署B(yǎng)dsync前,使用一些(沒有任何重要數(shù)據(jù))小分區(qū)來做這些測試。在你完全弄懂整個設(shè)置是如何工作之后,你可以開始備份真實數(shù)據(jù)。
尾聲
小結(jié)之,我們演示了如何使用Bdsync來為LUKS設(shè)備實施增量備份。和rsync一樣,每次備份只有一小部分?jǐn)?shù)據(jù),而不是整個LUKS設(shè)備,需要被推送到非現(xiàn)場備份點,這樣會節(jié)省帶寬和備份時間。剩下來,需要通過SSH或SCP來保證所有數(shù)據(jù)傳輸?shù)陌踩聦嵣显O(shè)備自身是由LUKS加密的。也可以通過使用可以運行bdsync的專用用戶(而非root)來改進(jìn)該配置。我們也可以將bdsync用于任何塊設(shè)備,如LVM卷或RAID磁盤,也可以很輕易地設(shè)置Bdsync備份本地磁盤到USB驅(qū)動器上。如你所見,它有著無限可能性!