红联Linux门户
Linux帮助

如何对LUKS加密的磁盘/分区执行远程增量备份?

发布时间:2015-06-16 15:01:18来源:51CTO作者:布加迪/编译

出于安全方面的原因,我们当中一些人用Linux统一密钥设置(LUKS)对家里或虚拟专用服务器(VPS)上的硬盘进行了加密;这些硬盘的容量很快就会增加到数十GB或数百GB。于是,我们在享受LUKS设备的安全性的同时,可能会开始考虑一种可行的远程备份解决方案。就安全的异地备份而言,我们需要解决方案在经过加密的LUKS设备的数据块层面运作,而不是在未加密的文件系统层面运作。于是到头来,我们发觉自己处于这样一种情形:每当我们想要备份,就要传输整个LUKS设备里面的数据(比如说假设200GB)。这显然不可行。那么,我们该如何处理这个问题呢?

如何对LUKS加密的磁盘/分区执行远程增量备份?


解决之道: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'


在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)。

你需要访问两个系统上的根帐户,并且设置无需密码的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驱动器上。正如你所见,它的应用前景无限广阔!


LUKS:Linux下磁盘加密:http://www.linuxdiyf.com/linux/3192.html

RHEL6下磁盘加密——luks:http://www.linuxdiyf.com/linux/1016.html