拷贝及创建子目录
1 拷贝整个子目录的基本命令
如果想重新整理文件组织结构,可使用下面的方法移动文件及文件链接:
标准方法:
# cp -a /source/directory /dest/directory # requires 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
其中,scp <==> rcp,ssh <==> rsh。
下面的有关拷贝整个子目录的信息由Manoj Srivastava <srivasta@debian.org>发表于debian-user@lists.debian.org。
2 .cp命令
传统上,cp并不能真正完成这个任务,因为它既没对符号链接进行区别对待,又不能保存硬链接。另一件需要注意的事就是稀疏文件(有洞的文件)。
GNU cp克服了这缺陷,然而对于非GNU系统,cp仍存在问题。而且使用cp无法生成小巧轻便的文档包。
% cp -a . newdir
3 tar
Tar克服了cp在处理符号链接时出现的问题,然而,cpio可以处理特殊文件,传统的tar却不行。
对于某个有多重硬链接的文件,tar的处理方法是只将其中一个链接拷贝到磁带上,所以日后你只能找回拷贝中所保留那个的链接所指的文件;cpio会为每个链接做一个拷贝,日后你可以找回任意一个链接所指的文件。
在Potato和Woody中,操作.bz2文件的tar命令参数有所变化,所以请在脚本中使用--bzip2而不要简写为-I(Potato)或-j(Woody)。
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
5 cpio
cpio从cpio或tar文档包提取/放入文件。该文档包可以是硬盘上的另一个文件,也可以是磁带或管道。
$ find . -depth -print0 | cpio --null --sparse -pvd new-dir
6 afio
afio更善于处理cpio格式的文档包。通常它比cpio要快,且提供了更多磁带选项,并且能更友好的处理有讹误的输入数据。它支持交互式处理多卷文档包。用afio制作压缩文档包比压缩tar或cpio文档包更安全。在备份处理脚本中afio是更佳的“文档处理引擎”。
$ find . -depth -print0 | afio -px -0a new-dir
对所有的磁带备份我都使用afio。
差异备份与数据同步
要进行差异备份和数据同步可使用下列几种方法:
rdiff-backup:备份并进行历史记录。支持链接。
pdumpfs:对文件系统进行备份和历史记录。支持链接。
cvs:多路同步服务器备份并进行历史记录,只支持文本,技术成熟。
arch:多路同步服务器备份并进行历史记录,但包括“处于工作中的目录”。
subversion:多路同步服务器备份并进行历史记录,专用于Apache。
我只讲解三个较容易使用的工具。
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)。
2 使用pdumpfs进行每日备份
pdumpfs是一种简单的每日备份系统,与Plan9的dumpfs一样,它每天都保存系统快照。任何时候都可以用它来恢复到某天的系统状态。请使用pdumpfs和cron来备份你的home目录。
在目标目录中,pdumpfs以YYYY/MM/DD的方式来组织系统快照。第一次运行时,它将所有源文件拷贝到快照目录。从每二次运行起,pdumpfs仅拷贝更新的或新建的文件,对于没有改变的文件用硬链接方式指向前一天的系统快照,以此来节省硬盘空间。
$ pdumpfs src-dir dest-dir [dest-basename]
See pdumpfs(8).
3 使用RCS进行定期差异备份
Changetrack会定期对RCS文档包中基于文本格式的配置文件的变化进行记录。参阅changetrack(1)。
# apt-get install changetrack
# vi changetrack.conf
补充:(来自 LinuxSir.org )
把根目录下/的东西 挪到 /mnt/d/
cd /mnt/d
tar clvf - / | tar xf -
解释:tar里面加一个p参数保证备份完了permission不变
l参数是只停留在本分区(否则就 把所有MOUNT上的分区都备份一下)
=========
不用管道,直接作成一个备份文件:
cd /mnt
tar jcvpf lfs.tar.bz2 lfs/
要恢复,直接解压就行了:
cd /mnt
tar jxvpf lfs.tar.bz2
=========
如果你要把tar的输出转到一个文件里面:
tar cf - xxxx/ > xxx.tar
如果要再pipe到bzip里面
tar cf - xxxx/ | bzip2 > xxxxx.tar.bz2
=========
备份的时候自最好是在另一个系统里来操作,在同一个系统里,可能还要考虑/proc,要把它去掉。
=========
cd /mnt/源
tar clf - . | (cd ../目标;tar xvpf -)
=========
cp -ax /mnt/lfs /mnt/newlfs
lfs是你以前的lfs系统,newlfs就是你新分区的加载点.我老是记不住这个x参数.
这个操作要在另一个系统下进行,也就是你的主系统.