和网友分享我的计算机硬盘备份的小程序

作者:老石  于 2010-12-17 11:47 发表于 最热闹的华人社交网络--贝壳村

通用分类:其它日志|已有2评论

关键词:

我在前两篇关于计算机备份的网文里,我和网友分享了我的备份的心得。今天有空,我再和网友分享一下自己用的备份小程序backup.sh (见附录)。这个程序在 Knoppix LINUX 下运行。它可以为硬盘作压缩备份,它会在备份硬盘上创建一个以日期命名的文件夹,把压缩的备份镜像储存在这个文件夹内。备份完成后,在这个文件夹内自动生成一个供复原用的小程序restore.sh。

一次性准备:

1)在备份硬盘上,给要备份的计算机建一个文件夹。这个工作可以在视窗下做,也可以在Linux下面做。比如,在视窗下,我的备份硬盘是F:\,我要为Lenovo S10-2计算机做备份,我就创建F:\S10-2 (见下图。我给每一台要备份的计算机创建了对应的文件夹)


2)把backup.sh脚本储存到F:\S10-2。你可以COPY PASTE到你的备份文件夹。(我在每个备份文件夹内,都有一个和计算机一致的backup.sh脚本文件)

3)启动Knoppix Linux前,除去所有外接USB储存设备,只留备份USB硬盘。(这样做的目的在于今后 Knoppix 在指定备份USB硬盘标识时总是一致。假如,唯一的USB硬盘就是备份硬盘,这次得到的标识是sdc,下次启动时,你没有多加外接USB硬盘,那么这个备份硬盘得到的标识还是sdc。如果启动时,你外接USB硬盘有时候是一个,有时是两个或更多,那你就无法保证Knoppix每次都会把sdc作为备份USB硬盘的标识。)

4)用Knoppix光盘启动Knoppix Linux。选择Graphical Programs > Start1xde Full X Screen

5) 点击桌面左下方的 “PCMan File Manager”


File Manger 打开如下图所示。

    6) 点击左边的硬盘标识,寻找源盘的标志。

    视窗系统下的C:\盘(即源盘),在大多数情况下它标志是sda。你在File Manager左边点击各硬盘标识,如果见到WINDOWS系统下常见的文件夹时,就可以确定源盘在KNOPPIX系统下如何识别的。从上图可以确定机器内装的硬盘是sda

    7) 点击“BACKUP”硬盘。目的是寻找“的盘”以及备份文件的路径。

    比如,我要为计算机S102作备份,我就一路点击到“/media/sdc1/S10-2”。记住或复制这个备份路径。(见下图)

8) 修改backup.sh脚本文件,使其符合你的计算机系统的特定设置。

  • 点击左下角的企鹅标识Start -> Accessories -> LeafPad

  • 到你所要做备份的文件夹下,打开backup.sh(即在第二步中保存的脚本文件)。在我的例子中,我打开的是/media/sdc1/S10-2/backup.sh

  • 确定或修改第一、二行,使其符合你的系统(修改或确定下面红字的部分),然后储存这个脚本文件。

SOURCE_DISK=sda # 源盘命名,须与第6步得到的结果一致。

TARGET_DIR=/media/sdb1/S10-2/`date +"%Y_%m%d"`  # 的盘及备份文件夹,须与第7步的结果一致。


制作备份的具体操作方法

现在可以使用backup.sh这个脚本了。

1) 点击桌面左下方 Terminal emulator

2) 在Terminal emulator里,转入到“的盘”备份文件夹下。在我的例子中,我输入指令如下:

cd /media/sdc1/S10-2

3) 在“的盘”的备份文件夹下运行刚才改动过的backup.sh指令。在我的例子中,我在/media/sdc1/S10-2下发出以下指令:

./backup.sh > backup.log &

你可以尾随backup.log来观察进度。

tail -f backup.log

4) 完成备份。

backup.sh 程序会在备份文件夹下创建一个以当天日期命名的文件夹,并在此文件夹下生成一个压缩的镜像备份 img.gz,以及一个硬盘恢复指令文件 restore.sh

在我的例子中,假设我在20101113日作备份,那么backup.sh会创建

/media/sdc1/S10-2/2010_1113

并且在此之下生成img.gz restore.sh


硬盘恢复的具体操作方法

1) 在计算机启动前,除去所有外接USB硬盘,只留备份USB硬盘。

2) 用Knoppix光盘启动Knoppix Linux。选择Graphical Programs > Start1xde Full X Screen

3) 打开File Manager,点击源盘和的盘(确保它们挂载)。

4) 打开Terminal emulator,转入到你的备份文件夹。在我的例子中,我要转到

/media/sdc1/S10-2/2010_1113

5) 在此,输入指令:

./restore.sh &


附录

#/bin/sh

##########################################################################

# script: backup.sh

# Author: Shi WJ

# Date: 2008.12.

# Purpose: Backup disk to an compressed image file.

##########################################################################

SOURCE_DISK=sda

