LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6342|回复: 3

终于实现了压缩-分段-备份的目的。(重发)

[复制链接]
发表于 2004-6-13 09:34:59 | 显示全部楼层 |阅读模式
我试过了,的确好使,现在把情况写一下:
基本情况如下:
mount /dev/hda5 /mnt/a
mount /dev/hda6 /mnt/b
mount /dev/hda7 /mnt/c
mount /dev/hda8 /mnt/d
其中我的/mnt/a下有个大文件foxabc,大小为1G,如果压缩的话可压缩至750兆左右,但该盘空间已满。/mnt/b盘有300兆空余空间,/mnt/c有200兆,/mnt/d有300兆。现在想把这个1G的大文件备份到这三个盘上,注意这三个盘空间的总和不够1G,所以必须在经过压缩后再备份,由于是三个盘,每个盘空间不足750兆,所以要把压缩后的文件分割后再分别备份到不同磁盘。

实现方法如下:
cd /mnt/a
tar -zcvf - foxabc|dd of=/mnt/b/foxabc1.tgz bs=1k count=300000
tar -zcvf - foxabc|dd of=/mnt/c/foxabc2.tgz bs=1k skip=300000 count=200000
tar -zcvf - foxabc|dd of=/mnt/d/foxabc3.tgz bs=1k skip=500000 count=300000

经过上述的方法,可以在不借助于其它盘的情况下,先将目标文件压缩成750兆并输出至屏幕,再经由管道传给后面的dd命令,而这个压缩文件不用保留到任何盘上,因为已经再没有这样大的空间去存放这个750兆的压缩文件了,而后面的命令部分可以将这个压缩文件分段后再分别存入到hda6 hda7和hda8上,这样做的话就比一般的方法可以更容易实现!
常规的方法是先将文件压缩后再用split等命令分割,然后再把分割后的文件放入不同的磁盘内,可是这个压缩的文件本身放到哪里呢?已经没有空间可用了,所以依据现在的情况用常规方法是不行的,只能用我如上的方法实现。

说明"tar -zcvf"是为了打包并压缩,而后面的"-"是为了输出到屏幕而不是建立个新文件,之后的“|”是管道,因为dd命令默认的if选项就是屏幕所以if就省略了,后面的bs skip count的命令要适当使用,这是为了能实现分段备份的。

***再次感谢各兄弟们的帮忙我才能把这个实现!
==========================================
对于上面的恢复方法也很简单,首先你进入你准备放恢复数据的目录中
cd <你想恢复文件的目录>
cat /mnt/b/foxabc1.tgz  /mnt/c/foxabc2.tgz  /mnt/d/foxabc3.tgz|tar -zxvf -


***说明:其中bs的值设的越小越好,这与你的内存大小有关,如果你的内存很大设大点也无防,如果bs后只跟数字而不加字母则表示默认以字节为单位,所以上面你也可以写成如"bs=1 count=300000000"之类,当然bs的值越小操作的速度就越慢,反之则越快了.
发表于 2008-11-3 16:26:39 | 显示全部楼层
已看 MARK
回复 支持 反对

使用道具 举报

发表于 2008-11-9 14:29:02 | 显示全部楼层
这是做了三遍的打包压缩操作吧, 如果在中途有修改文件什么的,最后结果不一定能用
回复 支持 反对

使用道具 举报

发表于 2008-11-10 21:08:11 | 显示全部楼层
:thank先收藏了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表