出于安全方面的原因,我們當(dāng)中一些人用Linux統(tǒng)一密鑰設(shè)置(LUKS)對家里或虛擬專用服務(wù)器(VPS)上的硬盤進(jìn)行了加密;這些硬盤的容量很快就會增加到數(shù)十GB或數(shù)百GB。于是,我們在享受LUKS設(shè)備的安全性的同時,可能會開始考慮一種可行的遠(yuǎn)程備份解決方案。就安全的異地備份而言,我們需要解決方案在經(jīng)過加密的LUKS設(shè)備的數(shù)據(jù)塊層面運作,而不是在未加密的文件系統(tǒng)層面運作。于是到頭來,我們發(fā)覺自己處于這樣一種情形:每當(dāng)我們想要備份,就要傳輸整個LUKS設(shè)備里面的數(shù)據(jù)(比如說假設(shè)200GB)。這顯然不可行。那么,我們該如何處理這個問題呢?
解決之道:Bdsync
這時候,一款名為Bdysnc(這要感謝Rolf Fokkens)的出色的開源工具就可以派得上用場了。顧名思義,Bdsync可以通過網(wǎng)絡(luò)同步“塊設(shè)備”。就快速同步而言,Bdsync可以在本地/遠(yuǎn)程塊設(shè)備中生成并比較MD5檢驗和,只同步有差異的數(shù)據(jù)。Rsync可以在文件系統(tǒng)層面完成任務(wù),而Bdsync是可以在塊設(shè)備層面完成任務(wù)。它自然也可以與經(jīng)過加密的LUKS設(shè)備協(xié)同運行。相當(dāng)棒!
使用Bdsync,首次備份將把整個LUKS塊設(shè)備里面的數(shù)據(jù)拷貝到遠(yuǎn)程主機(jī)上,所以要花很長的時間才能完成。不過,這個初始備份完成后,如果我們在LUKS設(shè)備上構(gòu)建了一些新的文件,第二次備份就會迅速完成,因為我們只需要拷貝發(fā)生變化的數(shù)據(jù)塊。這時候經(jīng)典的增量備份起到了作用!
將Bdsync安裝到Linux上
Bdsync并不包含在Linux發(fā)行版的標(biāo)準(zhǔn)軟件庫里面。因而,你需要從源代碼來構(gòu)建它。使用下面針對特定發(fā)行版的指令,將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è)備執(zhí)行異地增量備份
我假設(shè)你已經(jīng)將LUKS加密的塊設(shè)備配置成備份來源(比如/dev/LOCDEV),還假設(shè)你有一個遠(yuǎn)程主機(jī),來源設(shè)備的內(nèi)容將在主機(jī)上得到備份(比如/dev/REMDEV)。
你需要訪問兩個系統(tǒng)上的根帳戶,并且設(shè)置無需密碼的SSH訪問,以便從本地主機(jī)訪問遠(yuǎn)程主機(jī)。最后,你還需要將Bdsync安裝到兩個主機(jī)上。
想在本地主機(jī)上開始進(jìn)行遠(yuǎn)程備份過程,我們以root帳戶的身份執(zhí)行下列命令:
# bdsync "ssh root@remote_host bdsync --server" /dev/LOCDEV /dev/REMDEV | gzip >/some_local_path/DEV.bdsync.gz
這里需要一番解釋。Bdsync客戶端將以根帳戶的身份與遠(yuǎn)程主機(jī)建立一條SSH連接,并且使用--server選項執(zhí)行Bdsync客戶軟件。說明一下,/dev/LOCDEV是本地主機(jī)上的來源LUKS塊設(shè)備,而/dev/REMDEV是遠(yuǎn)程主機(jī)上的目標(biāo)塊設(shè)備。它們應(yīng)該是/dev/sda(面向整個磁盤)或/dev/sda2(面向一個分區(qū))。本地Bdsync客戶端的輸出結(jié)果隨后輸出到gzip,gzip在本地主機(jī)構(gòu)建DEV.bdsync.gz(所謂的二進(jìn)制補丁文件)。
你第一次運行上述命令后,要花很長的時間,具體取決于你的互聯(lián)網(wǎng)/以太網(wǎng)速度以及/dev/LOCDEV的大小。切記:你的兩個塊設(shè)備(/dev/LOCDEV和/dev/REMDEV)其大小必須一樣。
下一步是把生成的補丁文件從本地主機(jī)拷貝到遠(yuǎn)程主機(jī)。使用scp是一個辦法:
# scp /some_local_path/DEV.bdsync.gz root@remote_host:/remote_path
最后的步驟就是,在遠(yuǎn)程主機(jī)上執(zhí)行下列命令,這會把補丁文件應(yīng)用到/dev/REMDEV:
# gzip -d
我建議先用不含有任何重要數(shù)據(jù)的小分區(qū)做一番試驗,然后再用Bdsync來處理實際數(shù)據(jù)。只有你完全了解了整個過程,才可以開始備份實際數(shù)據(jù)。
結(jié)束語
總之,我們介紹了如何使用Bdsync為LUKS設(shè)備執(zhí)行增量備份。與rsync一樣,每次備份時,只需要將一小部分?jǐn)?shù)據(jù)、而不是整個LUKS設(shè)備的數(shù)據(jù)拷貝到異地備份站點,這就節(jié)省了帶寬和備份時間。放心好了,所有數(shù)據(jù)傳輸都由SSH或SCP加以保護(hù),另外設(shè)備本身由LUKS進(jìn)行加密。還有可能改善這種方案:使用可以運行bdsync的專門用戶(而不是根用戶)。我們還可以將bdsync用于任何的塊設(shè)備,比如LVM卷或RAID磁盤,另外還很容易設(shè)置Bdsync,以便將本地磁盤備份到USB驅(qū)動器上。正如你所見,它的應(yīng)用前景無限廣闊!
歡迎留言交流。
英文:remote incremental backup luks encrypted disk partition