Linux 学习笔记(九)备份

1 用 dump 建立增量备份机制

dumprestore 都是用来创建备份以及从备份恢复的最常用的方法。这两个程序已经存在很长时间了,在大多数站点中,dumprestore 都是支撑自动备份软件使用的命令。但这里有些情况是要说明下的,实际上,在 Linux 环境下,没有说非要选择 dump 来做备份的理由,遗憾的是,大多数主流 UNIX 发行版本所附带的 tar 版本缺乏 GNU 的 tar 所具备的许多功能。如果您必须对 UNIX 和 Linux 都提供备份支持,那么 dump 是最好的选择。它是唯一能够在不同平台上(相当)一致地处理好这些问题的命令,这样一来,您只要是一条命令的专家就够了,不必熟悉两条命令。如果您很幸运,处在一个纯 Linux 环境里,那么就可以选用自己最喜欢的工具啦,dump 的功能不足,而 tar 就好用多了!

根据所选择的发行版本的不同,您可能不得不在 Linux 系统上明确安装 dumprestore 命令。默认情况下,Ubuntu 系统是没有安装 dump 的,所以您需要使用命令:

$ sudo apt-get install dump

来进行安装。

2 转储文件系统

dump 命令的第一个参数必须是增量转储级别(0~9),dump 使用 /etc/dumpdates (Ubuntu 系统 /var/lib/dumpdates ) 文件来决定增量转储必须倒回去多远。-u 标志可以使 dump 命令在转储完成之后自动更新 /etc/dumpdates 文件,将日期、转储级别和文件系统的名称都记录下来。如果您从来没有使用过 -u 标志,那么所有转储都会变为级别 0,因为那样的话,将不会有先前备份过当前文件系统的记录。

dump 命令会把它的输出发送到某个默认设备上,通常情况下是主磁带机。如果想使用不同的设备,可以使用 -f 标志来通知 dump 将其输出发送到别处。-f 所使用的可以是设备文件例如 /dev/st0 (磁带机),/dev/rsd1c (软盘驱动器),/dev/sda1 (硬盘驱动器),普通文件(可以使用 touch file 来创建)或者是 - (标准输出)。当需要转储数据到一个远程系统时,必须把远程磁带驱动器指定为 host:file 或者 user@host:file 的形式,例如:

$ sudo dump -0u -f username@hostname:/dev/sdb1 /boot

访问远程磁带机的权限由 ssh 通道控制。

下面我们来看一些具体的备份策略:

$ touch /tmp/dump.file
$ sudo dump -0 -f /tmp/dump.file ~angel/music

通知 dump 将 angel 用户的 music 目录备份到 /tmp/dump.file 文件中。当备份的并非是整个文件系统时,dump 限定了备份的选项:-u 选项是不可用的,并且只支持 0 级转储级别。如上面的命令选项所示。

$ sudo dump -1u -f /dev/nst0 /boot

这里的 /boot 假定的是一个单独的文件系统,并非仅仅只是一个文件目录,因此可以使用 -u 选项并支持任意的增量转储级别。所用的是非倒带设备,Linux 通常用 /dev/st0 代表倒带设备,而用 /dev/nst0 代表非倒带设备。如果是使用 dump 来做备份操作的话,都应该使用非倒带设备 /dev/nst0,如果您不小心选择了自动倒带设备,那么最终只能保存最后转储的那个文件系统。因为 dump 命令并不知道磁带定位在哪里,这个失误当时并不会造成出错,这种情况只有在试图恢复文件的时候才会显现出来。

正常情况下,当磁带驱动器到达末尾时 dump 会自动倒带并弹出当前磁带,然后要求换入一卷新磁带。

$ sudo dump -5u -f /dev/sda1 /usr

以上这条命令顺利执行的条件要求:

  • /usr 是一个独立的文件系统
  • /dev/sda1 的空间要比 /usr 大,能够完全装入 /usr 文件系统。

