18.9.备份基础

为了有能力从磁盘故障、意外文件删除、随机文件损坏或机器完全毁坏(包括现场备份的毁坏)中恢复,实施一个备份计划是至关重要的。

备份类型和时间表将有所不同,这取决于数据的重要性、文件恢复所需的粒度以及可接受的停机时间的多少。一些可能的备份技术包括:

  • 整个系统的档案,备份到永久的、异地的媒体上。这提供了对上述所有问题的保护,但恢复起来很慢而且不方便,特别是对非特权用户。

  • 文件系统快照,这对恢复已删除的文件或以前的文件版本很有用。

  • 整个文件系统或磁盘的副本,使用预定的 net/rsync 与网络上的另一个系统同步。

  • 硬件或软件 RAID,当一个磁盘发生故障时,可以最大限度地减少或避免停机。

通常情况下,要混合使用各种备份技术。例如,人们可以创建一个时间表,自动进行每周一次的全系统备份,并将其存放在异地,同时用每小时的 ZFS 快照来补充这一备份。此外,在进行文件编辑或删除之前,可以对个别目录或文件进行手动备份。

这一节描述了一些可以用来创建和管理 FreeBSD 系统上的备份的实用程序。

18.9.1 文件系统备份

用于备份文件系统的传统 UNIX® 程序是 dump(8)restore(8) ,前者用于创建备份,后者用于恢复备份。这些工具在磁盘块级工作,低于文件系统所创建的文件、链接和目录的抽象性。与其他备份软件不同,dump 备份的是整个文件系统,不能只备份一个文件系统的一部分或跨越多个文件系统的目录树。dump 不是写文件和目录,而是写构成文件和目录的原始数据块。

注意:

如果在根目录上使用 dump ,它将不会备份 /home/usr 或许多其他目录,因为这些目录通常是其他文件系统的挂载点或这些文件系统的符号链接。

当用于恢复数据时,restore 默认在 /tmp/ 中存储临时文件。当使用 /tmp 较小的恢复盘时,请将 TMPDIR 设置为一个有更多自由空间的目录,以便恢复成功。

当使用 dump 时,请注意它在 1975 年左右的 AT\&T UNIX® 第 6 版中的一些问题仍然存在。默认参数假定备份到 9 轨磁带,而不是备份到其他类型的媒体或今天可用的高密度磁带上。这些默认值必须在命令行中被覆盖。

可以通过网络将一个文件系统备份到另一个系统或连接到另一台计算机的磁带驱动器。虽然 rdump(8)rrestore(8) 工具可以用于这个目的,但它们被认为是不安全的。

相反,我们可以通过SSH连接,以更安全的方式使用 dumprestore 。这个例子创建了一个 /usr 的完整压缩备份,并通过 SSH 连接将备份文件发送到指定的主机上:

例1. 通过 SSH 使用 dump

  1. # /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish
  2. \targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz

这个例子设置了 RSH ,以便通过 SSH 连接将备份写到远程系统的磁带机上:

例2. 使用RSH集通过ssh转储

  1. # env RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0 /usr

18.9.2. 目录备份

有几个内置的工具可用于根据需要备份和恢复指定的文件和目录。

tar(1) 是对一个目录中所有文件进行备份的好选择。这个工具可以追溯到 AT\&T UNIX® 的第 6 版,默认情况下,它假定是递归备份到本地磁带设备。可以用开关来代替指定备份文件的名称。

这个例子创建了一个当前目录的压缩备份,并将其保存到 /tmp/mybackup.tgz 。当创建一个备份文件时,要确保备份不保存在被备份的同一目录下:

例3. 用 tar 备份当前目录

  1. # tar czvf /tmp/mybackup.tgz .

要恢复整个备份,cd 进入要恢复的目录并指定备份的名称。注意,这将覆盖还原目录中任何较新版本的文件。如有疑问,可将其还原到一个临时目录或指定要还原的备份中的文件名称:

例4. 用 tar 恢复当前目录

  1. # tar xzvf /tmp/mybackup.tgz

