LinuxSir.cn,穿越时空的Linuxsir!

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

在用dd做备份时可以将要备份的数据经过压缩后再备份吗?

[复制链接]
发表于 2004-5-28 16:27:36 | 显示全部楼层 |阅读模式
举个小例子来说吧:
比我的源文件为100M,且源盘己无可利用空间,而目标盘只有70兆空间。如果要是压缩的话我的源文件可以压缩到60M左右,也就是将这100M压缩后的文件是可以存入的。但问题是我没有其它的盘可以利用,所以真实的情况是要求将这100M文件在用dd传向我的目标盘的过程中就要压缩。也就是一边复制一边压缩。

象这种情况应该怎么打命令呢?是不是要用到管道呀,但管道能在边复制边压缩吗?
发表于 2004-5-28 18:37:04 | 显示全部楼层
直接用gzip就可压缩!
这是我的实验:
/home/lee/test#ls
/home/lee/test#dd if=/dev/zero of=tmp bs=1024 count=102400 2>/dev/null
/home/lee/test#ls
tmp
/home/lee/test#ll
总用量 102504
-rw-r--r--    1 lee      lee      104857600  5月 28 18:40 tmp
/home/lee/test#du -sh tmp
101M    tmp
/home/lee/test#gzip tmp
/home/lee/test#ll
总用量 104
-rw-r--r--    1 lee      lee        101795  5月 28 18:40 tmp.gz
/home/lee/test#ls
tmp.gz
/home/lee/test#gzip -d *.gz
/home/lee/test#ll
总用量 102504
-rw-r--r--    1 lee      lee      104857600  5月 28 18:40 tmp
发表于 2004-5-28 18:56:24 | 显示全部楼层
tar -cv -f - dir-want-to-zip/|gzip --to-stdout|dd of=outfile bs=100000k
 楼主| 发表于 2004-5-28 21:42:01 | 显示全部楼层
可能是我没有说清楚吧,你们两位说的好象和我说的不是一回事,象javalee兄说的那样是不行的,你说的先用dd if=aaa of=bbb bs=1 count=3 2>/dev/null这一句就不行了。因为我上面已经说了我的源盘已经没有空间了,那这个新的bbb放在哪里呢?如果指名一下路径将这个生成的bbb放到目标盘中也不行,因为我说了这个源文件100M大,而目标盘总共才70兆。

更明确的说,就是我的源盘和目标加在一起总共就70兆空间,而我现在要做的是把其中的一个100兆的文件放到这个70兆的空间内,且不利用其它的第三块以外的硬盘。
 楼主| 发表于 2004-5-28 21:55:53 | 显示全部楼层
当然象javalee兄说的那样,其实这个很简单直接用gzip就行,但这只是一个文件所以实现起来比较容易,但假如我们需要将文件分几段压缩放入不同的地方怎么办呢?

其实用dd命令可以实现对源文件的分段备份,并且每段备份的大小可以不同,但他只是同等的复制而己,而不能在备份时压缩,所以我的目的其实是想要一个命令能够实现在备份时就压缩,并且可以分成多段备份。
发表于 2004-5-28 22:50:20 | 显示全部楼层
用我的方法,把要压缩的文件放到want-to-zip/目录下面,用管道一边打包一边压缩一边用dd复制,我就曾经用这个命令备份的
发表于 2004-5-28 23:16:42 | 显示全部楼层
那 要看是什么类型的文件,压缩比例多少?
裸泳兄的不失为一个好方法
 楼主| 发表于 2004-5-29 11:53:39 | 显示全部楼层
能否请luoyong兄把这个命令具体写出来,我刚才试了几个都不对。
我写个具体情况,请你把命令写出来好吗?
情况如下:
源文件/usr/abc 此文件100兆,此盘已经无可用空间。
目标目录/mnt/winc 此目录还剩90兆空间。
请问如何将上面的abc放到/mnt/winc里?请写出具体来?谢谢
 楼主| 发表于 2004-5-29 11:57:21 | 显示全部楼层
当然我举这个例子的前提是这100兆文件肯定是可以压缩到90兆以内的。当然这里的两个盘总共就90兆可以利用,并且我是想用dd现实复制而不是直接用gzip压缩到那个目标盘里
 楼主| 发表于 2004-5-29 12:20:18 | 显示全部楼层
对不起,我想我还是没有把我的意思完全表达清楚,这样说吧,我把具体的情况都说出来,看大家有没有办法:

本人有3块硬盘,这3块硬盘的挂载位置和使用情况如下:
     /dev/hda ----/         (此盘为linux所在的盘,己基本用尽,只剩几兆的空间)
     /dev/hdb ----/mnt/a    (此盘只有30兆空闲空间)
     /dev/hdc ----/mnt/c    (此盘只有60兆空闲空间)

情况如下,我的/dev/hda内有一个大文件,位于/backup目录下,文件名为bigfile,大小为100兆。我的目的是不借助于其它存储介质的情况下,将/backup/bigfile文件备份到/dev/hdb和/dev/hdc上。


说明:经本人实验发现这个大文件压缩后最小能压缩到70兆。看来要想将这个文件备份到一个盘上是不行了,这样的话最少要两个过程,一个是压缩,因为源文件为100兆,而目录盘虽然是两个,但加起来总共才90兆空间,只有利用这两个盘的总空间才能备份完整。所以一定少不了压缩。二是分段备份,并且要将分开的段分别放入两个不同的地方。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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