3 用 restore 从转储中恢复

restore -i 从磁带中读取备份目录,然后让您通过使用 lscdpwd 这样的命令像一个普通的目录树那样遍历转储目录。使用 add 命令来标记那些需要恢复的文件。选好后,键入 extract 命令将文件从磁带中提取出来。

例如,用户 angel 不小心删除了 music 目录下他最心爱的 lonly.mp3 这首歌曲,需要从 /tmp/dump.file 备份中取回这曲歌曲,这时候系统管理员要做的就是:

$ sudo mkdir /var/restore
$ cd /var/restore
$ restore -i -f /tmp/dump.file
restore> ls
.:
music/
restore> cd music
restore> ls
a.mp3 b.mp3 lonly.mp3
restore> add lonly.mp3         使用 add 命令标记需要恢复的文件
restore> ls
a.mp3 b.mp3 *lonly.mp3         lonly.mp3 前面的星号表示标记 
restore> extract
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
oset owner/mode for '.'? [yn] n

卷(磁带)是从 1 而不是从 0 开始记数的,所以对于在单独一卷磁带上进行的转储而言,可以指定 1。当 restore 命令询问是否需要为“.”设置属主和模式时,它是在询问是否应该设置当前目录去匹配磁带的根。除非您是在恢复整个文件系统,否则可能不需要这么做。

restore 完成之后,在 /var/restore 目录下就会有相应的文件夹出现,这时只要将里面的歌曲拷贝到 angel 的 music 目录下并设置属主和属组既可。

4 使用其他存档程序

dump 命令不是用于把文件存档到磁带、磁盘中的唯一程序,不过通常情况下,它是备份整个系统的最有效的方法。tar, cpiodd 命令都能够把文件从一个介质转移到另外一个介质中去。

4.1 tar: 给文件打包

tar 命令读取多个文件或者目录,并把它们打包成一个文件,通常情况下是一个磁带文件。可以直接使用 -cf 选项创建一个存档文件:

$ tar -cf file.tar fromdir

也可以在创建存档文件时加上压缩选项,我们很多时候都是这么干的,可以使用 -z (gzip), -j (bzip2) 或者 -J (xz) 等压缩算法,其中 xz 是目前最高效的压缩算法,压缩后的存档文件比 gzip 和 bzip2 压缩后的存档文件都要小得多。我们可以使用以下任意一条命令来创建压缩存档文件:

gzip

$ tar -czvf file.tar.gz fromdir

bzip2

$ tar -cjvf file.tar.bz2 fromdir

xz

$ tar -cJvf file.tar.xz fromdir

默认情况下,tar 命令不会对符号链接所指向的真正文件做备份,但可以提示它去这么做。也可以指定 tar 只包含自给定日期以来修改过的文件,这对于创建您自己的增量备份方案来说很有帮助。具体详情请参考 tar 手册页,了解这项功能以及别的好功能。

4.2 cpio: 古老的存档工具

cpio 在功能上和 tar 相似。它可以追溯到 UNIX 的最初时期,但现在很少使用了。不过所有的系统中都包含它。和 tar 一样,cpio 命令能够用于移动目录树。如下命令:

$ find fromdir -depth -print | cpio -pdm todir

4.3 dd: 处理位流

dd 是文件复制和转换程序。除非告诉 dd 命令去进行某种转换操作,否则它只进行从输入文件到输出文件的复制工作。如果用户给您一卷在某些非 Linux 系统上写入的磁带,那么 dd 命令可能是读取它的唯一方法。

dd 命令在历史上的一种应用就是创建一个完整文件系统的副本。但现在更好的选择是使用 mkfs.ext4 命令创建目标文件系统,然后运行 dump 命令导出给 restore 命令。如果使用不正确的话,dd 命令有时候能够破坏分区信息。它只能在大小完全相同的两个分区之间复制文件系统。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章