出自《Debian 参考手册》:http://www.debian.org/doc/manuals/reference/ch-tips.zh-cn.html#s-archiving
8.3 拷贝及创建子目录
这些拷贝和归档命令提供系统和数据备份的基本功能。 在 the example scripts 中提供了一个名为 backup 的简单备份脚本例子。
8.3.1 拷贝整个子目录的基本命令
如果想重新整理文件组织结构,可使用下面的方法移动文件及文件链接:
标准方法:
# cp -a /source/directory /dest/directory # 要求 GNU cp
# (cd /source/directory && tar cf - . ) | \
(cd /dest/directory && tar xvfp - )
如果包含硬链接,则需要更严谨的方法:
# cd /path/to/old/directory
# find . -depth -print0 | afio -p -xv -0a /mount/point/of/new/directory
如果是远程操作:
# (cd /source/directory && tar cf - . ) | \
ssh user@host.dom (cd /dest/directory && tar xvfp - )
如果没有链接文件:
# scp -pr user1@host1.dom:/source/directory \
user2@host2.dom:/dest/directory
下面的有关拷贝整个子目录的信息由 Manoj Srivastava srivasta@debian.org 发表于 debian-user@lists.debian.org。
8.3.2 cp
传统上,cp 并不能真正完成这个任务,因为它既没对符号链接进行区别对待,又不能保存硬链接。另一件需要注意的事就是稀疏文件(有洞的文件)。
GNU cp 克服了这缺陷,然而对于非 GNU 系统,cp 仍存在问题。而且使用 cp 无法生成小巧轻便的文档包。
% cp -a . newdir
8.3.3 tar
Tar 克服了 cp 在处理符号链接时出现的问题,然而,cpio 可以处理特殊文件,传统的 tar 却不行。
对于某个有多重硬链接的文件,tar 的处理方法是只将其中一个链接拷贝到磁带上,所以日后你只能找回拷贝中所保留那个的链接所指的文件;cpio 会为每个链接做一个拷贝,日后你可以找回任意一个链接所指的文件。
在 Potato 和 Woody 中,操作 .bz2 文件的 tar 命令参数有所变化,所以请在脚本中使用 --bzip2 而不要简写为 -I(Potato)或 -j(Woody)。
8.3.4 pax
全新的,符合 POSIX(IEEE Std 1003.2-1992, pages 380–388 (section 4.48) and pages 936–940 (section E.4.48))标准的,众望所归的,轻便的文档包交互工具。pax可以读、写以及列出文档包的成员,并能拷贝文件目录层次。pax 的操作独立于特定的文档包格式,支持各种各样不同的文档包格式。
pax工具刚刚成形,还很新。
# apt-get install pax
$ pax -rw -p e . newdir
or
$ find . -depth | pax -rw -p e newdir
8.3.5 cpio
cpio 从 cpio 或 tar 文档包提取/放入文件。该文档包可以是硬盘上的另一个文件,也可以是磁带或管道。
$ find . -depth -print0 | cpio --null --sparse -pvd new-dir
8.3.6 afio
afio 更善于处理 cpio 格式的文档包。通常它比 cpio 要快,且提供了更多磁带选项,并且能更友好的处理有讹误的输入数据。它支持交互式处理多卷文档包。用 afio 制作压缩文档包比压缩 tar 或 cpio 文档包更安全。在备份处理脚本中 afio 是更佳的“文档处理引擎”。
$ find . -depth -print0 | afio -px -0a new-dir
对所有的磁带备份我都使用 afio。
8.4 差量备份与数据同步
要进行差异备份和数据同步可使用下列几种方法:
有关将这些方法与文档包操作结合应用的讨论参阅拷贝及创建子目录, 第 8.3 节,有关自动进行备份的讨论参阅日程安排(cron,at), 第 8.6.27 节。
我只讲解三个较容易使用的工具。
8.4.1 使用 rdiff 进行差异备份
rdiff-backup 提供了简单好用的方法对任何文件包括链接进行历史差异备份。例如要对 ~/ 目录下的所有文件备份到 /mnt/backup:
$ rdiff-backup --include ~/tmp/keep --exclude ~/tmp ~/ /mnt/backup
从该文档包中取出 3 天前的旧数据恢复到 ~/old 目录:
$ rdiff-backup -r 3D /mnt/backup ~/old
参阅 rdiff-backup(1)。
8.4.2 使用 pdumpfs 进行每日备份
pdumpfs 是一种简单的每日备份系统,与 Plan9 的 dumpfs 一样,它每天都保存系统快照。任何时候都可以用它来恢复到某天的系统状态。请使用 pdumpfs 和 cron 来备份你的 home 目录。
在目标目录中,pdumpfs 以 YYYY/MM/DD 的方式来组织系统快照。 当 pdumpfs 第一次运行时,它将所有源文件拷贝到快照目录。从每二次运行起,pdumpfs 仅拷贝更新的或新建的文件,对于没有改变的文件用硬链接方式指向前一天的系统快照,以此来节省硬盘空间。
$ pdumpfs src-dir dest-dir [dest-basename]
参阅 pdumpfs(8)。
8.4.3 使用 RCS 进行定期差异备份
Changetrack 会定期对 RCS 文档包中基于文本格式的配置文件的变化进行记录。参阅 changetrack(1)。
# apt-get install changetrack
# vi changetrack.conf
# vi changetrack.conf