如果你是那些升级到 Raspberry Pi 3 的人之一,你可能会想知道如何处理你旧的、配置较低的 Pi。除了把它变成一堆闪烁的 LED 灯来逗你的猫开心之外,你还可以考虑将其配置为微控制器。
正如我们大多数人勉强承认的那样,备份我们的数字生活是我们日常计算中最重要的事情,但我们谁都没有费心去做。那是因为执行备份过程需要我们记住去做,它需要付出努力,而且需要时间。而这正是为什么最好的备份解决方案是你根本不用做的解决方案;它是你自动化的解决方案。
当这样的系统始终开启并在后台运行时,它是最好的。而这正是 Raspberry Pi 最擅长的。你可以让 Pi 整天整夜地开着,永远不会注意到它对你的电费账单有什么影响,你可以让它执行简单的任务,即在你的家庭网络中运行备份。你所需要的只是一个 Raspberry Pi 和一个大硬盘,你就基本上构建了一个定制版本的那些烦人的“简易备份”系统,硬盘公司每隔几年就会推出这些系统(你知道我说的是哪些吗?就是那些你连接到你的网络,浪费一个周末试图配置,结果在一个隐藏的在线论坛中发现由于固件中的一个错误,什么都不能像广告宣传的那样工作,而硬盘公司两年前就承诺他们会“很快”修复的那些)。
rdiff-backup
首先,你需要选择一些备份软件,让你的备份服务器(你的 Pi)和你的客户端(你的笔记本电脑、台式机和任何其他设备)运行。
有很多用于自动备份的工具,但多年来我发现,大多数漂亮的图形化备份解决方案最终都会停止维护,直到它们消失,迫使我切换到不同的东西。过一段时间后,这变得很烦人,所以我开始使用 rsync,这个古老的 UNIX 命令已经存在了几十年。这对我来说非常有用,但我开始发现自己想要某些文件的版本化备份;rsync 为已更改的文件进行备份,但它会用新版本覆盖旧版本,因此如果我的问题不是文件被删除了,而是我把一个文件搞砸到无法识别的地步,那么拥有 rsync 的备份文件对我一点用处都没有,因为备份几乎总是最终成为我要替换的文件的坏版本。
然后我找到了 rdiff-backup,这是一个基于 rsync 的简单备份工具(它使用 librsync),因此继承了它的可靠性(然而,它自 2001 年才出现,所以它没有 rsync 那样悠久的历史)。Rdiff-backup 使用标准 UNIX 工具(tar、rdiff、rsync 等)在本地或通过网络执行增量备份,因此即使它消失了,它创建的备份文件仍然有用。它很轻巧,并且可以在 Linux 和 FreeBSD 上运行,因此即使在最旧的 Raspberry Pi 上运行也很容易。
服务器安装
你不需要任何特殊设置就可以将你的 Raspberry Pi 变成备份服务器。假设你的 Pi 已经启动并运行,你所需要做的就是从你的存储库、端口或附加站点安装 rdiff-backup。
客户端安装
至于你的客户端(也就是,将由你的 Pi 备份的计算机),rdiff-backup 可以在 Linux、BSD、Windows 和 Mac OS X 上运行,所以你很可能可以在你家中的所有计算机上使用它。
大硬盘
即使是 64GB 的 SD 卡对于增量备份来说也不会走得很远,所以你需要一个大硬盘连接到你的 Pi 上。你最了解自己的数据,所以在购买硬盘时让它成为你的指南。对于我的家庭网络,我有一个相对较小的(考虑到我处理的媒体数据文件的数量)3TB 硬盘;我这样做有很多原因,但主要是因为我实际上并没有备份我拥有的所有数据。我处理的很多数据无论如何都存在于其他地方,所以没有必要备份它,而且像我的音乐和电影收藏之类的东西,我认为它们也不重要到需要备份。所以不要觉得你必须字面上跟踪每一千字节;只要了解你的数据和你最关心的事情即可。
一旦你有了硬盘,将其连接到你的 Pi 并格式化它。严格来说,你可能不一定非要格式化它,但如果你要让 Linux 管理数据,那么你最好将数据存储在原生文件系统上。这假设你的备份驱动器是新的,或者是一个你想完全擦除的驱动器。如果不是,你可以跳过这一部分。
要在 Linux 上格式化驱动器,你必须使用 root 权限。这在某种程度上取决于你在你的 Pi 上运行的发行版(Raspbian、Pidora 等),但通常 sudo 命令是调用它的方式。无论如何,要使用的工具是 parted,只要你没有其他驱动器连接到你的 Pi(除了它从中启动的 SD 卡),那么你的驱动器的位置就是 /dev/sda。为了安全起见,我将使用 /dev/sdx,以避免潜在的复制粘贴错误。
首先,确认你的驱动器的位置
$ sudo ls -1 /dev/sd*
/dev/sdX
/dev/sdX1
/dev/sdX2
然后,在驱动器上运行 parted 以确认其总大小
$ sudo parted /dev/sdX unit MB print
Model: Tycoon hard drive Corp. (scsi)
Disk /dev/sda: 1985442MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
查看以 Disk 开头的行;这会告诉你驱动器的总大小,以兆字节为单位。把它记下来,因为你稍后会用到它。
接下来,在驱动器上创建一个新分区,跨越整个驱动器。只有在你想要完全擦除备份驱动器以为所有备份腾出空间时才这样做。如果驱动器上有任何你不想永远消失的数据,那么不要这样做。
$ sudo parted /dev/sdX mklabel gpt
Warning: The existing disk label on /dev/sdX will be destroyed
and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
Information: You may need to update /etc/fstab.
$ sudo parted /dev/sdx mkpart primary 1 1985442
Information: You may need to update /etc/fstab.
你的新分区现在存在了,所以在其中创建一个文件系统。请注意,对于此命令,你使用分区而不是磁盘位置。所以例如,你将使用 /dev/sda1 而不是 /dev/sda。为了获得最佳效果,还要为磁盘提供一个标签(-L 选项),我们稍后将使用它来自动挂载驱动器。
$ sudo mkfs.ext4 -L backupdrive /dev/sdx1
你的驱动器现在已准备好作为备份驱动器使用。
自动挂载备份驱动器
将 Pi 用于你的备份服务器的想法,部分原因在于它将始终开启。但是,如果发生任何事情(例如,电源故障或意外关机),那么你希望你的备份驱动器自动重新挂载,否则任何备份尝试都将失败。
要为你的驱动器设置自动挂载,首先创建一个标准位置来挂载它。驱动器通常挂载到像 /media 或 /run/media 这样的位置,这很好,但为了简单起见,只需在你的文件系统的根目录中为其创建一个目录
$ sudo mkdir /backupdrive
然后使用 root 权限在您选择的文本编辑器中编辑 /etc/fstab。添加此行
LABEL=backupdrive /backupdrive ext4 user,rw 0 0
最后挂载驱动器
$ sudo mount -a
初始备份
你做的第一个备份是最大和最慢的备份,因为你想备份的所有内容都将被复制到你的驱动器。后续备份要小得多,也快得多,因为只有新文件(或 blob)或对文件的更改才会被复制过来。
首先,在客户端计算机(要备份到 Pi 的计算机)上安装 rdiff-backup。它适用于主要的操作系统。
为了确保你未来的备份按预期进行,使用你打算用于增量备份的相同命令和相同设置进行首次备份。这意味着你不应该断开大驱动器与 Pi 的连接并将其插入客户端以使其更快;每次都以相同的方式执行每次备份,以便你确切地知道稍后如何自动化它。
在 Pi 上,为你将要从客户端备份的文件夹创建一个目录。假设你想备份客户端的主目录,在备份驱动器上创建该文件夹的镜像
$ sudo mkdir -p /backupdrive/home/seth
然后确保同一用户拥有该目录
$ chown seth:users /backupdrive/home/seth
这假设用户 seth 同时存在于客户端和 Pi 上。你不必这样做(rdiff-backup 可以作为不同的用户登录到 Pi),但有时当备份是源的镜像时,它会更容易管理。
这也假设你正在备份你的主目录。这通常是一个好的开始位置(我假设如果你正在运行 Linux,那么你可以免费下载和替换基本系统),但你可能想要排除你不需要备份的大文件。在一个名为 .excludes 的文件中列出要从备份中排除的文件和文件夹,该文件位于你的主目录中。至少,你可能可以安全地排除你的回收站目录
$ echo "$HOME/.local/.local/share/Trash" && $HOME/.excludes
来自你的客户端计算机的基本 rdiff-backup 命令,其中 192.168.3.14 是你的 Pi 的 IP 地址
$ rdiff-backup --terminal-verbosity 8 --print-statistics \
--exclude-globbing-filelist $HOME/.excludes \
/home/seth/ seth@192.168.3.14::/backupdrive/home/seth/
该命令应启动一个漫长的 rsync 过程,其中所有文件都被发现不存在于备份驱动器上,因此从客户端复制到 Pi。如果失败,请检查所涉及的权限;你的用户(在 Pi 上)必须能够写入备份驱动器。此外,你的用户必须能够成功地远程 SSH 进入 Pi。
自动登录
由于我们的目标是自动化这个过程,因此启动备份的登录过程也必须在无人干预的情况下发生。使 SSH 登录自动化很容易;只需使用 ssh 密钥登录。这可以使用 ssh-copy-id 一步完成,它应该在你的 Pi 发行版的存储库中)。要为此备份服务器使用特殊密钥,请使用 ssh config 文件来指定要使用的密钥。
Cron 任务
假设到目前为止一切正常,那么无人值守的备份不应该失败。为了实现这一点,请采用你用于初始备份的相同命令,并将其分配给 cronjob。这通常使用命令 cronjob -e 完成
0 */6 * * * rdiff-backup --exclude-globbing-filelist /home/seth/.excludes \
/home/seth/ seth@192.168.3.14::/backupdrive/seth/
该 cronjob 每六小时运行一次备份命令(整点)。你可以根据自己的需要调整频率。
恢复数据
既然备份已经自动化,那么你实际上只需要记住一个命令:如何从你如此尽职尽责地进行的备份中恢复文件。
最简单的恢复命令就像 rsync 或 scp 一样简单
$ rdiff-backup --restore-as-of now \
seth@192.168.3.14::/backupdrive/seth/paint/tux.svg \
~/paint/tux.svg
此命令从备份服务器将最新版本的 tux.svg 恢复到客户端计算机上的相同路径。请注意,你不必担心特殊的文件路径来考虑版本;如果你想要最新版本,你只需恢复丢失或已损坏的相同路径,并让 rdiff-backup 将该请求解析为最新版本。
但是 --restore-as-of 选项比这更灵活。也许你需要的文件版本是五天前的
$ rdiff-backup --restore-as-of 5D
seth@192.168.3.14::/backupdrive/seth/paint/tux.svg \
~/paint/tux.svg
还有其他几种恢复文件的方法,它们都列在官方 rdiff-backup 文档中,但在实践中,我发现 --restore-as-of 选项是最常用的。在不太常见的情况下,你知道文件的最后一个好版本的确切日期和时间,并且需要非常具体地从备份中提取它,rdiff-backup 也可以为你处理;你只需要获得相当笨拙的 diff 文件名,它与你的备份数据一起存储在备份驱动器上。
例如
$ rdiff-backup 192.168.3.14::/backupdrive/seth/rdiff-backup-data/increments/ \
paint.2016-01-24T06:06:00-07:00.diff.gz $HOME
这会从 1 月 24 日凌晨 6:06 执行的备份中恢复文件 paint。当然,它不会仅仅将该文件的 diff 数据放入你的主目录,而是文件的完全重建版本。这就是 rdiff-backup 的用途。
备份它
备份很重要,你的旧 Pi 可以提供帮助。今天就设置它,你不会后悔的。
16 条评论