倍可親

和網友分享我的計算機硬碟備份的小程序

作者:老石  於 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 個評論)

回復 老石 2010-12-17 11:56
不好意思,我貝克網的系統把我程序腳本的退縮空格全部取消了。我不知道如何使程序讀起來容易些。不過這不會影響程序的工作。
回復 菰鯫 2011-2-26 12:25
收藏了,有空試試。謝啦!

facelist doodle 塗鴉板

您需要登錄后才可以評論 登錄 | 註冊

關於本站 | 隱私權政策 | 免責條款 | 版權聲明 | 聯絡我們

Copyright © 2001-2013 海外華人中文門戶:倍可親 (http://big5.backchina.com) All Rights Reserved.

程序系統基於 Discuz! X3.1 商業版 優化 Discuz! © 2001-2013 Comsenz Inc.

本站時間採用京港台時間 GMT+8, 2024-4-18 21:43

返回頂部