Linux 备份

作者:Yusuf Nagree

目前,PC(以及 Linux)主要有三种磁带驱动器。它们分别是基于 SCSI 接口的、基于软盘驱动器接口的(QIC-40、QIC-80、QIC-117、QIC-3010 和 QIC-3020)以及 QIC-02 型驱动器。一种连接到 IDE 接口的新型磁带驱动器正在出现,但目前 Linux 对其支持还很有限。Linux 不支持连接到并行端口的驱动器。

您不能简单地将磁带驱动器连接到您的机器上,就期望 Linux 自动识别它。您需要告知内核,这可能需要重新编译内核。此外,您需要在 /dev 目录中添加条目,以便 Linux 下的程序可以访问磁带驱动器。

下面,我将描述如何设置两种最常见的磁带驱动器类型。

软盘接口磁带驱动器

连接到软盘驱动器接口的磁带驱动器的优点是不需要单独的接口卡;因此,它们相当便宜且可靠。因此,这种磁带驱动器非常受欢迎。

最早的此类磁带驱动器之一是 Colorado Jumbo 250。这些驱动器的磁带驱动器电缆连接到软盘驱动器接口。QIC-80 规范定义了如何访问这些磁带驱动器。许多其他磁带驱动器,包括 Iomega 250、Conner C250MQ、Wangtek 304 和 Colorado Jumbo 350,都与 QIC-80 兼容。

使用 QIC-80 规范的磁带驱动器需要一个程序(实际上是一个“可加载内核模块”),名为 ftape,由 Bas Laarhoven 和 Kai Harrekilde-Petersen 编写,在撰写本文时,版本为 2.03b。ftape 也支持 QIC-117 和 QIC-40 格式,以及实验形式的 QIC-3010 和 QIC-3020(即 QIC-WIDE)。可以在 ftape 源代码发行版中的 vndors.h 文件中找到 ftape 支持的磁带驱动器的完整列表。还提供了对某些增强型控制器板的支持——特别是 Iomega Tape Accelerator、Colorado FC-10 和 Mountain MACH-2。尚不支持 FC-15 和 FC-20 高速 Colorado 控制器板。

大多数 Linux 发行版都包含 ftape;如果您的发行版没有,您将需要下载它(请参阅磁带资源侧边栏)。除非您在内核中使用模块版本支持(如果您不明白这意味着什么,您可以假设您没有使用它),否则每次更新内核时,都需要重新编译 ftape。

编译 ftape

首先,转到您的源代码目录并解压缩源代码

:$ cd /usr/local/src
$ tar xzf ftape-2.03b.tar.gz

您将得到一个名为 ftape-2.03b 的目录;所有 ftape 源代码文件以及一些文档文件都将位于此目录中。您现在需要编译 ftape 以生成文件 ftape.o

$ cd ftape-2.03b
$ make clean
$ make dep
$ make all

接下来,您需要确保您的内核已编译并内置了 ftape 支持。重新编译内核超出了本文的范围(更多详细信息请参阅 Kernel-HOWTO),但基本上,执行

$ cd /usr/src/linux
$ make config

以接受所有选项的所有默认值(当然,除非您 确实 想要更改它们),当您看到 QIC-117 选项时,回答 Y。将 NR_FTAPE_BUFFERS 保留为默认值 3。然后重新编译内核(通常是 make clean dep; make zImage)并安装新内核。如果您使用 lilo,请不要忘记重新运行 lilo。

如果您使用的是非常新的内核(1.3.30 及更高版本),您将必须使用 zftape。zftape(由 Claus Heine 编写)基于 ftape,但为较新内核提供的动态加载缓冲区提供支持。它的编译方式与 ftape 完全相同。它的安装方式也与 ftape 相同,只是您将使用名称 zftape 而不是 ftape。配置内核时,您不会被问及有关 QIC-117 选项或 NR_FTAPE_BUFFERS 的任何问题。

即使您没有使用最新的内核,zftape 也比基本的 ftape 包提供了一些非常好的增强功能,包括软件压缩,并且非常值得升级以获取它。

创建设备

接下来,您需要确保 /dev 条目已为 ftape 正确创建。再次,如果您有 Linux 发行版,则很可能已经完成此操作,否则;您将必须手动创建它们。执行

