2021-05-12 14:32:11
如何對LUKS加密的磁碟/分割區執行遠端增量備份?
出於安全方面的原因,我們當中一些人用Linux統一金鑰設定(LUKS)對家裡或虛擬專用伺服器(VPS)上的硬碟進行了加密;這些硬碟的容量很快就會增加到數十GB或數百GB。於是,我們在享受LUKS裝置的安全性的同時,可能會開始考慮一種可行的遠端備份解決方案。就安全的異地備份而言,我們需要解決方案在經過加密的LUKS裝置的資料塊層面運作,而不是在未加密的檔案系統層面運作。於是到頭來,我們發覺自己處於這樣一種情形:每當我們想要備份,就要傳輸整個LUKS裝置裡面的資料(比如說假設200GB)。這顯然不可行。那麼,我們該如何處理這個問題呢?
解決之道:Bdsync
這時候,一款名為Bdysnc(這要感謝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'
$ 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)。
你需要存取兩個系統上的根帳戶,並且設定無需密碼的SSH存取,以便從本地主機存取遠端主機。最後,你還需要將Bdsync安裝到兩個主機上。
想在本地主機上開始進行遠端備份過程,我們以root帳戶的身份執行下列命令:
# bdsync "ssh root@remote_host bdsync --server" /dev/LOCDEV /dev/REMDEV | gzip > /some_local_path/DEV.bdsync.gz
這裡需要一番解釋。Bdsync用戶端將以根帳戶的身份與遠端主機建立一條SSH連線,並且使用--server選項執行Bdsync客戶軟體。說明一下,/dev/LOCDEV是本地主機上的來源LUKS塊裝置,而/dev/REMDEV是遠端主機上的目標塊裝置。它們應該是/dev/sda(面向整個磁碟)或/dev/sda2(面向一個分割區)。本地Bdsync用戶端的輸出結果隨後輸出到gzip,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的專門使用者(而不是根使用者)。我們還可以將bdsync用於任何的塊裝置,比如LVM捲或RAID磁碟,另外還很容易設定Bdsync,以便將本地磁碟備份到USB驅動器上。正如你所見,它的應用前景無限廣闊!
歡迎留言交流。
英文:remote incremental backup luks encrypted disk partition
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-06/118917.htm
相關文章