Linux 的磁碟备份新工具

介绍 tbackup 备份软体(上)


在 tar 这最常使用的备份工具之外, 您可知在 Unix/Linux 环境下另外还有 针对磁碟备份而设计的afio/tbackup软体? 本期起曾桑便将详细地介绍这套软体的安装和 实际操作示范、以及如何规划完整性系统备份。


曾瑞源(Yuan Tzeng)


    谈 到 备 份 ( Backup) , 一 般 在 Unix/Linux环 境 下 最 常 被 使 用 的 备 份 工 具 就 是 tar, 不 过 tar这 只 程 式 的 设 计 理 念 主 要 是 针 对 磁 带 备 份 , 而 大 部 分 的 Linux机 器 则 可 能 没 有 这 种 机 器 设 备 , 而 只 有 软 式 磁 碟 机 。 本 文 就 要 介 绍 针 对 磁 碟 备 份 而 设 计 的 备 份 软 体 -- afio/tbackup。

    本 文 的 介 绍 包 括 软 体 的 取 得 以 及 安 装 , 之 後 , 有 关 实 际 操 作 示 范 部 份 , 笔 者 首 先 做 一 个 简 易 的 备 份 示 范 以 及 资 料 回 复 , 接 着 , 笔 者 将 介 绍 如 何 规 划 完 整 性 系 统 备 份 。 最 後 , 我 们 将 来 看 看 如 何 来 做 累 计 备 份 (Incremental Backup)以 及 选 择 性 资 料 回 复 (Selective Restore)。

tar的备份操作观念

    首 先 笔 者 想 藉 由 tar来 增 进 读 者 一 些 基 本 的 备 份 操 作 观 念 。

    tar在 Linux环 境 其 实 也 是 最 方 便 的 备 份 工 具 , 比 方 说 想 备 份 /root目 录 下 所 有 东 西 ( 如 下 示 范 ) , 这 顶 多 一 张 或 两 张 磁 片 就 可 以 全 部 备 份 下 来 , 用 tar可 以 轻 松 愉 快 执 行 。


  $ du -s /root          <- 得知 /root 大约占用 1500 KByte硬碟空间。 1500 $ tar cvfM /dev/fd0 /root 
    想 浏 览 备 份 起 来 的 内 容 目 录 的 话 , 下 面 这 命 令 可 以 raw data型 态 存 放 到 第 一 部 软 碟 内 的 磁 片 。 这 里 没 有 指 定 压 缩 , 当 一 片 磁 片 无 法 完 成 备 份 时 , 系 统 会 停 下 来 要 求 换 片 。

  $ tar tvfM /dev/fd0 /root

想 回 复 ( Restore) 备 份 的 话 , 以 下 这 指 令

  $ tar xvfM /dev/fd0

    以 上 tar的 操 作 适 合 小 量 备 份 , 也 就 是 说 假 如 5 MB左 右 的 空 间 或 许 还 适 合 , 但 假 如 想 大 规 模 备 份 的 话 , 您 就 要 考 虑 了 。 首 先 , tar不 支 援 换 片 压 缩 , 用 刚 刚 例 子 来 说 , tar cvfzM /dev/fd0 /root这 指 令 是 无 效 的 , 至 少 截 至 目 前 为 止 的 GNU tar版 本 有 此 限 制 。 另 外 一 点 更 重 要 的 考 量 , 是 tar的 容 错 能 力 太 差 , 假 如 我 们 想 从 20片 备 份 磁 片 做 资 料 回 复 , 万 一 编 号 第 六 张 磁 片 方 生 瑕 疵 , 我 们 很 难 保 证 从 第 六 张 开 始 到 第 二 十 张 磁 片 的 资 料 可 以 正 确 的 回 复 ! 本 文 所 介 绍 的 Tbackup软 体 除 了 没 有 以 上 的 缺 点 之 外 , 更 重 要 的 , 让 您 无 须 记 忆 操 作 指 令 , 就 可 以 进 行 复 杂 性 、 完 整 性 备 份 。