TARGET_DIR=/media/sdb1/S10-2/`date +"%Y_%m%d"`

# Note: you need to make sure that the source disk is correct, and the

# target directory is changed to correctly reflect your system.


if [ $# -gt 1 ]

then

echo "Usage:"

echo " backup.sh [noClean]"

echo " Without [noClean], cleaning is automatic."

exit -1

fi

CLEAN=Y

if [ $# -eq 1 ]

then

if [ $1 != "noClean" ]

then

echo "Usage:"

echo " backup.sh [noClean]"

echo " Without [noClean], cleaning is automatic."

exit -1

fi

CLEAN=N

echo `date +"%Y/%m/%d %H:%M:%S"` " Starting Disk backup in 'noCleaning' Mode."

else

echo `date +"%Y/%m/%d %H:%M:%S"` " Starting Disk backup in 'Cleaning' Mode."

echo " FYI, './backup.sh noClean' could be used for Non-cleaning mode backup."

fi


echo `date +"%Y/%m/%d %H:%M:%S"` " Source Disk to be backed up: $SOURCE_DISK"

echo `date +"%Y/%m/%d %H:%M:%S"` " The backup image will be located in: $TARGET_DIR"


echo `date +"%Y/%m/%d %H:%M:%S"` " Checking the backup source directory..."

SOURCE_MOUNTED=N

for SOURCE_DIR in /media/${SOURCE_DISK}*

do

if [ -d ${SOURCE_DIR} ]

then

echo `date +"%Y/%m/%d %H:%M:%S"` " Source Mounted: ${SOURCE_DIR}"

SOURCE_MOUNTED=Y

fi

done


if [ ${SOURCE_MOUNTED} = "N" ]

then

echo `date +"%Y/%m/%d %H:%M:%S"` " No source directory is not mounted. Exiting..."

exit -1

fi


echo `date +"%Y/%m/%d %H:%M:%S"` " Checking the backup target directory..."

if [ ! -d ${TARGET_DIR} ]

then

echo `date +"%Y/%m/%d %H:%M:%S"` " Backup target directory ${TARGET_DIR} does not exist. Creating..."

mkdir ${TARGET_DIR}

if [ $? -eq 0 ]

then

echo `date +"%Y/%m/%d %H:%M:%S"` " Backup target directory ${TARGET_DIR} created."

else

echo `date +"%Y/%m/%d %H:%M:%S"` " Failed to create backup target directory ${TARGET_DIR}. Exiting..."

exit -1

fi

else

echo `date +"%Y/%m/%d %H:%M:%S"` " Backup target directory ${TARGET_DIR} exists."

fi


if [ $CLEAN = "Y" ]

then

echo `date +"%Y/%m/%d %H:%M:%S"` " Ready to clean the free space in source disk before backup."

for SOURCE_DIR in /media/${SOURCE_DISK}*

do

if [ -d ${SOURCE_DIR} ]

then

echo `date +"%Y/%m/%d %H:%M:%S"` " Cleaning unused space of ${SOURCE_DIR}..."

dd if=/dev/zero of=${SOURCE_DIR}/zerofile bs=512k

rm ${SOURCE_DIR}/zerofile

fi

done

else

echo `date +"%Y/%m/%d %H:%M:%S"` " Source disk cleaning skipped."

fi


echo `date +"%Y/%m/%d %H:%M:%S"` " Backup the entire hard disk to the image file..."

dd if=/dev/sda ibs=512k | gzip > ${TARGET_DIR}/img.gz

echo `date +"%Y/%m/%d %H:%M:%S"` " Backup complete. The image file: ${TARGET_DIR}/img.gz"


echo "gzip -dc $TARGET_DIR/img.gz | dd of=/dev/sda obs=512k &" > $TARGET_DIR/restore.sh

echo `date +"%Y/%m/%d %H:%M:%S"` " restore.sh created ${TARGET_DIR}/restore.sh"

echo "Good-bye"

exit 0




高兴

感动

同情

搞笑

难过

拍砖

支持
3

鲜花

刚表态过的朋友 (3 人)

发表评论 评论 (2 个评论)

4 回复 老石 2010-12-17 11:56
不好意思,我贝克网的系统把我程序脚本的退缩空格全部取消了。我不知道如何使程序读起来容易些。不过这不会影响程序的工作。
3 回复 菰鲰 2011-2-26 12:25
收藏了,有空试试。谢啦!

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

关于本站 | 隐私政策 | 免责条款 | 版权声明 | 联络我们 | 刊登广告 | 转手机版 | APP下载

Copyright © 2001-2013 海外华人中文门户:倍可亲 (http://www.backchina.com) All Rights Reserved.

程序系统基于 Discuz! X3.1 商业版 优化 Discuz! © 2001-2013 Comsenz Inc. 更新:GMT+8, 2024-3-29 06:09

倍可亲服务器位于美国圣何塞、西雅图和达拉斯顶级数据中心,为更好服务全球网友特统一使用京港台时间

返回顶部