在整个描述中,我将使用 ``msdos
`` 和 ``linux
`` 来指代两台机器。“``msdos
``” 是指拥有磁带驱动器的机器,通常运行 MS-DOS。“``linux
``” 是指您尝试备份磁盘或恢复到磁带驱动器的 Linux 机器。为了简单起见,即使第一台机器启动并运行 Linux,我仍将其称为 “``msdos
``”。此外,本文档中的所有路径名都应被视为相对于 Linux 机器,并且搜索和救援 (SAR) 磁盘已挂载到系统中的某个位置。这意味着文件 /etc/passwd
是您的 Linux 机器硬盘驱动器的密码文件,而例如 /tape144/etc/passwd
是软盘上的相应文件。
我正在使用 Karel Kubat 的备份脚本,版本 1.03,可在以下网址获取:
ftp://sunsite.enc.edu:/pub/Linux/system/Backup/backup-1.03.tar.gz
在本文档中,我将这些脚本简称为 “``备份脚本
``”。您不必为了自己的磁带备份而使用这些脚本。我喜欢这些脚本,因为它们使用 afio 来形成压缩文件的未压缩存档,而不是未压缩文件的压缩存档。如果恢复期间出现介质读取错误,前者要安全得多。据我了解,Karel 不再支持 backup,现在推出了 'tob',即面向磁带的备份。虽然我没有亲自尝试过这个新软件包,但它不会对这里概述的步骤产生重大影响。首先,获取 ftape 模块。它是所有现代内核的一部分,但如果您使用的是旧内核,您可以在以下网址找到该模块:
ftp://sunsite.unc.edu/pub/Linux/kernel/tapes/ftape-2.05.tar.gz
接下来,获取一张 Slackware 启动盘(我拿到的是网络盘,但差别不大)和 tape144
根磁盘,并将镜像放到 3.5 英寸软盘上。ftape
模块只有在安装到编译它的内核中才能工作。我无法让 tape144
根磁盘上的 ftape.o
模块工作,我认为是因为该模块已被剥离符号,无法安装。因此,您现在必须创建一个新的内核,其中包含网络和 ftape 支持,如果您运行的是旧内核,还需要一个新的 ftape.o
。请阅读随 ftape
存档提供的说明,了解此阶段的指导。请记住,您编译的内核必须支持 Linux 机器和 MS-DOS 机器上的以太网卡。
将新创建的内核镜像复制到网络启动盘上的镜像之上。使用 /bin/cp
,不要使用 “``dd
``” 命令创建启动盘,就像创建可启动内核镜像一样。写保护启动盘,并将其标记为:SAR#1。
现在,挂载 tape144
根磁盘。我假设挂载点是 /tape144
,以避免文件名混淆。我们需要释放它上面的一些空间,因此删除以下文件:
/tape144/bin/dialog
/tape144/bin/elvis
/tape144/bin/vi
/tape144/boot/ftape.o
现在,创建一个新文件:
/tape144/etc/exports
其中包含以下行:
/mnt msdos(ro)
其中 “``msdos
``” 应替换为安装了磁带驱动器的 MS-DOS 机器的名称或 IP 地址。接下来,为了避免依赖域名服务器,请将包含 Linux 和 MS-DOS 机器名称和 IP 地址的行添加到文件 /tape144/etc/hosts
中。例如,我的文件包含以下两行:
128.100.75.114 caliban.physics.utoronto.ca caliban caliban.physics
128.100.75.111 ariel.physics.utoronto.ca ariel ariel.physics
现在,inetd 配置存在一些问题。我们必须在其中放入 rsh 守护进程的完整路径名。将 /tape144/etc/inetd.conf
的第 19 行更改为:
shell stream tcp nowait root /usr/etc/tcpd /usr/etc/in.rshd
将本地网络路由信息添加到 /tape144/etc/rc.d/rc.inet1
,以使 MS-DOS 机器能够使用网络。此信息的格式取决于您的网络配置,您可以直接从您的 Linux /etc/rc.d/rc.inet1
中复制相应的格式。对于我的网络,需要添加的行是:
/etc/ifconfig eth0 128.100.75.111 broadcast 128.100.75.0 netmask 255.255.255.0
/etc/route add -net 128.100.75.0 netmask 255.255.255.0
ifconfig 条目中的 IP 地址是 MS-DOS 机器的 IP 地址。现在,将此文件复制到 /tape144/etc/rc.d/rc.inet1-l
中,并将新文件中的 IP 地址更改为反映 Linux 机器的 IP 地址,而不是 MS-DOS 机器的 IP 地址。
接下来,剪切掉 /tape144/etc/rc.local
的第 3 行到第 11 行。这是一个 if 语句,用于执行 rc.inet*
文件。我们不希望在启动期间发生这种情况。
创建一个新文件:/tape144/root/.rhosts
,其中包含以下行:
linux root
其中,同样,“``linux
``” 替换为 Linux 机器的完整机器名称(包括域名)或 IP 地址。填写 /tape144/etc/passwd
中 root 登录的密码字段,以防止人们在您进行备份时登录到 MS-DOS 机器。您可以通过从 Linux 机器的 /etc/passwd
文件中复制相应的字段来完成此操作。
将 /usr/bin/rsh 复制到 /tape144/usr/bin。
将以下文件从 /usr/etc
复制到 /tape144/usr/etc
:
in.rshd
rpc.mountd
rpc.nfsd
rpc.portmap
services
tcpd
创建一个新脚本,/tape144/bin/tapesetup
,其中包含以下内容:(将 “``linux
``” 更改为反映您的 Linux 机器名称)。
#! /bin/sh
/bin/sh /etc/rc.d/rc.inet1
/bin/sh /etc/rc.d/rc.inet2
/bin/mount linux:/nfs /mnt
/bin/insmod /mnt/ftape.o
请注意,较新的内核不需要 insmod 行。接下来,创建另一个新脚本,/tape144/bin/msdosset
,如下所示:(将 “``linux
``” 更改为反映您的 Linux 机器名称)。
#! /bin/sh
/bin/sh /etc/rc.d/rc.inet1
/bin/sh /etc/rc.d/rc.inet2
mount linux:/mnt /mnt
/bin/insmod /mnt/ftape.o
如上所述,较新的内核不需要 insmod 行。创建一个可读文件 /tape144/root/notes
,其中包含以下有用的信息,以用于完整恢复:
For a full recovery to a trashed hard disk,
boot the Linux machine with the SAR disks #1 and #2
then type the following:
/bin/sh /etc/rc.d/rc.inet1-l
/bin/sh /etc/rc.d/rc.inet2
/usr/etc/rpc.portmap
/usr/etc/rpc.mountd
/usr/etc/rpc.nfsd
Next, insert SAR disk #3 and type:
mount /dev/fd0 /mnt
Create a new mount point, with:
mkdir /mnt2
and mount your Linux hard disk partition on this point.
You may have to reformat the partition first, if so,
follow the directions in the Linux Installation HOWTO.
The SAR disks contain all the files necessary to do the reformat.
Finally, use disks SAR#1 and SAR#2 to boot up
the MS-DOS machine and run the /bin/msdosset script on that machine.
It will take about a minute to run that script because it is getting
an NSF file from a floppy drive, so be patient.
Now, recover the tape to /mnt2 on the Linux machine.
如果您正在使用备份脚本,则需要将 'afio' 复制到 /tape144/local/bin
子目录中。不必在恢复磁盘上放置其余的备份脚本文件,只需使用 'afio' 和 'gzip' 即可恢复存档。
我无法使用随附的备份脚本。磁带存档似乎可以干净地构建,但无法恢复。我发现删除块大小和转换语句可以修复它。这是对 “``netbackup
``” 脚本的补丁。将此补丁应用于 Linux 机器硬盘上的 'netbackup' 副本以及 SAR 磁盘上的副本。
*** netbackup.orig Mon Jan 9 17:22:32 1995
--- netbackup Mon Jan 9 17:23:25 1995
***************
*** 35,41 ****
"'mknod", devname, "p'");
exec ("su -", USERNAME, "-c",
"'rsh ", REMOTE_HOST,
! "\"dd", "of=" REMOTE_DEVICE, "obs=20k", "conv=sync\"",
"<", devname,
"'&"
);
--- 35,41 ----
"'mknod", devname, "p'");
exec ("su -", USERNAME, "-c",
"'rsh ", REMOTE_HOST,
! "\"dd", "of=" REMOTE_DEVICE, "\"",
"<", devname,
"'&"
);
***************
*** 50,56 ****
"'mknod", devname, "p'");
exec ("su", USERNAME, "-c",
"'rsh ", REMOTE_HOST,
! "\"dd", "if=" REMOTE_DEVICE, "ibs=20k", "conv=sync\"",
">", devname,
"'&"
);
--- 50,56 ----
"'mknod", devname, "p'");
exec ("su", USERNAME, "-c",
"'rsh ", REMOTE_HOST,
! "\"dd", "if=" REMOTE_DEVICE, "\"",
">", devname,
"'&"
);
您现在已完成 SAR 磁盘 #2。写保护它。
接下来,挂载一个干净的、格式化的磁盘(使用 fdformat
和 mkfs
创建)。将 ftape.o
文件复制到其上,并将其标记为 SAR#3。出于某种原因,如果您写保护此磁盘,事情会变得糟糕,因此请保持其写入启用状态。
在 Linux 机器上,为 NFS 文件服务创建一个新目录。我创建了一个目录:
/nfs
将 ftape.o
(未剥离,大约 500+ kB)放入此子目录中。在 Linux 的 exports 文件 /etc/exports
中创建一个条目:
/nfs msdos(ro)
请注意,您的 NFS 目录及其子目录中的所有文件都不安全。其他人可以使用自己的启动盘将 MS-DOS 机器启动到 Linux 中并挂载此目录,因此请确保您不要在您的 NFS 子目录中放置任何敏感信息。重新启动您的 NFS 守护进程,rpc.mountd
和 rpc.nfsd
。它们似乎不太喜欢 SIGHUP
重新启动,因此请杀死它们并重新调用它们。如果您没有在 /etc/rc.d/rc.inet2
中激活这些守护进程,您可能需要立即执行此操作。
好的,现在我们都准备好备份和恢复了。要从 Linux 机器进行完整备份,请使用 SAR#1 启动 MS-DOS 机器。当提示插入第二张磁盘时,加载 SAR#2。以 root 用户身份登录,并执行脚本:/bin/tapesetup
。注销 MS-DOS 机器。如果您正在使用备份脚本,则 netbackup 命令现在可以工作。您也可以在 GNU tar
、cpio
或 mt
上使用 “``-f msdos:/dev/ftape
``” 开关,并以这种方式进行备份。如果您有一个备份程序,它只能写入本地文件,请执行以下操作。假设备份程序名为 “``localbackup
``”,并写入由其命令行参数表示的文件:
mknod /tmp/tapepipe p
rsh msdos dd of=/dev/ftape < /tmp/tapepipe &
localbackup /tmp/tapepipe
完成后,删除 /tmp/tapepipe
。恢复到活动的 Linux 机器:netbackup
脚本、tar
、cpio
等都可以在操作员无需特殊操作的情况下工作。如果您有一个从文件恢复的本地恢复程序,请执行以下操作:
mknod /tmp/tapepipe p
rsh -n msdos dd if=/dev/ftape >> /tmp/tapepipe &
localrecovery /tmp/tapepipe
并在完成后删除 /tmp/tapepipe
。请注意,我正在使用 'rsh
' 连接到 MS-DOS 机器上的 root 用户。这适用于正确的 .rhosts
条目。“tape144
” 磁盘上的配置允许 rsh
连接到 root,但不允许 telnet
或 rlogin
连接到 root,登录仅限于控制台。这对安全有利。
如果您担心 root .rhost
文件,您可以在 SAR#2 上创建一个新用户 “``tapeuser
``”,该用户具有操作磁带驱动器的权限,但没有操作磁盘的权限(创建一个新组并将 tapeuser 放入该组,然后 chown
和 chmod
文件 /dev/rft*
和 /dev/nrft*
)。然后,您的备份程序必须知道 rsh
连接到该用户名而不是 root。当然,现在 SAR#2 上的 ~tapeuser
中必须有一个 .rhosts
文件。就我个人而言,我选择了这条路线,而不是 root .rhosts
。
最后,是关于完全恢复到损坏的硬盘的说明。这假设 Linux 分区完全无法恢复。如有必要,请按照 Linux 安装 HOWTO 中的描述重新格式化该分区。从 SAR 磁盘 #1 启动 Linux 机器。当提示时,插入磁盘 #2。现在,按照文件 /root/notes
中的说明进行操作(当它挂载在您的 Linux 机器上时,它是 /tape144/root/notes
)。一旦两台机器都启动,运行您需要的恢复例程。如果您正在运行备份脚本,您可以按如下方式操作:
rsh -n msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 -
或
rsh -n -l tapeuser msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 -
或
mknod /tmp/backpipe p
rsh -n msdos dd if=/dev/ftape >> /tmp/backpipe &
afio -i -v -Z -c 1024 /tmp/backpipe
afio
会接收它。“-i
” 开关告诉它相对于当前工作目录(即硬盘分区的根目录)恢复文件。“-v
” 是 verbose,列出正在恢复的文件。“-Z
” 告诉 afio 这是一个单独压缩文件的存档。“-c 1024
” 告诉它使用 5 MB 的流式缓冲区,以避免大量的磁带倒带。