+ -
当前位置:首页 → 问答吧 → 有谁比较过tar,cp,cpio,pax等命令啊

有谁比较过tar,cp,cpio,pax等命令啊

时间:2004-01-12

来源:互联网

俺需要把一台机器上面的大量的小文件(总大小在27G的样子)
备份到另外一台机器



周末试了cp命令,大概需要10多个小时,最后还报内存不足
而且中间看网络流量,也就是几百K的大小

想知道用什么方式好做这个东西

如果整个归档到一个大文件,那几十G的大小即使成功了俺也恢复不回去


能不能先提示几个思路啊,俺测试一下

作者: liucj   发布时间: 2004-01-12

两台机器你是怎么用的CP我觉得很奇怪?!

1、FTP。
2、十几个GB用GZIP压一下,也就不到一个GB,可以TAR过去,但看你CP一份要十个小时多,算了,这个方法不可行。
3、用BACKUP命令。find <dir1/file*>; <dir2/filename*>;... -print|backup -iqvf /dev/rmt0
     解压:restore -xdqvf /dev/rmt0 <dir?/???>;    (不打路径默认全部)
4、PAX用过,能备大文件,但恢复和备份机制我都不推荐。所以使用方法也不介绍。

作者: havent_bao   发布时间: 2004-01-12

把另外一个机器nfs文件系统mount到本地使用

十几个小时不是网络速度有问题
主要是文件都很小,但数量巨多
当时用tar命令就是因为报内存不足才放弃
用cp提示差不多的错误,都是内存不足
才换成cpio命令试一下

我要备份到一个存储用的机器上面
磁带备份还是要保留的

作者: liucj   发布时间: 2004-01-12

想问一下
cp会导致内存不足
是不是cpio就不会出现这种问题??
如果是边归档,边压缩
可以采用什么命令组合

作者: liucj   发布时间: 2004-01-12

1、我不知道你会不会接受FTP,我觉得是个相对方便一些的办法。
2、我想用BACKUP命令应该不会有这个问题。
3、要用tar也不是不行,但可能要分批来做。方法有二:一、追加为一笔归档,但这样解的时候可能要麻烦一点。二、追加为几个归档,这样做追几笔,解的时候要解几笔。具体操作:一、做完第一部分的TAR后,不要回滚,直接做第二部分加参数R。二、见下面测试吧!

# ls -l
total 48
-rwxr-xr-x   1 root     system         4377 19 Aug 16:33 1.txt
-rw-r--r--   1 root     system           53 19 Aug 16:33 2.txt
-rw-r-----   1 root     system            0 19 Aug 16:33 3.txt
-rw-r-----   1 root     system         1614 19 Aug 16:33 4.txt
-rw-r-----   1 root     system            0 19 Aug 16:33 5.txt
drwxr-xr-x   2 root     system          512 20 Aug 14:31 dddd
drwxr-xr-x   2 root     system          512 19 Aug 16:34 dirtest
# tar cvf /dev/rmt0.1 1.txt
a 1.txt 9 blocks.
# tar cvf /dev/rmt0.1 2.txt
a 2.txt 1 blocks.
# tar cvf /dev/rmt0.1 3.txt
a 3.txt 0 blocks.
# tar cvf /dev/rmt0.1 4.txt
a 4.txt 4 blocks.
# tar cvf /dev/rmt0.1 5.txt
a 5.txt 0 blocks.
# tctl rewind                (到开头)
# tar -t
1.txt
# tctl fsf 1
# tar -t
2.txt
# tctl fsf 1
# tar -t
2.txt
# tctl fsf 3
# tar -t
4.txt
#tctl fsf 2        (forword is add one and backward is reduce one)
#tar -t
3.txt
# tar -t
1.txt
# tar tvf /dev/rmt0.1
-rwxr-xr-x   0 0     4377 19 Aug 16:33:30 2003 1.txt
# tar tvf /dev/rmt0.1
-rw-r--r--   0 0       53 19 Aug 16:33:30 2003 2.txt
# tar tvf /dev/rmt0.1
-rw-r-----   0 0        0 19 Aug 16:33:30 2003 3.txt
#tctl eof        (到末尾)(BOT and EOT)

作者: havent_bao   发布时间: 2004-01-12

磁带备份问题我这里还可以做
因为里面大量的文件是查询产生的临时文件,备份前先把这些目录移出去
tar之后再mv回来就可以
(这些临时文件还是有用的,比如说再做相同查询的时候可以直接得到结果)


但我做硬盘备份的时候,想保留所有的文件
使用tar方式会导致产生太大的文件
估计tar回来的时候会有问题
使用cp方式呢,也是会产生内存问题

现在想看看有没有别的什么方法

作者: liucj   发布时间: 2004-01-12

前提:
1、可以分为几大类
2、空间足够大
3、不怕麻烦去找规律分类

我举例说说我的笨方法:
一、将文件合理分为几个大类
二、分批拷贝到指定目录
三、将拷好的文件全部压缩
四、用TAR归档

比如:
#backup_file.sh

cd dir1
cp a* b* c* d* /dir2
cp e* f*  /dir2
...
cp DAT*.tmp /dir2
cd /dir2
gzip *
cd ..
tar cvf /dev/rmt0 dir2

作者: havent_bao   发布时间: 2004-01-12

可以去测试一下,理论上只要分类方式合理
肯定cp过去
但可能gzip后,产生的单个文件很大,同样不能tar


可能还存在一个问题
备份的时间太长
一个大约27G的目录,我需要10多个小时才能备份完
而且这里面还有很多很多文件报内存不够的错误
如果分类的话,应该可以完成
但估计时间肯定还要长
这会影响到正常工作
最好还是找一个边打包,边压缩的方式

作者: liucj   发布时间: 2004-01-12

1、压完了不应该太大了,我在做DB2的BACKUP文件时,从10GB可以压到1GB以内的。
2、这样做的时间不会那么长,因为你用的EXPORT的文件系统才会这么慢的,如果你在本地做完TAR后再传过去应该会很快,除非你的机器很慢,我做10几个GB的数据CP只要二三下分钟最多了,而你说的10几个小时是不可思议的。
3、如果你连这个方法都但心会有内存问题的话,那么边拷边压系统是肯定受不了的。这就是一个分解操作,减轻系统压力的办法。

作者: havent_bao   发布时间: 2004-01-12

回复 liucj


    用find 命令加cp命令来实现。

作者: wangduny2007   发布时间: 2011-06-07