Sunday, March 28, 2010

用tar 来备份数据

最近在看关于迁移数据到LVM上的文章,发觉它们的copy都是用tar,而且用法很古怪,研究了一下,顿觉牛B。
情景分析:
假设我有一个partition,/dev/sda1,里面装有跟要复制的内容,把它挂载到/mnt;
另外一个partition是/dev/sda2,挂载到了/backup
则现在要做的是,复制/mnt下的所有内容到/backup
使用tar的命令如下(假设pwd=/mnt,并有root权限)

/bin/tar cpBf - . | ( cd /backup && /bin/tar xvpBf - )

看起来很怪异,但是可以稍微分析一下:
c是创建压缩文件
p是保持文件的权限
B是?
f是指定输入,这里使用了 '-',即标准输入,后面的.表示当前目录

然后通过管道传给 下一个代码块。这里使用了一双括号,使得命令能在子shell里执行,因为我们要进入新的目录/backup再会到/mnt
后面tar的选项作用是:
x是解压缩
v是verbose输出
B,f,-同上

据说这样做的好/坏处是,
1) 符号链接会被正确设置(因此也许指向了不存在的地方)
2) 硬连接会被复制成文件,后面复制的指向同一个文件的硬连接将会指向第一个复制过来的文件
3) 保留文件的权限

还没搞清楚用cp -r 会有什么后果,恩。

参考:

1 comment:

Unknown said...

每次看完刚牛的文章之后,都顿觉牛B

绝无吹水