|
我试过了,的确好使,现在把情况写一下:
基本情况如下:
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的值越小操作的速度就越慢,反之则越快了. |
|