Tbackup相关软体介绍

    本 文 介 绍 的 afio/tbackup备 份 软 体 必 须 搭 配 mtools、 fdformat、 gawk、 gzip及 tar等 等 基 本 系 统 工 具 软 体 , 以 及 gcc编 译 器 ( 您 必 须 自 行 编 译 程 式 ) , 以 上 软 体 Slackwaer Linux系 统 已 经 内 附 。 本 文 所 介 绍 的 afio备 份 软 体 以 及 tbackup备 份 界 面 软 体 则 是 外 加 软 体 , 读 者 可 以 依 照 以 下 的 介 绍 , 免 费 取 得 本 软 体 。

    afio及 tbackup软 体 原 始 码 可 以 用 ftp到 nctuccca.edu.tw、 iiiafs.iii.org.tw或 serv.hinet.net等 等 Internet档 案 库 找 到 , 其 存 放 路 径 为 /UNIX/linux/packages/Backup, 档 名 分 别 为 afio.2.4.tgz及 tbackup-0.8.tgz afio.2.4.tgz( 若 版 本 有 更 新 , 档 名 数 字 编 号 会 改 变 ) 。

重要档案说明

读 者 必 须 完 成 安 装 手 续 後 才 看 得 到 这 些 档 案

/usr/bin/afio 备份程式可执行档



/usr/local/src/afio.2.4/INSTALLATION 简易 afio 安装说明



/usr/local/src/afio.2.4/README.afio  afio 自我介绍



/usr/local/src/afio.2.4/README.linux Linux 版 afio 更详细介绍



/usr/bin/afio  # 安装完成後afio执行档所在位置,我建议读者将位置改为

                 /usr/local/bin/afio (修改Makefile档案,并重新编译)



/usr/man/man1/afio.1 # afio 线上使用手册位置 (用 man afio来阅读)



/usr/lib/tbackup/tbackup  备份界面主程式



/usr/lib/tbackup/tdir     备份规划程式



/usr/lib/tbackup/trestore 资料回复程式



/usr/lib/tbackup/examples   一些备份范例



/etc/tbackup/ 备份操作系统设定档案



/usr/lib/tbackup/NEW.0.8 本软体特色介绍及安装说明,本说明甚至包括一般备份哲学。



/usr/lib/tbackup/README 本软体使用说明书,另外README.savetree

                        则是本说明书的简化版本。我建议读者一定要读以上NEW.0.8

                        以及README.savetree两个说明档案,笔者这文章的说明,

                        只算是这两个档案的重点式补充说明。

备份软体的安装

    由 CD-ROM拷 贝 或 者 由 Internet取 得 tbackup-0.8.tgz及 afio.2.4.tgz两 个 档 案 後 , 放 置 在 /usr/local/src目 录 下 。

Part A: 安 装 afio 软 体


  $ cd /usr/local/src  # 由 /usr/local/src 解压缩



  $ tar xvfz afio.2.4.tgz

    在 解 开 afio.2.4.tgz软 体 , 把 核 心 码 摆 在 /usr/local/src, 解 压 缩 後 会 自 动 产 生 /usr/local/src/afio.2.4目 录 。

  $ cd /usr/local/src/afio.2.4



  $ make



  $ make install

Part B: 安 装 tbackup 软 体

  $ cd /   # 由 / 解压缩 tbackup 备份软体



  $ tar xvfz /usr/local/src/tbackup-0.8.tgz

    此 时 , 系 统 会 自 动 产 生 /usr/lib/tbackup目 录 , 本 软 体 之 原 始 码 与 可 执 行 程 式 都 摆 在 这 里 。

  $ cd /usr/lib/tbackup



  $ make

    读 者 此 处 建 议 修 改 Makefile, 把 BINDIR=/usr/bin改 为 BINDIR=/usr/local/bin, 这 样 系 统 会 把 可 执 行 档 摆 放 在 /usr/local/bin( 以 连 结 档 型 态 存 在 ) , 这 样 对 往 後 系 统 管 理 工 作 , 可 以 轻 松 愉 快 些 。 修 改 後 , 重 新 执 行 $ cd /usr/lib/tbackup; make; make install。

  $ make install  # 开始安装 tbackup

    进 行 此 操 作 时 , 系 统 会 显 示 一 连 串 安 装 过 程 的 细 节 , 并 且 会 停 下 来 询 问 您 一 些 问 题 , 我 们 正 确 回 答 後 , 就 算 是 完 成 tbackup的 安 装 动 作 。

    由 於 内 定 备 份 媒 体 为 软 碟 机 , 假 若 您 想 用 磁 带 机 备 份 , 可 以 在 安 装 完 成 之 後 , 自 行 修 改 /etc/tbackup/Config档 案 , 把 其 中 export tapedev=none这 一 行 , 把 none改 为 ftape( 若 是 QIC-80磁 带 机 , 改 为 qic, 若 是 SCSI磁 带 机 , 改 为 st0) 。 另 外 , 若 读 者 不 熟 悉 vi编 辑 器 的 使 用 , 可 以 同 样 修 改 这 档 案 , 把 export tdireditor=vi这 一 行 改 为 export tdireditor=pico, 这 样 可 以 使 用 亲 切 好 用 的 pico编 辑 器 。

    以 下 就 是 make install的 全 部 过 程 。


