Next Previous Contents

2. 方法

在这份文件的各处,我将会提到两个机器如 ``msdos'' 与 ``linux''。``msdos'' 是机器的名称,它必须拥有一个磁带机,而通常执行 MS-DOS。``linux'' 是你尝试去藉由磁带机来备份或恢复它的磁盘的 Linux 机器。 为简单起见,我将第一部机器称做 msdos'' 即使它在执行 Linux。 此外,所有文件中的路径﹝path﹞名称应该加以考虑 Linux 机器与搜寻及救援﹝Search-And-Rescue (SAR)﹞的磁片装置于何处,两者在系统上的相对的关系。 那意谓著如果文档 /etc/passwd 是一个你的 Linux 机器的硬盘中的加密文档﹝password file ﹞,此时在这种情况,/tape144/etc/passwd 是在软盘机上的相对应文档。

我使用 Karel Kubat 的备份命令稿﹝scripts﹞,版本数 1.03,可于此处得到

ftp://sunsite.enc.edu:/pub/Linux/system/Backup/backup-1.03.tar.gz
在文件各处,我将会简单的提及这些``备份命令稿''。 你不一定需要使用这个命令稿来备份你的东西到磁带机上。 我喜欢这些命令稿, 因为他们使用 afio 把压缩档解压备份, 而不是把文档压缩备份. 前者比较安全, 因为 restore 时若有一点读取错误, 不会造成所有文档复原失败。我听闻 Karel 不再支持﹝supporting﹞文档备份,但现在有产品 'tob' 或磁带导向﹝tape oriented﹞的文档备份。 虽然我自己并未尝试过新的套装软件,它不可能与此处程序的描述要点有重要的差异。

所有的起头,获得 ftape 模块﹝module﹞。它是所有现代核心的一部份,但如果你使用较旧的核心,你可以在此处找到这个模块:

ftp://sunsite.unc.edu/pub/Linux/kernel/tapes/ftape-2.05.tar.gz
接下来,取得 Slackware 开机磁盘 ﹝我使用网路磁盘,但这没什么不同﹞与 tape144 根磁盘,提供翻版﹝the images ﹞有关 3"1/2 软盘机。

要用 ftape 这个模块,它的版本一定要和你在编译 ftape 时用的那个核心的版本一样才行。 我不能在 tape144 根磁盘﹝ root disk﹞使用 ftape.o 模块,我想是因为该模块为符号﹝symbols ﹞所剥夺﹝stripped ﹞而没有安装。所以你现在必须自网路取得支持 ftape 新 ftape.o 的新核心﹝如果你使用旧的核心﹞。 详读随 ftape 文档传送的指引来指导此阶段。 记住,你所编译的核心必须支持 Linux 与 MS-DOS 两台机器的乙太网路卡。

复制较新的核心副本覆盖网路开机磁盘上的。 使用 /bin/cp,而非利用 ``dd'' 命令建立一个开机磁盘,如同你建立一个可开机的核心副本﹝kernel image﹞。 将开机磁盘写上保护,标识它为 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# 来取代。

然后,如此你不需要去依赖姓名伺服器﹝name server﹞,加入几行 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 配置﹝configuration﹞这类的问题。我们在它中输入 rsh daemon 完整的路径。 改变 /tape144/etc/inetd.conf 中第十九行成为:

shell   stream  tcp     nowait  root    /usr/etc/tcpd   /usr/etc/in.rshd

加入局部网路﹝local net ﹞通讯路径信息到 /tape144/etc/rc.d/rc.inet1,让 MS-DOS 的机器能使用网路。 这格式﹝format ﹞依靠你的网路配置而定,你可以自你的 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 机器的那个。

现在,复制这个文档到 /tape144/etc/rc.d/rc.inet1-l,并且在新的文档改变 IP# 在此文档中可反应此为 Linux 机器而 不是 MSDOS 机器.

再来,剪下 /tape144/etc/rc.local中的第 3 到第 11 行。 那是个执行文档 rc.inet* 的指令。 我们不希望这事在开机的时候发生。

建立一个新的文档:/tape144/root/.rhosts 包括此行:

linux root
此处,再一次的, ``linux'' 代表替代所有的机器名称﹝包括领域﹝domain﹞﹞或 Linux 机器的 IP#。

/tape144/etc/passwd 的密码区域填入密码给 root login,并且你在做备份时, 避免别人 login 到 MS-DOS 机器。 你可以藉由自你 Linux 机器的 /etc/passwd file 复制对应的领域来达成。

复制 /usr/bin/rsh into /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,它包括用来完全复原时此处所列的有用信息:

为了完全复原一个垃圾硬盘,使用 SAR 磁片 #1 与 #2 来将你的 Linux 机器开机,然后如下输入:

   /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

接下来,插入 SAR disk #3 且输入:

   mount /dev/fd0 /mnt

建立一个新的安装点﹝mount point﹞,以:

   mkdir /mnt2

并安装﹝mount ﹞你的 Linux 硬盘分割区在这个 点﹝point﹞上。
首先你可能需去重新格式化﹝reformat ﹞分割区。如果如此,依循记述在 Linux 安装 HOWTO﹝Linux Installation HOWTO﹞中的方法。
SAR 磁片包括了所有执行重新格式化时所需的文档。

最后,使用磁片 SAR#1 与 SAR#2 将 MS-DOS 机器开机,并且在那个机器上执行 /bin/msdosset 命令稿。
它可能需要耗费一点时间去执行那个命令稿,因为它必须由软盘机上取得 NSF 文档,所以请忍耐片刻。
现在,在 Linux 机器上由磁带机重建 /mnt2。