$ ls /dev/*rft* /dev/*tape*

您应该至少拥有以下文件

/dev/rft0
/dev/nrft0
/dev/ftape
/dev/nftape

如果您没有,请创建它们(您必须是 root 用户)

$ mknod -m 666 /dev/rft0 c 27 0
$ mknod -m 666 /dev/nrft0 c 27 4
$ ln -s /dev/rft0 /dev/ftape
$ ln -s /dev/nrft0 /dev/nftape

或者,如果您的 /dev/ 目录中有一个名为 MAKEDEV 的脚本,您可以简单地运行此脚本来正确创建您的设备。

$ cd /dev
$ ./MAKEDEV ftape

如果您正在使用 zftape 包,则还需要某些其他设备名称。它们可以从 zftape Makefile 中创建,方法是

$ make mknod
$ ln -s /dev/rft0 /dev/ftape
$ ln -s /dev/nrft0 /dev/nftape
$ ln -s /dev/qft0 /dev/qftape
$ ln -s /dev/nqft0 /dev/nqftape
安装 ftape

接下来,您需要确保您拥有模块实用程序。这组实用程序允许加载 ftape 驱动程序,以便内核可以访问它。您将需要程序 insmod,它应该在 /sbin 中。如果您没有它,请获取最新版本(请参阅磁带资源),编译它(非常容易),然后安装它。

$ tar xzf modules-xx.xx.tar.gz
$ cd modules-xx.xx
$ make clean
$ make
$ make install

请注意,如果您使用的是 modules-1.1.87,则必须将 insmod.c 和 insmod.h 替换为 ftape 发行版中提供的版本。为避免这些问题,请获取最新模块的副本,其中还包含许多其他错误修复。

在使用磁带驱动器之前,您必须加载 ftape 程序。您必须是 root 用户才能执行此操作。

$ insmod ftape.o

每次启动 Linux 时都必须这样做。如果您经常进行磁带驱动器工作,最好将其包含在您的 rc.local 启动脚本中,以便每次启动时自动加载磁带驱动程序。

磁带准备

在 Linux 中使用新磁带需要两个步骤。磁带必须进行低级格式化。您实际上可以购买预格式化的磁带(它们只需额外几美元,非常值得),但是如果您购买了未格式化的磁带,则必须自己格式化它。没有 Linux 程序可以格式化磁带,因此必须在 DOS、OS/2 或 WINDOWS 下完成。已知可以正确格式化磁带的 DOS 程序包括 Norton Backup、Colorado Systems Backup Program(随 Jumbo 驱动器一起提供)和 Conner Backup Basics。

接下来,必须准备磁带以供 ftape 使用,ftape 必须写入标头和扇区映射。您可以使用 mt 来进行此准备(称为擦除磁带)。

$ mt -f /dev/ftape erase

mt 作为 GNU 的 cpio 包的一部分提供。请参阅下面的位置。

如果您正在使用 zftape,则您的设备名称为 /dev/qftape,因此,您需要发出

$ mt -f /dev/qftape erase
常见问题
  • PCI 主板 一些 PCI 主板在使用 ftape 时存在问题。困难似乎在于 BIOS 中的保证访问定时 (GAT) 选项。必须禁用此选项,ftape 才能正常工作。请注意,一些较新的 Intel 主板(1.00.10AX1 及更高版本)已永久禁用此设置。

  • insmod 提示“kernel version 错误” 如上所述,ftape 只能与编译时正在运行的内核一起使用。每次更改内核版本时,您都需要重新编译 ftape。

  • 无法使用软盘 因为磁带驱动器和软盘驱动器都使用 IRQ 6,所以不可能同时使用磁带驱动器和软盘驱动器。因此,如果您尝试在使用 ftape 时使用软盘,您将收到错误消息。同样,如果您尝试在挂载软盘时安装 ftape,您将收到错误。这是一个硬件限制,与 ftape 无关。

  • ftape 在访问磁带后似乎挂起 早期版本的 ftape 在重试错误方面存在问题。更新到最新的 ftape(目前为 v2.03)通常可以解决这些问题。

  • 没有这样的设备错误 当尝试使用 tar 或其他访问磁带驱动器的程序时,您会收到“没有这样的设备错误”。这是因为您没有按照上述说明使用 insmod 安装 ftape 驱动程序。

  • 没有这样的文件或目录 当尝试使用 tar 或其他访问磁带驱动器的程序时,您会收到“没有这样的文件或目录”错误。这是因为您的 /dev 目录中没有 /dev/ftape 和 /dev/rft0 条目。使用 MAKEDEV 或使用上面概述的方法创建它们。

SCSI 磁带驱动器

SCSI 磁带驱动器可能难以(或非常容易)使其工作,但它们通常更快、更可靠,并且同时使用软盘和磁带驱动器没有问题。缺点是它们通常比软盘驱动器同类产品贵得多。

编译 SCSI 支持

您必须确保您正在运行的内核已启用对您的 SCSI 适配器的支持。更改到内核目录并启动内核配置脚本

$ cd /usr/src/linux
$ make config

ENTER 键接受所有选项的默认值,直到您看到问题 CONFIG_SCSI。为此选项键入 Y。按 ENTER 键,直到您看到问题 CONFIG_CHR_DEV,并为此选项键入 Y。继续按 ENTER 键,直到您看到您的 SCSI 适配器,并对此问题回答 Y。然后,您必须重新编译内核,如上所述。

启动时,您现在应该收到类似于以下内容的消息(数字和详细信息当然可能会有所不同)

Detected SCSI tape st0 at scsi0 id 4, lun 0
scsi: Detected 1 SCSI tape 1 SCSI disk total
创建设备

接下来,您需要确保 SCSI 设备已在您的 /dev 目录中创建。再次,如果您有 Linux 发行版,则很可能已经完成此操作。否则,您将必须手动创建它们。执行

$ ls /dev/*st*

您应该至少拥有以下文件

/dev/st0
/dev/nst0

如果您没有,请创建它们(您必须是 root 用户)

$ mknod -m 666 /dev/st0 c 9 0
$ mknod -m 666 /dev/nst0 c 9 128

请注意,以上假设您正在使用 SCSI 总线上的第一个磁带。如果您有两个磁带,并且想要使用第二个磁带,请将设备名称更改为 /dev/st1 和 /dev/nst1 并创建它们

$ mknod -m 666 /dev/st1 c 9 1
$ mknod -m 666 /dev/nst1 c 9 129

如果您有更新的发行版,则很可能在您的 /dev 目录中可以使用 MAKEDEV 脚本。您只需运行该脚本即可创建所有相应的设备

$ cd /dev
$ ./MAKEDEV st0
磁带准备

与软盘磁带驱动器磁带不同,SCSI 磁带通常不需要格式化。但是,它们可能需要在 Linux 下使用前擦除。要擦除磁带,请执行

$ mt -f /dev/st0 erase

但是,DAT 磁带不需要擦除。确定特定磁带是否需要擦除的最简单方法是尝试在不先擦除的情况下使用它。如果可以,那就很好;如果不行,您将必须在使用前擦除。

设备名称

访问磁带驱动器与访问硬盘上的文件非常相似,只是磁带驱动器有两个文件名。对于 ftape,这两个名称通常是 /dev/ftape 和 /dev/nftape。如果您使用 zftape,则这两个设备名称通常是 /dev/qftape 和 /dev/nqftape。对于 SCSI,第一个 SCSI 磁带设备的名称是 /dev/st0 和 /dev/nst0,第二个 SCSI 磁带设备的名称是 /dev/st1 和 /dev/nst1,依此类推。

当通过第一个文件名(/dev/ftape、/dev/qftape 或 /dev/st0)访问磁带驱动器时,我们称之为访问倒带设备。当磁带驱动器关闭时,磁带会自动倒回到开头。当通过第二个文件名(/dev/nftape、/dev/nqftape 或 /dev/nst0)访问磁带驱动器时,我们正在使用非倒带设备,当磁带驱动器关闭时,磁带将停留在原地。

某些应用程序需要同时使用这两个设备,您将需要指定正确的名称。

使用 tar 进行测试

现在您已经为磁带驱动器设置了系统,您将需要对其进行测试。GNU tar 是 Linux 下事实上的备份标准,并且随所有发行版一起提供。如果您没有它,请从您附近的站点获取它。

在下面的示例中,我将使用 dev_name 来指示您的设备名称。如上所述,如果您使用 ftape,则它可能是 /dev/ftape;如果您使用 zftape,则它可能是 /dev/qftape;如果您使用 SCSI 驱动器,则它可能是 /dev/st0。

将新准备好的磁带放入磁带驱动器中,然后尝试进行小型备份

$ tar cf dev_name /etc

这应该备份您的 /etc 目录。您现在可以检查备份是否正确完成,方法是

$ tar df dev_name

请注意,如果您使用 ftape,则由于当前驱动程序中的限制,您不能使用 tar 的 Ar 选项。也就是说,您不能将文件附加到存档。您将必须使用 mt 将磁带移动到某个存档的末尾,然后再创建另一个存档。

更详细的 tar 介绍在 Linux 的 Tar 和 Taper 文章中提供。

请注意,以上站点非常繁忙。为了保持您的理智并最大限度地减少网络流量,请找到您附近的镜像(有很多)并使用它。如果 tsx-11 和 sunsite 在繁忙时尝试登录,它们都会打印镜像列表。

更多信息

HOW-TO 是宝贵的信息来源。ftape 和 SCSI 都有 HOW-TO。

Yusuf Nagree 是一名兼职医生和全职 Linux 黑客(啊——抱歉,全职医生和兼职 Linux 黑客)。自从他父亲在 1980 年给他买了一台 ZX-80 以来,他一直是一名计算机爱好者,并且多年来拥有各种计算机。厌倦了 DOS、OS/2 和 Windows,他发现 Linux 最令人愉快的地方是社区精神和帮助和分享知识和经验的普遍意愿。

加载 Disqus 评论