/usr/lib/tbackup/tbackup -> /usr/local/bin/tbackup

/usr/lib/tbackup/trestore -> /usr/local/bin/trestore

/usr/lib/tbackup/tlist -> /usr/local/bin/tlist

/usr/lib/tbackup/tguess -> /usr/local/bin/tguess

/usr/lib/tbackup/tdir -> /usr/local/bin/tdir

/usr/lib/tbackup/README -> /usr/man/cat1/tbackup.1

/usr/lib/tbackup/tdir.man -> /usr/man/cat1/tdir.1



Checking configuration files......

Creating /etc/tbackup.

Installing configuration file /etc/tbackup/Config.

/usr/lib/tbackup/bin/Config.std -> /etc/tbackup/Config

Installing configuration file /etc/tbackup/Compr.ext.

/usr/lib/tbackup/bin/Compr.ext.std -> /etc/tbackup/Compr.ext

Installing standard .arg files in /etc/tbackup.

/usr/lib/tbackup/examples/0d.arg -> /etc/tbackup/0d.arg

/usr/lib/tbackup/examples/0h.arg -> /etc/tbackup/0h.arg

/usr/lib/tbackup/examples/1d.arg -> /etc/tbackup/1d.arg

/usr/lib/tbackup/examples/1h.arg -> /etc/tbackup/1h.arg

Creating index file directory /var/root/idx, mode `rwx------'.

Making floppy configuration file /etc/tbackup/Floppy.

 

How many floppy drives do you have? (1/2) --->  回答 1

/usr/lib/tbackup/examples/1h.arg -> /etc/tbackup/1h.arg



Is drive number 0 a 5.25" drive or a 3.5" drive ? (5/3) ---> 3



   上面停下来询问磁碟机种类,读者请回答3或者5。



Is drive number 0 a high density drive ? (y/n) ---> y



    这里我回答y,这是指定一般高密度磁片(1.2MB或1.44MB磁片)。



Extended floppy densities fit more data on a floppy by going

outside  the `factory  specifications'  of the floppies  and

drives.  For example, on 3.5" DD floppies, the normal double

density  format uses 80 tracks and 9 sectors  per track, the

`extended  double  density'  format  uses  82 tracks  and 10

sectors per track, which fits 820 Kb. on the floppy.



Not all floppies and/or floppy drives are able to go outside

their `factory  specifications'  and hold extra data.  Also,

due to limitations  in the Linux kernel, reading and writing

1.7 Mb.  on 3.5" HD floppies is extremely slow.  If you want

maximal  safety, I recommend  you never use extended  floppy

densities.



Do you want to disable  the extended  density  option? (y/n)

---> y



    这里回答y,则取消特殊高密度的格式化。若回答n,则1.44MB磁片可以被当

成1.62MB来用,笔者建议不要这样做。



Installation done.



    安装完成

简易备份示范


$ tbackup  直接执行tbackup程式



Available choose methods:

  1 set   -- back up a directory set

  2 setrm -- back up a directory set, then remove its contents

  3 one   -- one user specified file or directory and below

Enter method name or number ---> [set] one  键入 one 



  以上set与one的差异,set适合用在完整系统备份(不论是全部备份

或者累计备份),one则适合单一目录的备份。



Type the name of the file or directory to back up. (e.g. /usr/src)

