|

楼主 |
发表于 2004-12-11 15:43:50
|
显示全部楼层
gao_linfeng兄心得:
终于实现了压缩-分段-备份的目的。(重发)
我试了,的确好使,把情况写一下:
其本情况如下:
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=10k count=30000
tar -zcvf - /mnt/a/foxabc|dd of=/mnt/c/foxabc2.tgz bs=10k skip=30000 count=20000
tar -zcvf - /mnt/a/foxabc|dd of=/mnt/d/foxabc3.tgz bs=10k skip=50000 count=30000
经过如上的方法,可以在不借助于其它盘的情况下,先将目标文件压缩成750兆并输出至屏幕,再经由管道传给后面的dd命令,而这个压缩文件不用保留到任何盘上,因为已经再没有这样大的空间去存放这个压缩文件了,而后面的命令可以将这个压缩文件分段后再存入到hd6 hda7和hda8上,这样做的话就比一般的方法可以更容易实现!
因为按照一般的方法是先压缩后再用split等命令分割,可是这个压缩的文件本身放到哪里呢?已经没有空间可用了,所以依据现在的情况用这个方法是不行的,只能用我如上的方法实现。
说明"tar -zcvf"是为了打包并压缩,而后面的"-"是为了输出到屏幕而不是建立个新文件,再后面的“|”是管道,因为dd命令默认的if选项就是屏幕所以if就省略了,后面的bs skip count的命令要适当使用,这是为了能实现分段备份的。
再次感谢各兄弟们的帮忙我才能把这个实现,不过也有个小遗憾,我昨天试了一晚也没试成功如何用一条命令行去恢复这个文件呢?唯一的方法是将这三个文件先用dd命令合成一个完整的缩后文件放到盘上,然后再对这个文件解压,这样做是可行的,但这样做就能产生出一个压缩的文件,我的目标原本是在不产生压缩文件的情况去实现压缩备份与解压缩的........
=======================
对于上面的恢复方法也很简单,首先你进入你准备放恢复数据的目录中
cd 你想放文件的目录
cat /mnt/b/fox.tgz1 /mnt/c/fox.tgz2 /mnt/d/fox.tgz3|tar -zxvf -
***************************************************************************
akarc兄的方法:
前些天重灌 Gentoo,从 stage1->stage2->stage3->stageX ... 应为是从stage1开始编译,没日没夜的编译。 所以编译完stage1之后,我就在网上找备份的方法,以下是整个过程中参考的三个文档。
主要跟着这份文档(英文)
http://gentoo-wiki.com/HOWTO_Gentoo...ux_2.6_and_NPTL
和
(中文)
http://www.gentoo.org.tw/doc/gentoo...uickinstall.xml
再找到这份备份文档(英文)
http://gentoo-wiki.com/HOWTO_Custom_Stage4
里面有一个叫stage4的系统壳备份脚本,我把它中文化了(utf-8),见附件。
大家批评一下!
脚本:
#! /bin/bash
## Backup script for Gentoo Linux
## Author: BrianW
## Author: Akar Chen (i18N -- zh)
## i18N_Date: 2004.12.11
## Date: 2004.10.26.
## Adapted from backupHome.sh by fdavid
## Adapted from mkstage4.sh by nianderson
## 这是系统壳脚本(bash),协助你建立整个系统的备份,(Gentoo的 stage4!! ^_^)
## 原作者说:他用来每星期备份,真的不敢效仿!! >_<
## @@译者是用这来备份 Gentoo stage1->stage2->stage3->stage4的基本系统建立过程的备份
## 一下是一些选项(配置),请把它改成适合您的需要!!
## -----------自定化区域!开始!-------------------
echo -=- 开始 备份...
echo -=- !注意! 记得先 根据您的系统的实际情况 来修改这脚本,来适合您的需要!!
echo -=-
echo -=- 初始化 各项选项(配置)。。。
## 备份档(steageX)的储存目录, 确记得要 “/” 在尾
stage4Location=/opt/gentoo/install/
## 备份档(steageX)的档案名。
archive=$stage4Location$(hostname)-stage4.tar.bz2
## 不需要备份的目录, 记得 !!不!!要 “/” 在尾。 
dir_excludes="/dev /proc /sys /tmp /usr/src /usr/portage /var /opt /root /home"
## 不需要备份的文档, 可用 * !!
## 例:file_excludes="*.mpg *.rmvb"
file_excludes=""
## 脚本等待用户取消执行的时间 (秒)
sleeping=3
## 请改下一个,不要改上一个!! --00--[ !妙招! 自夸一下 :-) ]--00--
sleeping=7
## -----------自定化区域 !终止!-------------------
## 合并不需要备份的 目录 和 文档。
excludes="$(echo -n "--exclude=$archive") $(for i in $dir_excludes; do if [ -d $i ]; then echo -n " --exclude=$i/*"; fi; done) $(for i in $file_excludes; do echo -n " --exclude=$i"; done)"
## 组合成 建立备份Trans的 tar 指令。
tarOptions="$excludes --create --absolute-names --preserve-permissions --bzip2 --verbose --totals --file"
echo -=- 完成 ,各项选项(配置)的 初始化!
echo -=-
##!译注! 因为我的 /boot 就在根分区上,所以把/boot的备份过程去掉了!! 详见原脚本。
##################################
## 建立 备份档。
echo -=- 建立 tar压缩备份档 tarball \=\=\> $archive
echo -=-
echo -=- 将在 $sleeping 秒 之后执行 这个备份指令:
echo -=- !!您现在仍可以用 Ctrl + C 来取消!!
echo -=- tar ${tarOptions} ${archive} /
sleep $sleeping
echo -=- 正在执行以上的备份指令:
tar ${tarOptions} ${archive} /;
echo -=- 备份完成
## This is the end of the line.
## 本脚本的最后一行。 
echo -=- 备份脚本执行 完成!
*************************************************************************
redsea兄的方法:
我是直接在当前运行系统中做备份, 需要先停止 udev 和 mysql.
udev 如果不停止, 备份出来的dev 目录不对,
mysql 不停止的话, 备份出来的数据有可能不完整.
解开的时候要 -p. 我解开的时候, 用 tar xvzfp.
我压缩的时候, 还用了一个 -l 参数, 不备份 root 文件系统之外的文件系统, 因为我平时mount 了很多东西.
压缩用的 script如下:
#!/bin/sh
# linux root. if is / then need not the slash
root=
# output file name
targetdir=/g
# file name
filename=debian_kde.tgz
echorun(){
echo $*
$*
}
echorun /etc/init.d/udev stop
echorun /etc/init.d/mysql stop
echorun rm ${targetdir}/$filename
echorun . ./clearlog
echorun tar cvzfl ${targetdir}/${filename} ${root}/ --exclude /tmp --exclude /proc --exclude /sys --exclude /var/cache/apt/archives --exclude /root/.opera/cache4 --exclude /root/.mozilla/firefox/default.to1/Cache |
|