四种时下流行 Linux备份工具比较与操作实例

Linux技术    2010-07-22 08:07  

  标准的UNIX系统皆有提供基本的备份工具,不同的备份工具有不同的差异。dump,cpio,tar及dd,dump及restore通常是最好的选择。其次是cpio,但是它比tar来的不亲和些;tar则比dump或cpio更容易使用。如果希望使用tar或cpio备份raw devices或执行异地备份,那么dd是你的另一个选择。

  dump

  dump 可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。dump 可以执行类似 tar 的功能。然而,dump 倾向于考虑文件系统而不是个别的文件。下面是引自 dump 手册文件中的内容:“dump 检查 ext2 文件系统上的文件,并确定哪些文件需要备份。这些文件将出于安全保护而被复制到给定的磁盘、磁带或其他存储媒体上,大于输出媒体容量的转储将被划分到多个卷。在大多数媒体上,容量是通过一直写入直至返回一个 end-of-media 标记来确定的。”

  配合 dump 的程序是 restore ,它用于从转储映像还原文件。

  restore 命令执行转储的逆向功能。可以首先还原文件系统的完全备份,而后续的增量备份可以在已还原的完全备份之上覆盖。可以从完全或部分备份中还原单独的文件或者目录树。

  dump 和 restore 都能在网络上运行,因此您可以通过远程设备进行备份或还原。 dump 和 restore 使用磁带驱动器和提供广泛选项的文件设备。然而,两者都仅限用于 ext2 和 ext3 文件系统。如果使用的是 JFS、Reiser 或者其他文件系统,您将需要其他的实用工具,比如 tar 。

  cpio

  如果没有 dump 指令或者 dump 版本不符所需, 则 cpio 是您的下一个好选择。cpio 比其它备份工具存在的时间久,且具有一些其它工具所缺乏的重要特性。 但首先需说明的是,有些功能 dump 有提供而 cpio 则无,如下:

  ◆无需使用touch或find档案,即可执行变动备份(incremental backup);

  ◆备份完后不改变资料的atime及ctime;

  ◆以互动方式执行资料恢复,如restore的选项-i。

  cpio 是一个非常有用的备份工具,它最大的不同处,是可以备份从标准输入( stdin )而来的的档案。 目前有些新版的 tar 支持 从标准输入来的档案备份,但大部份尚未有此功能。

  为什么cpio较不常被使用?

  如果 cpio 如此好用,为何 tar 却比较流行?最可能的理由是同样的功能,tar 比 cpio 较简单易用(也较标准)。 例如:每个版本的 tar 都支持 tar cf device 及 tar xf device, 然而 cpio有时支持 I 及 O;有的版本则无。如果将 cpio 每种版本的选项累计,则有近 40 个选项, 甚至有些使用同一字母的参数,在不同版本的 Unix 有不同的意义。 但您只要使用在大部份平台皆标准的选项,那么,cpio 几乎与 tar 一般简单好用。

  tar

  如果需要定期备份整个作业系统,dump 可能是最好的选择。其次是 cpio, 因为它可与 find 搭配执行变动备份( incremental backup )。如果您像大部份的人一般,只为了将资料做一次完整的 备份,那么就不需要定期或变动备份等功能。 例如,您可能希望快速地备份使用者 /home 目录。您可能想要删除使用者的一大群目录与档案, 但唯一可让使用者接受的备份方式,是将其资料全部写入 磁带或光盘内储存并交给他。 因此您不在乎 atime,不需定期做变动备份, 只希望将一堆资料放到备份媒体上,而且也希望他人可以很容易地将资料从备份中取出, 在这种情况下,tar 会是最佳选择。

  有一些功能是 cpio 有而大部份的 tar 则无的( GNU tar 没有这些限制),例如:

  ◆可以备份来自stdin的档案;

  ◆当备份完成时重新设定档案的atime,尽管这会改变其ctime。

  虽然 tar 的历史并不比 cpio 来得久,但它却得到较大的欢迎,这也正是它的特点之一。几乎每个人都知道如何读 tar 档,即使不会也很容易学。 有些程序如 WinZip, 甚至可以自动地解开一个tar 档或压缩过的 tar 档以读取其内容( WinZip 却无法开启cpio 档)。tar 也较 dump 或 cpio 在 Unix 平台间具可性。

  dd

  大部份的人不常使用 dd 来作备份, 它是一个相当低级的指令, 可将资讯内涵的每个位元( bit )原封不动地从一个地方搬到另一个地方, 它不管也无需知道备份资料的结构。 因此不同于 dump,tar, 及 cpio, 它不可以拷贝一群档案至储存媒体, 只可以拷贝一个档案或一档案的部份或 partition 或部份 partition,甚至可以在资料修改中途将资料从标准输入( stdin )拷贝至标准输出(stdout )。即使 dd 可以拷贝单一档案,但其对档名或档案内容是一无所知的, 它纯粹只是从一个地方搬运档案的位元内容至另一个地方而已。

  dd 是一个文件系统复制实用工具,它产生文件系统的二进制副本。dd 还可用于产生硬盘驱动器的映像,类似于使用诸如 Symantec 的 Ghost 这样的产品。然而,dd 不是基于文件的,因此您只能使用它来将数据还原到完全相同的硬盘驱动器分区

  这种方式看似相当简单, 相对地它也相当有弹性,可以在不考虑资料格式之下执行拷贝动作, 因此它可在两个不同平台间作资料转换。 例如:从 EBCDIC 到 ASCII,或 Oracle 允许资料以档案系统下的档案形式存在, 亦可以直接放在原始磁盘区块上,然而备份程序无法预测管理员会以何种方式存放资料, 故采用富弹性的dd 作自动备份,甚至备份结果是混合此两种资料形式也无妨,亦即有些在档案系统中,有些则在原始磁盘上。 如此,管理员可依资料应用特性决定其存放形式,可见 dd 所提供的弹性好处之大。

  其它备份工具

  尚有其它较不为人知或只出现在某些平台的备份工具, 其中较常使用的包括:

  ◆cp命令:cp是copy的缩写,用于复制文件;目录。标准的 cp 命令可用于复制整个目录树。该选项将对非标准的文件执行未知的操作。有些 UNIX 变种和 GNU cp 工具支持 -R 选项,使用该选项可以正确地复制命名管道、链接和其他的文件。

  ◆pax:pax是Portable Archive eXchange的缩写,可产生一便携式的备份,此备份格式符合 IEEE Std.1003.1-1988 的Archive/Interchange File Format。 pax 亦可读写一些其它的档案格式如 tar 或 cpio。 正如 Unix 世界的许多现象般,pax也有一群拥护者认为它是备份工具中最好的选择。

  ◆fbackup:fbackup只有HP-UX提供且属于HP的System Administration Menu ( SAM )的工具之一,使用 fbackup 作的备份, 只 能在另一个 HP-UX 主机上使用 frecover 读取之。 仅管fbackup 比传统的 tar 及 cpio 有较多的功能, 但它缺乏可携性的缺点是非常使人诟病的。 即使您无法用 SAM 来操作 dump, cpio 或 tar,但这三个指令的可携带特性,绝对值得您花较多的心力去使用它们。

  dump命令操作举例

  dump命令格式:

  dump [-cnu][-0123456789][-b <区块大小>][-B <区块数目>][-d <密度>][-f <设备名称>][-h <层级>][-s <磁带长度>][-T <日期>][目录或文件系统] 或 dump [-wW]

  主要选项:

  -0123456789  备份的层级。 

  -b<区块大小>  指定区块的大小,单位为KB。 

  -B<区块数目>  指定备份卷册的区块数目。 

  -c  修改备份磁带预设的密度与容量。 

  -d<密度>  设置磁带的密度。单位为BPI。 

  -f<设备名称>  指定备份设备。 

  -h<层级>  当备份层级等于或大雨指定的层级时,将不备份用户标示为"nodump"的文件。 

  -n  当备份工作需要管理员介入时,向所有"operator"群组中的使用者发出通知。 

  -s<磁带长度>  备份磁带的长度,单位为英尺。 

  -T<日期>  指定开始备份的时间与日期。 

  -u  备份完毕后,在/etc/dumpdates中记录备份的文件系统,层级,日期与时间等。 

  -w  与-W类似,但仅显示需要备份的文件。 

  -W  显示需要备份的文件及其最后一次备份的层级,时间与日期。

  1.执行一个完全 Linux 备份,它把所有 ext2 和 ext3 文件系统备份到一个 SCSI 磁带设备。

  dump 0f /dev/nst0 /boot

  dump 0f /dev/nst0 /

  说明:在这个例子中,系统中有两个文件系统。一个用于 /boot,另一个用于 / ,这是常见的配置。它们必须在执行备份时单独地引用。 /dev/nst0 引用第一个 SCSI 磁带驱动器,不过是以非重绕的模式引用。这样确保各个卷在磁带上一个接一个地排列。dump 的一个有趣特性是其内置的增量备份功能。在上面的例子中,0 表示 0 级或基本级备份。这是完全系统备份,您要定期执行以保存整个系统。对于后续的备份,您可以使用其他数字(1-9)来代替 0,以改变备份级别。1 级备份会保存自从执行 0 级备份以来更改过的所有文件。2 级备份会保存自从执行 1 级备份以来更改过的所有文件,以此类推。使用 tar 和脚本可以执行相同的功能,但要求脚本创建人员提供一种机制来确定上次备份是何时执行的。dump 具有它自己的机制,即它在执行备份时会输出一个更新文件(/etc/dumpupdates)。这个更新文件将在每次执行 0 级备份时被重设。后续级别的备份会保留它们的标记,直至执行另一次 0 级备份。如果您在执行基于磁带的备份,dump 会自动跟踪多个卷。

  2. 配合使用 find 命令复制整个目录

  $ find . |cpio -ov >archive.cpio

  使用dump备份资料

  # dump levelunbdsf blkg-factor density size device-name file_system

  下面是执行此指令的例子:

  ◆对/home做一完整备份至本地磁带机/dev/rmt/0cbn:

  # dump 0unbdsf 126 141000 11500 /dev/rmt/0cbn /home

  ◆对/home做一完整备份至光盘机/backup/home.dump:

  # dump 0unbdsf 126 141000 11500 /backup/home.dump /home

  ◆对/home做一完整备份至远端主机hsm的磁带机/dev/rmt/0cbn:

  # (r)dump 0unbdsf 126 141000 11500 hsm:/dev/rmt/0cbn /home

  上述的指令包含不需要参数的三个选项( 0,u, 及 n ),及需要参数的四个选项( b,d,s 及 f )。

  dump 指令的第一个参数是一串选项,然后每个选项对应的参数依照选项的顺序依次放置于指令行。

  使用resotore工具恢复

  配合 dump 的程序是 restore,它用于从转储映像还原文件。restore 命令执行转储的逆向功能。可以首先还原文件系统的完全备份,而后续的增量备份可以在已还原的完全备份之上覆盖。可以从完全或部分备份中还原单独的文件或者目录树。

  您必须相当熟悉以不同的方式使用 restore 指令,从 dump 产生 的备份中取得资料。

  restore指令的语法

  一旦可以读取 dump 磁带, 您必须决定要读什么资料及如何读它,以下讨论 restore 一般常用的参数。

  基本上,有四件事情是你希望dump磁带提供的:

  ◆读取dump磁带的目录以确认内容是否需要;

  ◆恢复整个档案系统;

  ◆恢复选定的档案;

  ◆执行互动式的恢复。

  一般restore指令语法如下:

  restore [trxi]vbsfy blocking-factor file-number device-name

  restore指令的选项

  restore 的行为如何,端视其后的参数型态决定恢复的形式。 第一个参数指明 restore 的型式,只可以从四种可能的参数中挑选一种:

  t:告诉restore显示备份磁带的目录。

  r:指明备份磁带的整卷内容恢复到目前的工作目录之下。

  x:只恢复restore指令行末端所列的档案。

  i:以互动方式恢复资料。

  决定恢复的行为

  下面的参数不是必须的,但会影响恢复的行为:

  v:指定以明细(verbose)的方式输出。

  s:在开始读磁带前需跳过一些磁带上的档案。

  b:指定正要读取磁带的区块因子。

  f:标明正使用的备份设备之档名。

  y:告诉restore尝试从读取错误中救回。

  含备份资料的储存媒体可读否?

  为确保你知道备份磁带的格式与区块数目大小, 先尝试列出它的 目录。 下列指令可产生 dump 备份磁带的目录:

  $ restore tbfy block_size device-name

  例如,从一个在 /dev/rmt/0cbn 磁带设备上的 dump 磁带(使用 的区块因子是 32 )读取其目录,指令如下:

  $ restore tbfy 32 /dev/rmt/0cbn

  Restore命令举例:

  从磁带备份中提取 /etc 目录,可使用以下命令:

  restore -xf /dev/nst0 /etc

  使用dump/restore恢复单个文件

  1. 准备用dump备份/boot目录下的文件. 使用df /boot查看/boot所在的设备(以下假设为/dev/hda1)

  2. 首先确认备份需要的空间. 查看一个0级备份需要的字节数,使用 -S

  # dump -oS /dev/hda1

  3. 备份到文件而非磁带. 确认在/var/tmp目录是否有足够的空间,执行

  # dump -0u –f /var/tmp/dumpfile /dev/hda1

  4. 检查/etc/dumpdates,查看完全备份的时间戳.

  5. 使用restore检查备份文件的内容

  # restore –tf /var/tmp/dumpfile

  6. 我们可以使用restore的互动模式恢复特定文件到一个临时目录.

  # mkdir /tmp/restored; cd /tmp/restored# restore –if /var/tmp/dumpfile

  7. 这时会看到一个restore > 提示符. 键入help查看可用命令的列表. 使用ls和cd命令查看备份文件的列表.

  8. 使用add,选中/grub.menu.1st和/grub/grub.conf文件.列出所在目录,恢复的文件应该带有星号.

  9. 键入extract命令恢复选中的文件.设置下个卷名为1, 不为解压目录设置所有者模式. quit退出restore模式.

  10. 在restore运行的目录中应该有一个grub目录,包含恢复的grub.conf和menu.1st文件.

  cpio 命令操作举例:

  1. 拷贝当前目录中所有文件到磁带设备 /dev/rmt0,输入:

  find . | /usr/sysv/bin/cpio -oc >/dev/rmt0

  2. 从 cpio 归档中只抽取一个常规文件中的文件列表,使用下列命令:

  cat ar | /usr/sysv/bin/cpio -i -E Efile

  3. 把/home目录备份到SCSI磁带设备中,输入下面的命令:

  $ls /home | cpio -o > /dev/st0

  你也可以对cpio的备份进行计划,用crontab工具设置成基于任何时间的有规律地运行。例如,要在每晚2点把/ home目录备份到SCSI磁带驱动器中,把下面的语句添加到root的crontab文件中即可:

  00 02 * * * ls /home | cpio -o > /dev/st0

  dd命令举例:

  1.把第一个硬盘的前 512 个字节存为一个文件:

  dd if=/dev/hda of=disk.mbr bs=512 count=1

  2为软盘建立镜像文件

  dd if=/dev/fd0 of=disk.img bs=1440k

  有趣的是,这个镜像文件能被 HD-Copy ,Winimage 等工具软件读出。

  cp命令举例:

  1 将dir1下的所有目录包括子目录陆续地复制到dir2中。

  #cp -a dir1 dir2

  2.将一个目录中的内容复制到一个已有的目录中

  $ cp -r /home/mc/* /export/home/mc

在线留言

我要留言