基于 Linux 的自动备份系统

作者:Michael O'Brien

人们常常认为计算机是理所当然的。当人们依赖计算机存储和处理重要数据,却未能备份这些数据时,这种行为就变得非常危险。如果您正在阅读本文,那么您可能已经意识到可靠备份的必要性。然而,您可能会与不了解备份必要性的人一起工作,而他们的数据丢失可能会严重影响您的工作。

我在一个科学研究小组工作。我们的实验室很现代化,几乎所有的数据采集都由运行 Windows 95 的计算机完成。本质上,我们全部的工作就是获取存储在计算机上的信息。数据丢失最终可能会造成数千美元的损失,尤其是在考虑到所有帮助生成这些数据的人员的工资时。

为了保护我们小组免受数据丢失的影响,我提出了一个针对我们不可替代数据的自动、基于网络的备份系统。成本可以忽略不计(我们有一台闲置的 486/66 计算机和一个花费我们一百多美元的 3GB 硬盘)。在过去的两年里,我经历了该系统的几个版本,从基于 Windows 95 的系统开始,最终发展成为一个快速、强大的基于 Linux 的系统。当前版本易于实施、经济高效、功能强大且可靠。假设您已经准备好一台联网的 Linux 机器,您应该能够使用本文在短时间内设置您自己的自动备份系统。

必要工具

自动备份系统所需的所有工具都包含在大多数 Linux 发行版中。第一个是 Samba,这是一个出色的开源软件包,允许 UNIX 类型系统通过 TCP/IP 网络与基于 Windows 的系统进行通信。Linux 版本包含一个名为 smbmount 的实用程序。它使用 Linux 独有的 smb 文件系统内核支持,允许将 Windows 计算机上的任何目录挂载到 Linux 文件系统,并像在 Linux 机器的硬盘上一样进行操作。这将允许存档程序(在其更新模式下)检查 Windows 机器上的文件是否需要备份,然后再通过网络传输,从而显著降低网络带宽要求、CPU 负载和硬盘磨损。

Linux 上有许多可用的存档程序,包括 tarbzip2 甚至简单的 cp 命令。但是,我选择使用来自开源 Info-ZIP 项目的工具。这些工具包含在大多数 Linux 发行版中,并且适用于各种其他平台,它们快速、体积小,并且使用已建立的 Windows 系统文件标准。此外,Info-ZIP 工具的压缩能力允许用户显著减小 Linux 备份系统上文件存档的大小。

初步步骤

必须在要备份的 Windows 计算机上设置网络共享(硬盘驱动器或包含所有子目录的任何目录)。如果尚未启用文件共享,您可以从 Windows 网络控制面板中进行设置。然后,在 Windows 资源管理器中,右键单击您想要从网络访问的驱动器或文件夹,并从弹出菜单中选择“共享”选项。我建议允许只读访问,这样,如果黑客以某种方式获取您的密码,他们也无法更改或破坏您的数据。请务必记录这些共享的名称。最好将 Windows 计算机的 NetBIOS 名称、DNS 名称和 IP 地址放在 Linux 机器的 /etc/hosts 文件中(按照 /etc/hosts 中的注释指示),尤其是当您的计算机位于不同的子网时。

完成此操作后,您必须准备好 Linux 系统以访问和存储数据。首先,通过键入 mkdir /mnt/smb 为 Windows 共享创建挂载点。之后,您必须决定将存档备份放在哪里。

我将备份文件放在一个单独的 1GB vfat (Windows) 分区上,该分区在除实际备份过程运行时之外的所有时间都保持未挂载状态。这样,文件可以尽可能地免受电源中断造成的文件系统损坏,并且硬盘驱动器可以临时从 Linux 计算机中取出并放入 Windows 计算机中以方便恢复。为了适应这一点,我创建了一个名为 /mnt/backups 的挂载点。

脚本

脚本是一个文本文件,其中包含通常在 Linux 命令提示符下键入的命令。您可以使用它们轻松地重复完成非常复杂的任务。制作脚本就像在您喜欢的编辑器中键入文本,保存它,然后对该文件使用 chmod u+x 命令一样简单。

清单 1 显示了从名为“higgins”的计算机上的 d_drive 共享备份 DATA 目录的脚本。此脚本在我的 Linux 计算机“magnum”上运行,并存储为文件 root/backup/higgins。

清单 1. DATA 目录备份

第一行虽然看起来像注释,但实际上指示计算机使用 bash 执行脚本。接下来是脚本的主要部分将用来备份 higgins 上的数据的所有 shell 变量。将特定于案例的值放在脚本开头的变量中的这种做法允许用户通过复制基本脚本并更改一些容易看到的值来非常快速地为新计算机制作新版本。清单 2 显示了 Windows 98 机器(共享 C: 驱动器的“rick”)和 Windows NT 机器(共享名为“data”的文件夹的“tc”)的不同变量集。请注意 Windows NT 变量如何需要指定用户名和与该用户名关联的密码。