如果你使用备份命令稿﹝backup scripts ﹞,你将必须复制 'afio' 到 /tape144/local/bin 子目录。 此备份命令稿文档不需要在重建的磁盘上有暂存空间,文档﹝archive ﹞可以仅使用 'afio' and 'gzip' 就可以重建。

当它们送来时,我还不会使用备份命令稿。 这个磁带备份似乎完整无缺 ,但无法复原(救回)。我发现升级区块容量﹝block size ﹞与转变指令来修正它。 这里所示的是 ``netbackup'' 命令稿的片段。 利用这个修补程序来更改 Linux 机器硬盘上的和 SAR 磁盘上的 netbackup 程序。

*** 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。 请加上防写保护。

接下来,插入一个乾净的、格式化完成的磁片﹝利用 fdformatmkfs 来建立﹞。 复制 ftape.o 文档到磁片上,并且标识为 SAR#3。 如果你对此磁片采用防写保护,因著某些理由,事情将会变糟。 所以请让它可以写入。

在 Linux 机器上,为 NFS 文档服务建立一个新的目录。 我建了一个目录:

/nfs
ftape.o ﹝unstripped,约 500+ kB﹞,至此子目录。 在你的 Linux 的输出文档 /etc/exports 上建立一个登录﹝entry ﹞:
/nfs    msdos(ro)
注意!你的 NFS 目录与其子目录的所有文档均为非安全的。 某些人也能够利用他自己的开机磁片来开启 MS-DOS 机器进入 Linux 并 mount 这个目录。 如此一来,你不要放置任何敏感的东西在你的 NFS 子目录。

重新启动你的 NFS 驻留程序﹝daemons﹞rpc.mountdrpc.nfsd。 它们似乎无法用 SIGHUP 重新启动,所以删除它们然后再重新引用﹝reinvoke ﹞它们。 如果你并不是使用这些驻留程序在你的 /etc/rc.d/rc.inet2,你现在或许要去用它。

好了,现在我们完成了备份与重建所有的设定。 完全备份 Linux 机器,利用 SAR#1 来开启你的 MS-DOS 机器。 当出现第二片的提示时,放入 SAR#2 读取。 使用 root 登录,执行命令稿:/bin/tapesetup。 登出 MS-DOS 机器。 如果你使用备份命令稿,则程序 netbackup 现在将会运作。 你也可以使用 ``-f msdos:/dev/ftape'' 启动 GNU tarcpiomt,并利用此法制作你的备份。 如果你拥有备份程序,但它仅可以写成局部文档﹝local file﹞,如下操作。 假定该备份程序被称为``局部备份﹝localbackup﹞'' ,写入的文档藉由该程序命令列的引数﹝argument﹞来表示:

mknod /tmp/tapepipe p
rsh msdos dd of=/dev/ftape < /tmp/tapepipe &
localbackup /tmp/tapepipe
当它完成,删除 /tmp/tapepipe

复原到一个活的﹝live ﹞Linux 机器: netbackup 命令稿、tarcpio 与其他相似的在除了部分操作者使用的特别动作外将可完成全部的工作。 如果你拥有一个备份程序,但它仅能写到局部文档﹝local file﹞, 执行:

mknod /tmp/tapepipe p
rsh -n msdos dd if=/dev/ftape >> /tmp/tapepipe &
localrecovery /tmp/tapepipe
删除 /tmp/tapepipe 在你完成之后。

留心我使用 'rsh' 成为在 MS-DOS 机器上的基本使用者。 一个正确的 .rhosts 项目可以工作正常。 这个在 'tape144' 磁盘上的配置准许 rsh 成为一个 root,但不准许 telnetrlogin 成为 root,控制台﹝console﹞的登入是被限制的。 如此有益于安全性。

如果你担心基础的 .rhost 文档,你可以建立一个新的使用者 ``tapeuser'' 在 SAR#2 上,以准许来操作磁带机但并非磁盘﹝建立一个新的群组﹝group ﹞并将 tapeuser 置于该群组,然后 chownchmod 文档 /dev/rft*/dev/nrft*﹞。 你的备份程序当时应该能了解 rsh 这个名字相较于 root 更适合。 当然目前得有一个 .rhosts 文档在 ~tapeuser 在 SAR#2。 在我自己的使用,相较于一个基础 .rhosts 我会选择此种方法。

终于,这份文件圆满的复原一个垃圾硬盘。 假定现在 Linux 分割趋势完全不能复原的。 如果有需要,像 Linux 安装 HOWTO上说的重新格式化该分割区。 自 SAR 磁片 #1 启动 Linux 机器,当出现提示,插入磁片 #2。 现在,依循在文档 /root/notes 中的叙述﹝这里是 /tape144/root/notes ,在当它被安装上你的 Linux 机器时﹞。 一但两台机器都被启动完成,执行你需要的复原惯例﹝ recovery routine ﹞。 如果你是使用备份命令稿,你可以如下操作:

  1. 改变你将恢复的硬盘安装点的指南﹝directory ﹞。
  2. 如果任一 mounted volumnes 已在此备份上, 而你想把它们复原,你只要在硬盘上建一些 mount point, 然后把备份 mount 在这些 mount point 上。
  3. 输入命令:
    rsh -n msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 -
            
    
    or
    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
            
    
这里是读取在远方机器上的磁带机,将结果写到 stdout,那是 afio 所点取的地方。 '-i' 参数告诉它用相对于'目前目录'来 recover ﹝此处是硬盘分割区的根目录﹞。 '-v' 是很冗长的,列出它们复原的文档清单。 '-Z' 告诉 afio ,此为一个各别的压缩文档。 '-c 1024' 告诉它使用 5 MB 的流动缓冲区来避免太多的磁带转回动作。
Next Previous Contents