位置:海鸟网 > IT > linux/Unix >

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

标准的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 会自动跟踪多个卷。