LinuxSir.cn,穿越时空的Linuxsir!

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

可以实现压缩后分段备份的方法终于实现了,感谢javelee,lonereed和其它兄弟!

[复制链接]
发表于 2004-6-4 12:37:15 | 显示全部楼层 |阅读模式
我试了,的确好使,把情况写一下:
其本情况如下:
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的大文件备份到这三个盘上,注意这三个盘总空间不够,所以必须在经过压缩后再备份,由于是三个盘,每个盘空间不足750兆,所以要分段或分割的方法才能实现。

实现方法如下:
tar -zcvf - /mnt/a/foxabc|dd of=/mnt/b/foxabc1.tgz bs=1 count=300
tar -zcvf - /mnt/a/foxabc|dd of=/mnt/c/foxabc2.tgz bs=1 skip=300 count=200
tar -zcvf - /mnt/a/foxabc|dd of=/mnt/d/foxabc3.tgz bs=1 skip=500 count=300

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

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

再次感谢各兄弟们的帮忙我才能把这个实现,不过也有个小遗憾,我昨天试了一晚也没试成功如何用一条命令行去恢复这个文件呢?唯一的方法是将这三个文件先用dd命令合成一个完整的缩后文件放到盘上,然后再对这个文件解压,这样做是可行的,但这样做就能产生出一个压缩的文件,我的目标原本是在不产生压缩文件的情况去实现压缩备份与解压缩的........
发表于 2004-6-4 12:54:38 | 显示全部楼层
tar与dd组合典型的应用实例,very nice!! :thank
支持创,加鼓励 !!!
发表于 2004-6-4 13:15:54 | 显示全部楼层

回复: 可以实现压缩后分段备份的方法终于实现了,感谢javelee,lonereed和其它兄弟!

最初由 gao_linfeng 发表
不过也有个小遗憾,我昨天试了一晚也没试成功如何用一条命令行去恢复这个文件呢?唯一的方法是将这三个文件先用dd命令合成一个完整的缩后文件放到盘上,然后再对这个文件解压,这样做是可行的,但这样做就能产生出一个压缩的文件,我的目标原本是在不产生压缩文件的情况去实现压缩备份与解压缩的........
  1. cat foxabc1.tgz foxabc2.tgz foxabc3.tgz | tar -xzvf -
复制代码
 楼主| 发表于 2004-6-4 16:39:19 | 显示全部楼层
谢谢avalee兄,

请问lonereed兄cat a b c他的输出结果也是默认指向屏幕吗?是不是这样做只是向这个变量中释放这三个文件的内容,而不会真正输入至屏幕?

另外所有的命令都可以用 - 来表示从屏幕中获得吗?如果不用 - 而是用那个变量名行不行?
发表于 2004-6-4 21:17:25 | 显示全部楼层
1)cat 命令是显示到屏幕的
2)很多命令都用 - 表示标准输入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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