tar(1) 中有几十个可用的开关。这个工具还支持使用排除模式来指定在备份指定目录或从备份中恢复文件时不应该包括哪些文件。

要使用指定的文件和目录列表来创建备份,cpio(1) 是一个不错的选择。与 tar 不同,cpio 不知道如何进入目录树,它必须被提供要备份的文件列表。

例如,可以用 lsfind 创建一个文件列表。这个例子创建了一个当前目录的递归列表,然后被输送到 cpio ,以便创建一个名为 /tmp/mybackup.cpio 的输出备份文件:

例5. 使用 lscpio 对当前目录进行递归备份

  1. # ls -R | cpio -ovF /tmp/mybackup.cpio

pax(1) 是一个试图结合 tarcpio 所提供功能的备份工具。多年来,不同版本的 tarcpio 变得有些不兼容。POSIX® 创造了 pax ,它试图读写许多不同的 cpiotar 格式,加上自己的新格式。

前面的例子在使用 pax 时等效为:

例6. 用 pax 备份当前目录

  1. # pax -wf /tmp/mybackup.pax .

18.9.3. 使用数据磁带进行备份

在磁带技术不断发展的同时,现代的备份系统倾向于将异地备份与本地可移动媒体相结合。FreeBSD 支持任何使用 SCSI 的磁带机,如 LTO 或 DAT。对 SATA 和 USB 磁带机的支持是有限的。

对于 SCSI 磁带设备,FreeBSD 使用 sa(4) 驱动程序和 /dev/sa0, /dev/nsa0, 和 /dev/esa0 。物理设备的名字是 /dev/sa0。当使用 /dev/nsa0 时,备份程序在写完一个文件后不会倒带,这就允许在一盘磁带上写多个文件。使用 /dev/esa0 会在设备关闭后弹出磁带。

在 FreeBSD 中,mt 被用来控制磁带机的操作,例如在磁带上寻找文件或向磁带上写入磁带控制标记。例如,在写一个新的文件之前,可以通过跳过它们来保留磁带上的前三个文件:

  1. # mt -f /dev/nsa0 fsf 3

这个工具支持许多操作。详情请参考 mt(1)

要用 tar 写一个文件到磁带,指定磁带设备的名称和要备份的文件:

  1. # tar cvf /dev/sa0 file

要从磁带上的tar存档中恢复文件到当前目录:

  1. # tar xvf /dev/sa0

要备份一个 UFS 文件系统,使用 dump 。这个例子备份了 /usr ,完成后没有倒带:

  1. # dump -0aL -b64 -f /dev/nsa0 /usr

以交互方式将文件从磁带上的转储文件恢复到当前目录:

  1. # restore -i -f /dev/nsa0

18.9.4. 第三方备份工具

FreeBSD Ports Collection 提供了许多第三方的实用程序,它们可以用来安排备份的创建,简化磁带备份,并使备份更容易和更方便。这些应用程序中有许多是基于客户/服务器的,可以用来自动备份单个系统或网络中的所有计算机。

流行的实用程序包括 Amanda 、Bacula 、rsync 和 duplicity 。

18.9.5. 紧急恢复

除了定期备份外,建议执行以下步骤作为应急准备计划的一部分。

为以下命令的输出创建一个打印副本:

  • gpart show
  • more /etc/fstab
  • dmesg

把这个打印结果和安装介质的副本保存在一个安全的地方。如果需要紧急恢复,请启动安装介质并选择 Live CD 来访问一个救援 shell 。这个救援模式可以用来查看系统的当前状态,如果需要,可以重新格式化磁盘并从备份中恢复数据。

注意:

FreeBSD/i386 11.2-RELEASE 的安装介质不包括救援 shell 。对于这个版本,请从以下地址下载并刻录Livefs CD镜像: ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-i386-livefs.iso.

接下来,测试救援 shell 和备份。对该过程做记录。将这些笔记与介质、打印件和备份一起保存。这些记录可以防止在执行紧急恢复的压力下不小心破坏了备份。

为了增加安全性,将最新的备份存放在一个与计算机和磁盘驱动器相隔很远的远程位置。