Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87766
  • 博文数量: 18
  • 博客积分: 246
  • 博客等级: 二等列兵
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-14 14:12
文章分类

全部博文(18)

文章存档

2013年(10)

2012年(6)

2011年(2)

我的朋友

分类: LINUX

2013-04-11 14:59:10

四大Linux备份工具比较与操作实例

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

dump

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

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

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

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

cpio

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

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

◆备份完后不改变资料的atimectime

◆以互动方式执行资料恢复,如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命令:cpcopy的缩写,用于复制文件;目录。标准的 cp 命令可用于复制整个目录树。该选项将对非标准的文件执行未知的操作。有些 UNIX 变种和 GNU cp 工具支持 -R 选项,使用该选项可以正确地复制命名管道、链接和其他的文件。

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

fbackupfbackup只有HP-UX提供且属于HPSystem 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查看可用命令的列表. 使用lscd命令查看备份文件的列表.

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

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

10. 在restore运行的目录中应该有一个grub目录,包含恢复的grub.confmenu.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磁带驱动器中,把下面的语句添加到rootcrontab文件中即可:

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

 

阅读(703) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~