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

发布于 2024-11-11 04:01:53 字数 3145 浏览 6 评论 0

我们中有些人出于安全原因,在家里或者 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 驱动器上。如你所见,它有着无限可能性!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
477 人气
更多

推荐作者

安静被遗忘

文章 0 评论 0

喔爱吃橙子

文章 0 评论 0

草莓味的萝莉

文章 0 评论 0

梦里兽

文章 0 评论 0

mb_83J3Cyxa

文章 0 评论 0

时间海

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文