我們中有些人出於安全原因,在家裡或者VPS上通過Linux統一密鑰配置(LUKS)為硬盤驅動器加密,而這些驅動器的容量很快會增長到數十或數百GB。因此,雖然我們享受著LUKS設備帶來的安全感,但是我們也該開始考慮一個可能的遠程備份方案了。對於安全的非現場備份,我們將需要能在LUKS加密的設備上以塊級別操作的東西。因此,最後我們發現這麼個狀況,我們每次都需要傳輸想要做備份的整個LUKS設備(比如說200GB大)。很明顯,這是不可行的。我們該怎麼來處理這個問題呢?
一個解決方案: Bdsync
這時,一個卓越的開源工具來拯救我們了,它叫Bdsync(多虧了Rolf Fokkens)。顧名思義,Bdsync可以通過網絡同步“塊設備”。對於快速同步,Bdsync會生成並對比本地/遠程塊設備的塊的MD5校驗和,只同步差異部分。rsync在文件系統級別可以做的,Bdsync可以在塊設備級別完成。很自然,對於LUKS加密的設備它也能工作得很好。相當地靈巧!
使用Bdsync,首次備份將拷貝整個LUKS塊設備到遠程主機,因而會花費大量時間來完成。然而,在初始備份後,如果我們在LUKS設備新建一些文件,再次備份就會很快完成,因為我們只需拷貝修改過的塊。經典的增量備份在起作用了!
安裝Bdsync到Linux
Bdsync並不包含在Linux發行版的標准倉庫中,因而你需要從源代碼來構建它。使用以下針對特定版本的指令來安裝Bdsync及其手冊頁到你的系統中。
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加密的設備實施非現場增量備份
我假定你已經准備好了一個LUKS加密的塊設備作為備份源(如,/dev/LOCDEV)。同時,我假定你也有一台遠程主機,用以作為源設備的備份點(如,/dev/REMDEV)。
你需要在兩台系統上具有root帳號訪問權限,並且設置從本地訪問遠程的無密碼SSH訪問。最後,你需要安裝Bdsync到兩台主機上。
要在本地主機上初始化一個遠程備份進程,我們需要以root執行以下命令:
復制代碼代碼如下:# bdsync "ssh root@remote_host bdsync --server" /dev/LOCDEV /dev/REMDEV | gzip > /some_local_path/DEV.bdsync.gz
這裡需要進行一些說明。Bdsync客戶端將以root打開一個到遠程主機的SSH連接,並執行帶有--server選項的Bdsync客戶端。明確說明一下,/dev/LOCDEV是我們的本地主機上的源LUKS塊設備,而/dev/REMDEV是遠程主機上的目標塊設備。它們可以是/dev/sda(作為整個磁盤),或者/dev/sda2(作為單個分區)。本地Bdsync客戶端的輸出結果隨後被管道輸送到gzip,用來在本地主機中創建DEV.bdsync.gz(所謂的二進制補丁文件)。
你第一次運行上面的命令的時候,它會花費很長一段時間,這取決於你的互聯網/局域網速度,以及/dev/LOCDEV的大小。記住,你必須有兩個大小相同的塊設備(/dev/LOCDEV和/dev/REMDEV)。
下一步是要將補丁文件從本地主機拷貝到遠程主機。一種方式是使用scp:
復制代碼代碼如下:# scp /some_local_path/DEV.bdsync.gz root@remote_host:/remote_path
最後一步,是要在遠程主機上執行以下命令,它們會將補丁文件應用到/dev/REMDEV:
復制代碼代碼如下: # gzip -d < /remote_path/DEV.bdsync.gz | bdsync --patch=/dev/DSTDEV
我推薦在使用真實數據部署Bdsync前,使用一些(沒有任何重要數據)小分區來做這些測試。在你完全弄懂整個設置是如何工作之後,你可以開始備份真實數據。
尾聲
小結之,我們演示了如何使用Bdsync來為LUKS設備實施增量備份。和rsync一樣,每次備份只有一小部分數據,而不是整個LUKS設備,需要被推送到非現場備份點,這樣會節省帶寬和備份時間。剩下來,需要通過SSH或SCP來保證所有數據傳輸的安全,事實上設備自身是由LUKS加密的。也可以通過使用可以運行bdsync的專用用戶(而非root)來改進該配置。我們也可以將bdsync用於任何塊設備,如LVM卷或RAID磁盤,也可以很輕易地設置Bdsync備份本地磁盤到USB驅動器上。如你所見,它有著無限可能性!