This must be a full pathname starting with / .

  All subdirectories will also be backed up.

  Symbolic links are not followed but will be stored as symbolic links.



file/directory name ---> /etc  回答 /etc,本测试要把备份 /etc



 Size in kilobytes: 386 /etc (系统自动测出所需备份量为 386Bytes)



以下选择压缩工具

Available pack methods:

  1 afio    -- pack files with afio, compress with gzip

  2 afio0   -- pack files with afio, do not compress

  3 tarcpio -- make a tar archive with cpio (no compress)

  4 tar     -- pack files with tar (no compress)

Enter method name or number ---> [afio]  # 这里按Enter键选择afio

                                 

以下选择储存媒体

Available write methods:

  1 floppy  -- write to msdos floppy disks with mtools

  2 filedev -- write archive to file or device

  3 tape    -- write to tape

  4 null    -- write archive to the bit bucket

Enter method name or number ---> [floppy] 按 Enter, 内键媒体是软碟



    以下回答 h , 选择高密度磁片

Use double or high density floppies (d/h)---> [d] h 



Use error correcting codes?---> (y/n) [y] 



  Part size is 1349 Kb.



  以下询问,将备份的磁片要不要先行执行格式化(Format)。由於我

使用已经Format过的磁片,这里回答No。



Always format inserted disks?---> (y/n) [n]按Enter选择No,但

是假如磁片尚未经过DOS format过,则回答y。 有关format的方法,

除了在DOS环境下用FORMAT指令外,     也可以在Linux环境下执行$

fdformat /dev/fd0H1440; mformat a:指令。



Verify after write to disk?---> (y/n) [n] y  指定加上一道确认动作



Make a backup index file ---> (y/n) [y]



backup index file name---> [/var/root/idx/backup.idx.1] 按Enter

  [Creating backup progress window.]

WARNING: Can't find xterm program.  Backup progress to /dev/null.

  [Creating directory /tmp/bulkdir for temporary storage.]

  [Allocating disk space for temporary storage of floppy contents.]



Backup description:

     Backup of directory /etc.

     (Filenames in archive relative to /)

     Made with tbackup (V0.8)

     by root@linux2.linux2, on Sun Jan 29 03:42:08 CST 1995

Backup index file is /var/root/idx/backup.idx.1.



Backup in progress...



现在一切就绪了,等我们放一张format过的磁片进磁碟机之後即可开

始备份。



--Insert an empty, formatted disk for part 1 in drive 0 and press

enter. (Type o for options.)



<2>EXT2-fs error (device 3/4): ext2_readdir: bad directory entry:

rec_len % 4 != 0

<6>offset=0, inode=789727949, rec_len=42650, name_len=11103

--Insert a blank, unformatted disk for part 1

  in drive 0 and press enter. (Type o for options.)



Checking if disk is already formatted, please disregard  the

floppy errors below......



**ERROR**: this disk is already formatted with the correct density!

Format anyway? (y/n) ---> y  这里回答y,不确定磁片是否已经格

式化时,不妨这样回答,要省时间的话,可以回答n。以下几行讯息,

我们可以看到系统连续执行格式化以及备份写入磁碟。



Formatting drive 0......

Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.

Formatting ...

<2>EXT2-fs error (device 3/4): ext2_readdir: bad directory entry:

rec_len % 4 != 0

<6>offset=0, inode=2034247905, rec_len=44351, name_len=834



done

Verifying ... done

Writing part 1 to drive 0 (i interrupts)......

Verify.....

Finished writing part 1.

Cleaning up...

Backup completed.  # 备份完成

    依 照 作 者 的 浅 见 , 一 般 备 份 工 作 的 重 点 , 除 了 要 确 定 备 份 资 料 成 功 的 拷 贝 在 媒 体 上 , 更 重 要 的 , 必 须 确 定 资 料 可 以 回 复 无 误 , 备 份 工 作 不 是 做 心 安 的 的 而 已 :-) 底 下 我 们 就 来 示 范 备 份 资 料 的 回 复 。

简易资料回复示范

    此 处 所 示 范 的 , 也 可 以 适 用 於 完 整 性 资 料 回 复 操 作 , 此 处 只 是 规 模 小 一 些 。 在 本 文 最 後 , 笔 者 会 示 范 选 择 性 资 料 回 复 的 操 作 方 法 。


