为LUKS加密的磁盘/分区做增量备份

我们中有些人出于安全原因,在家里或者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


  1. $ sudo apt-get install git gcc libssl-dev
  2. $ git clone https://github.com/TargetHolding/bdsync.git
  3. $ cd bdsync
  4. $ make
  5. $ sudo cp bdsync /usr/local/sbin
  6. $ sudo mkdir -p /usr/local/man/man1
  7. $ sudo sh -c 'gzip -c bdsync.1 > /usr/local/man/man1/bdsync.1.gz'

Fedora或CentOS/RHEL


  1. $ sudo yum install git gcc openssl-devel
  2. $ git clone https://github.com/TargetHolding/bdsync.git
  3. $ cd bdsync
  4. $ make
  5. $ sudo cp bdsync /usr/local/sbin
  6. $ sudo mkdir -p /usr/local/man/man1
  7. $ sudo sh -c 'gzip -c bdsync.1 > /usr/local/man/man1/bdsync.1.gz'

对LUKS加密的设备实施非现场增量备份

我假定你已经准备好了一个LUKS加密的块设备作为备份源(如,/dev/LOCDEV)。同时,我假定你也有一台远程主机,用以作为源设备的备份点(如,/dev/REMDEV)。

你需要在两台系统上具有root帐号访问权限,并且设置从本地访问远程的无密码SSH访问。最后,你需要安装Bdsync到两台主机上。

要在本地主机上初始化一个远程备份进程,我们需要以root执行以下命令:


  1. # 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:


  1. # scp /some_local_path/DEV.bdsync.gz root@remote_host:/remote_path

最后一步,是要在远程主机上执行以下命令,它们会将补丁文件应用到/dev/REMDEV:


  1. # 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驱动器上。如你所见,它有着无限可能性!

随时分享你的想法。


原文发布时间为:2015-06-16

本文来自合作伙伴“Linux中国”

时间: 2024-09-10 02:19:20

为LUKS加密的磁盘/分区做增量备份的相关文章

Centos使用tar命令做增量备份脚本

想给subversion做个自动备份的脚本,一看目录大小,已经有几十个G了. 天天做完整备份太费系统资源了,增量备份是一个很好的解决方案. 每周做一次完整备份,然后每天只做增量备份. Centos做增量备份还是很容易的,tar命令就可以完全胜任. 在cron里设置,每周日晚执行(每周日全备份,其余时间增量备份). 示例一:  代码如下 复制代码 #!/bin/bash # define dayofweek=`date "+%u"` today=`date "+%Y%m%d&q

oracle 10g RMAN增量备份策略

最开始的数据一般数据量在不大的情况下,最还每天做全备份是最好的,这样在做故障恢复的时候是方便的,也是最简单的,通常最简单的方法是我们每个人追求的,复杂了自己也会绕在里面容易出错. 在随着业务的增长,随之带来的数据量的增长之后,我们在考虑做增量备份,减少备份数据量减少了每次备份时间,降低了系统的持续负载,但同时增加了数据恢复的时间,我们通常要选择折中的办法. rman 备份:: 累积增量0级备份 ##   mgss_backup_level0.sh run { # Hot database lev

Mysql增量备份之Mysqldump &amp; Mylvmbackup

简单介绍 备份类型 备份方式 热备份:备份期间不需要服务停机,业务不受影响: 温备份:备份期间仅允许读的请求: 冷备份:备份期间需要关闭Mysql服务或读写请求都不受影响: 完全备份:full backup备份全部数据集: 增量备份:incrementalbackup 上次完全备份或增量备份以来改变的数据: 差异备份:differentialbackup 上次完全备份以来改变的数据: 完全+增量备份方式恢复用到的备份文件:完全备份+增量备份+二进制文件: 完全+差异备份方式恢复用到的备份文件:完

差异增量备份和累积增量备份的差别

差异增量备份和累积增量备份的差别 差异增量备份,会备份自上次同级或低级差异增量备份以来所有发生变化的数据块 累积增量备份,会备份自上次0级备份以来发生变化的数据块. 也就是他们的差异主要在于起点不同.因为累积备份是直接从0级开始的,它的数据量较大,占用空间多,如果要恢复,花费的时间相对较少. 先做一个0级备份 RMAN> backup incremental level=0 database; -- handle=/u01/app/oracle/flash_recovery_area/VM62/

Oracle增量备份和快速备份(块改变跟踪Block Change Tracking)

Oracle增量备份和快速备份(块改变跟踪Block Change Tracking) 下面小麦苗给出全库备份的脚本: 点击(此处)折叠或打开 [oracle@rhel6lhr ~]$ crontab -l 2 12 * * 1 /home/oracle/lhr/rman/rman_backup_full.sh [oracle@rhel6lhr ~]$ more /home/oracle/lhr/rman/rman_backup_full.sh export ORACLE_SID=orclasm

MYSQL备份:启用二进制日志功能的MYSQL增量备份

小量的数据库我们可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,我们就不太可能每天进行一次完整备份了,而且改成每周一次完整备份,每天一次增量备份类似这样的备份策略.增量备份的原理就是使用了mysql的二进制日志,所以我们必须启用二进制日志功能. 一.增量备份 1.比如我们在星期天下午11点做一次完整备份: mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > fullbackup

MySQL利用xtrabackup进行增量备份详细过程汇总

1,创建mysql备份用户 mysql -uroot --password="" -e"CREATE USER 'backup'@'192.168.%' IDENTIFIED BY '123456'"; mysql -uroot --password="" -e"GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE, SUPERON *.* TO 'backup

mysql mysqldump数据备份和增量备份_Mysql

本篇文章主要讲如何使用shell实现mysql全量,增量备份.增量备份在周一-周六凌晨3点,会复制mysql-bin.00000*到指定目录:而全量备份则使用mysqldump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-bin.00000*.然后对mysql的备份操作会保留在bak.log文件中.如下图:开始:2013年05月02日 15:10:57 结束:2013年05月02日 15:12:16 20130502.sql.tgz succ是由DBFullyBak.sh产生

Linux VPS自动备份:脚本上传FTP及RSYNC增量备份

  ☆☆☆一.每日自动备份网站数据及数据库上传FTP☆☆☆   这个方式,主要是一个脚本(包含压缩网站数据及数据库,上传),然后用cron命令每天在指定时间段运行,下面请看脚本代码(脚本内信息需自行设定)    代码如下 复制代码 #!/bin/bash #以下信息请自行修改 MYSQL_USER=root                    #mysql用户名 MYSQL_PASS=123456                      #mysql密码 MAIL_TO=admin@zrbl