Backup-With-MSDOS mini-HOWTO Christopher Neufeld, neufeld@physics.utoronto.ca v, 5 August 1997 _________________________________________________________________ 此份 HOWTO 记述如何利用 Linux 相容的磁带机安装在 MS-DOS 的机器,来备份 Linux 机器的档案系统 ( filesystem )。 _________________________________________________________________ 1. 前言 / 介绍 2. 方法 3. 备忘录 4. 版权 _________________________________________________________________ 1. 前言 / 介绍 早先我在网上提出如何用 Colorado Jumbo 250 磁带机[tape drive]在 MS-DOS 的机器上备份 Linux 机器这个问题。从我所回收的电子邮件中显示,这 是一个经常被思考的问题。现在我将它整理後,公布作法。如果有任何人想要把 这个放入 HOWTO 文件中,请让我知道。 我要感谢 Jim Nance [ [1]jlnance@isscad.com] 指出 MS-DOS 的机器不一定总是个 MS-DOS 的机器。 这个方法应该也可以运用在任何其他被 ftape 模式所支援的磁带机,及由於适当 明显改变的 SCSI 磁带机 [例如替换 /dev/st0 for /dev/ftape]。 我所设定的标准[criteria]是起源於设定应该尽量安全与相当简单,并只占用 一点或无须MS-DOS 机器上的硬碟空间。它应该也能复原最糟的系统情况,甚至包 括硬碟的遗失,或需要恢复为最原始的 Linux 档案系统。在此记述的方法无须使 用 MS-DOS 机器的硬碟空间,可是那机器需要被指定[assigned ]一个 IP#。你 将需要三片已格式化的1.44 MB 软式磁碟片。 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,可於此处得到 [2]ftp://sunsite.enc.edu:/pub/Linux/system/Backup/backup-1.03.tar.g z 在文件各处,我将会简单的提及这些``备份命令稿''。 你不一定需要使用这个命 令稿来备份你的东西到磁带机上。 我喜欢这些命令稿, 因为他们使用 afio 把压 缩档解压备份, 而不是把档案压缩备份. 前者比较安全, 因为 restore 时若有一 点读取错误, 不会造成所有档案复原失败。我听闻 Karel 不再支援 [supporting]档案备份,但现在有产品 'tob' 或磁带导向[tape oriented] 的档案备份。 虽然我自己并未□试过新的套装软体,它不可能与此处程序的描述 要点有重要的差异。 所有的起头,获得 ftape 模组[module]。它是所有现代核心的一部份,但如果 你使用较旧的核心,你可以在此处找到这个模组: [3]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 安装 HO WTO[Linux Installation HOWTO]中的方法。 SAR 磁片包括了所有执行重新格式化时所需的档案。 最後,使用磁片 SAR#1 与 SAR#2 将 MS-DOS 机器开机,并且在那个机器上执行 /bin/msd osset 命令稿。 它可能需要耗费一点时间去执行那个命令稿,因为它必须由软碟机上取得 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。 请加上防写保护。 接下来,插入一个乾净的、格式化完成的磁片[利用 fdformat 与 mkfs 来建立 ]。 复制 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.mountd 与 rpc.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 tar、cpio 或 mt,并利用此法制作你的备份。 如果你拥有备份程式,但它仅可以写成局部档案[local file],如下操作。 假 定该备份程式被称为``局部备份[localbackup]'' ,写入的档案藉由该程式命 令列的引数[argument]来表示: mknod /tmp/tapepipe p rsh msdos dd of=/dev/ftape < /tmp/tapepipe & localbackup /tmp/tapepipe 当它完成,删除 /tmp/tapepipe。 复原到一个活的[live ]Linux 机器: netbackup 命令稿、tar、cpio 与其他 相似的在除了部分操作者使用的特别动作外将可完成全部的工作。 如果你拥有一 个备份程式,但它仅能写到局部档案[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 ,但不准许 telnet 或 rlogin 成为 root,控制台[console]的登入是被限制 的。 如此有益於安全性。 如果你担心基础的 .rhost 档案,你可以建立一个新的使用者 ``tapeuser'' 在 SAR#2 上,以准许来操作磁带机但并非磁碟[建立一个新的群组[group ]并将 tapeuser 置於该群组,然後 chown 与 chmod 档案 /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 的流动缓冲区来避免太多 的磁带转回动作。 3. 备忘录 在 /tape144/root/notes 档案中列出的命令可以在命令稿上执行。 当我在□试 的时候,我得到 rpc 设定错误。 我猜想它只是命令执行的太快,portmapper 自 己没有适当的安装完成。 我发现手动输入顺序[sequence ]的工作情形良好, 所以我推荐如此。 我想这是一个安全的设定方法。 有人仍可以在你取出磁带前, 先一步把磁带取出 将所有档案读出. 对於重视资料机密的人会考虑备份资料流的加密. 也就是说, 原备份的输出 pipe 到加密程式再把加密程式的输出送到 之前所说的 /tmp/tapepipe. 但是要住意, 这个加密的备份在复原过程中的错误,将导致在该 点之 後的所有档案无法复原, 因为该备份是一个独立的 DES 加密资料流。 我们 也可以用 afio 的选项, 先把每个档案 gzip 再做加密. 但这种 先压缩的作法会 导至一堆已知的字串(gzip 过会有固定 header), 比 较容易被破解. 所以比较好 的作法是跳过 gzip, 直接做 DES 加密, 代价是需要较多的磁带空间. 不用说也 知道, DES 加密是不作压缩的. 我附上的 rc.inet1 写法只能使用在地区网路 (Local network) 上,而不能用一 个 Gateway 和外界沟通。 在完全恢复到空白硬碟的期间,SAR 磁片 #3 提供 ftape.o 让 MS-DOS 机器穿过 NFS。 这是因为 ftape 模组某些旧的版本不能在有磁片在软碟机时管理某些磁带 机。 在较新的核心程式,所有的 NFS 要素[stuff ]会被忽略。 这是非常重要的。 ***测试*** SAR 复原程序。 I did, but don't leave anything to chance. 确定你可以仅使用 SAR 磁片复原至少一个档案到 Linux 机器上[例如没有安装硬碟]。 如果你不能重新启动 Linux 机器在不照成太多 使用者不便的情况下,改变在 SAR 磁片中的设定资讯,指派 ``linux'' 的身分 到另一个 MS-DOS 机器,然後启动两个 MS-DOS 机器进入 Linux 去确定均可正常 运作。 然後,将 ``linux'' 的身分修正回来,如此你拥有一个可用的 SAR 磁片 。 4. 版权 Copyright Jan 10, 1995 by Christopher Neufeld ( [4]neufeld@physics.utoronto.ca) 修正於 二月 6, 1996. 修正於 八月 5, 1997. References 1. mailto:jlnance@isscad.com 2. ftp://sunsite.enc.edu/pub/Linux/system/Backup/backup-1.03.tar.gz 3. ftp://sunsite.unc.edu/pub/Linux/kernel/tapes/ftape-2.05.tar.gz 4. mailto:neufeld@physics.utoronto.ca