$ trestore  执行trestore程式



Available read methods:

  1 floppy     -- read from msdos floppy disks with mtools

  2 floppypart -- read a part of a floppy archive

  3 filedev    -- read archive from file or device

  4 tape       -- read from tape

Enter method name or number ---> [floppy]



Insert a disk from the backup set in drive 0 and press enter.

  系统停下来,等待放进一张磁片



/usr/local/bin/trestore: [: too many arguments



Backup description:



  Backup of directory /usr/local/etc/gopherd-data.

  (Filenames in archive relative to /usr/local/etc)

  Made with tbackup (V0.8)

  by root@linux2.linux2, on Mon Jan 30 15:34:00 CST 1995



Restore parameters of this backup set:

  dea_choosemethod=one

  dea_onename=/usr/local/etc/gopherd-data

  dea_packhome=/usr/local/etc

  dea_unpackmethod=afio

  dea_readmethod=floppy

  pre_mdens=h

  pre_eccmethod=blexta08

  pre_psize=1381376

  dea_indexfilename=/var/root/idx/backup.idx.3



Press enter to use this backup set, ^C to abort.



  此处又停下来, 我们按Enter键, 继续进行操作



  Part size is 1349 Kb.



  [Creating directory /tmp/bulkdir for temporary storage.]

  [Space free in /tmp/bulkdir: 37667 Kb.]



This archive specifies `afio' as the default unpack method.



Available unpack methods:

  1 afio     -- unpack files with afio, uncompress files with gzip

  2 afio0    -- unpack files with afio. (no uncompress)

  3 tar      -- unpack files with tar (no uncompress)

  4 selafio  -- selectively unpack files with afio, uncompress with gzip

  5 selafio0 -- selectively unpack files with afio. (no uncompress)

  6 seltar   -- selectively unpack files with tar (no uncompress)

Enter method name or number ---> [afio]  按 Enter键



This archive was packed relative to the directory /usr/local/etc.

Unpack archive in directory ---> [/usr/local/etc] /tmp



  这里回答/tmp目录,目的是要先测试看看,把回复的存档摆在/tmp

目录下,正常的回复是从/目录做起。



Protect newer files from overwriting?---> (y/n) [y]



  上面这问题,若回答y(内定),则回复时,新的档案可以避免被备

份里面的旧档案盖过去(这有好有坏)。



Make a restore index file ---> (y/n) [n]



  [Creating restore progress window.]

WARNING: Can't find xterm program.  Backup progress to /dev/null.



Restore in progress...



--Insert the disk with part 1 in drive 0  # 把救原备份磁片插到磁碟机

  and press enter. (Type o for options.)



Reading part 1 from drive 0..........



Finished reading part 1.  [you can remove the floppy]



Cleaning up...



Restore completed.

    为 了 确 定 有 成 功 回 复 , 我 们 浏 览 一 下 回 复 的 结 果 ( 下 期 待 续 )


$ dir /tmp/gopherd-data



total 16

drwxr-xr-x   9 yuan     root       1024 Jan 30 16:01 ./

drwxrwxrwt   7 root     root       3072 Jan 30 16:01 ../

-rw-r--r--   1 yuan     users       453 Jan 30 14:32 .cache

-rw-r--r--   1 yuan     users      2238 Jan 27 08:54 .cache+

drwxr-xr-x   3 yuan     root       1024 Jan 30 16:01 UUserv商业广告服务/

drwxr-xr-x   3 yuan     root       1024 Jan 30 16:00 社区电子看板/

drwxr-xr-x   3 root     root       1024 Jan 30 16:01 政治家广场/

drwxr-xr-x   2 root     root       2048 Jan 30 16:01 电脑自助指南/

drwxr-xr-x   7 root     root       1024 Jan 30 16:01 台湾文化专区/

drwxr-xr-x   2 yuan     root       1024 Jan 30 16:01 简介UUserv社区网路/

drwxr-xr-x   6 root     root       1024 Jan 30 16:01 转接台湾其他网路

                                                     Gopher 服务系统/

( 作 者 E-mail:yuan@UUserv.Net.tw