清单 2. Windows 机器的变量

其余行实际执行工作。命令 export PASSWD 将密码放入 smbmount 程序自动读取的环境变量中。smbmount 命令接下来执行,以防有人忘记从挂载点卸载 SMB 共享。(如果那里没有任何东西,smbmount 将返回一条无害的错误消息,并且脚本继续。)然后,smbmount 程序尝试挂载远程共享。-N 开关指示它不要要求输入密码来替换 PASSWD 环境变量的值。-n 开关将用户名传递给 smbmount。

一个 if 语句检查指定的备份文件是否实际存在,然后再执行任何备份工作,以防网络中断或远程计算机关闭。在这种情况下,脚本将在重新使挂载点可用后终止。

如果 Linux 机器可以访问远程文件,则所有存档都使用 zip 命令完成。-r 开关是标准的递归选项,它使 zip 遍历数据目录的每个子文件夹。-u 将 zip 置于更新模式,在该模式下,它只会添加或更改尚未存档或已更改的文件。-v 参数指示 zip 详细显示它在显示器上检查的每个文件的名称——这是一个用于故障排除的有用选项。

为每台计算机设置备份脚本后,您可以创建一个名为 master 的简单脚本,以按顺序调用每个备份脚本。清单 3 显示了我的 master 脚本的示例。

清单 3. Master 脚本

激活系统

编写完所有脚本后,您可以将 master 脚本的符号链接放在 /etc/cron.d 子目录之一中,以便计算机自动处理备份。对于我的设置,我键入 ln -s /root/backup/master /etc/cron.d/weekly/master 以设置每周自动备份。如果需要,您可以每天备份,因为存档实用程序的更新选项最大限度地减少了资源需求。

但是,首次使用备份脚本将需要大量的网络带宽和 CPU 时间。因此,您可能需要考虑手动或在晚上使用 at 命令首次运行它。

注意事项

应注意五个要点

  1. 任何包含密码的 shell 脚本都应使用 chmod go-r 命令使其对所有者以外的任何人都不可读。

  2. 如果您的数据非常敏感,您需要设置足够的安全措施,以防止工业间谍侵入您的 Linux 机器并窃取您的集中数据。有关更多信息,请参阅 Linux 安全 HOWTO。

  3. smbmount 程序在 Linux 的不同发行版中往往略有不同。因此,如果本文中的脚本对您不起作用,请查看 man 页面,了解您的 smbmount 版本如何处理其命令行选项。

  4. 必须教导 Windows 计算机的用户将其数据保存在中央目录(例如“users”或“data”)下,而不是分散在硬盘驱动器上的几个随机目录中。有些人太懒惰,不愿将其文件移动到中央目录,尽管这只需要五秒钟。您可能必须在他们甚至开始使用中央目录之前实际移动他们的文件。但是,请记住,这些用户可能是数据丢失方面对您的组织最大的威胁,因为他们从不费心制作自己的数据备份副本。

  5. 最后,硬盘驱动器是放置不可替代数据备份的非常实用的场所。我的存档文件使用的硬盘空间不到 400MB,但包含超过 1.5GB 的数据。但是,您可能需要考虑为您的 Linux 机器获取一个大容量可移动驱动器。有了这个,您可以偶尔将存档文件从硬盘复制到可移动磁盘,并在机器发生物理损坏或被盗时将其带回家。

结论

对于许多联网计算机上不可替代的数据文件,基于 Linux 的网络备份系统经济高效、可靠、易于设置、易于扩展且极其实用。只需一个小时的时间,您就可以在硬盘崩溃的情况下为您的团队或公司节省数千美元。目前,我的 Pentium 150 工作站保存了来自分布在三个建筑物和两个子网的八台计算机的多年关键任务数据的存档。由于在脚本中使用了 shell 变量,因此我只需不到两分钟即可向系统添加一台新计算机。

这是 Linux 天生就应该做的任务。您可以采用一台旧的剩余计算机,使其成为“无头”计算机,没有键盘或显示器,并将其放在壁橱中的某个地方,让它默默无闻地工作。您也可以在您的个人工作站上运行它,因为 Linux 工具可以在后台运行。如果您需要将文件恢复到崩溃的计算机,或者只是取出硬盘并将其放入 Windows 机器中,您可以在 Linux 机器上即时设置 FTP 服务器。由于 Linux 的设计目的是与许多不同的计算机和操作系统共存,因此可以调整脚本以备份许多不同类型的计算机,包括通过 NFS 的其他 Linux 机器,甚至使用 netatalk 和 hfs 软件包的 MacIntosh 计算机。

资源

A Linux-Based Automatic Backup System
Michael O'Brien 是新墨西哥大学的光学专业研究生。计算机既是爱好又是工具,最终帮助他完成工作。他在业余时间管理着一个小型的计算机房,并喜欢在 Usenet 新闻组上帮助 Linux 用户。可以通过 mobrien@unm.edu 联系到他。
加载 Disqus 评论