Linux程式設計-11.Shell Script(bash)--(3)用於自動備份的Shell Script(轉)

post0發表於2007-08-11
Linux程式設計-11.Shell Script(bash)--(3)用於自動備份的Shell Script(轉)[@more@]

from:

一個用於自動備份的Shell Script

我們先前提到,可利用Shell Script搭配crond來作定期的工作。要作定期性的工作,在UNIX上,就是與crond的搭配運用。

--------------------------------------------------------------------------------

首先我們先來研究如何對系統進行備份。

要對系統進行備份,不外乎便是利用一些壓縮工具。在許多UNIX系統上,tar及gzip是de facto的資料交換標準。我們經常可以看見一些tar.gz或tgz檔,這些檔案,被稱為tarball。當然了,您也可以用bzip2、zip等等壓縮工具來進行壓縮,不必限定於gzip。但tar配合gzip是最普遍的,也是最方便的方式。

要將我們想要的資料壓縮起來,進行備份,可以結合tar及gzip一起進行。方式有很多種,最常用的指令是以下這一種:

tar -c file/dir ... | gzip -9 > xxxx.tar.gz

您也可以分開來做:

tar -r file/dir ... -f xxxx.tar

gzip -9 xxxx.tar

tar -r file/dir ... -f xxxx.tar

gzip -9 < xxxx.tar > xxxx.tar.gz

--------------------------------------------------------------------------------

在解過Linux下檔案備份的基本知識後,我們來寫一個將檔案備份的Script。

#!/bin/sh

# Filename : backup

DIRS="/etc /var /your_directories_or_files"

BACKUP="/tmp/backup.tgz"

tar -c $DIRS | gzip -9 > $BACKUP

其中DIRS放的是您要備份的檔案及目錄,BACKUP是您的備份檔。可不要將/tmp放進DIRS中,那樣做,您是在做備份的備份,可能將您的硬碟塞爆。

--------------------------------------------------------------------------------

接下來測試

[foxman@foxman bash]# chmod 755 backup

[foxman@foxman bash]# ./backup

執行完成後在/tmp就會有一個backup.tgz,裡面儲存了您重要的資料。您可用

gzip -dc /tmp/backup.tgz | tar -vt

tar vtfz /tmp/backup.tgz

來看看裡面的檔案列表。

要解開時,可用以下指令來完成復原:

gzip -dc /tmp/backup.tgz | tar -xv

tar xvfz /tmp/backup.tgz

備份通常是僅備份系統通常最重要的部份,/etc可說是不可缺少的一部份。另外,看您系統中有那些重要的資料需要備份。通常來說,您沒有必要備份 /bin、/sbin、/usr/bin、/usr/sbin、/usr/X11R6/bin等等這些執行檔目錄。只要備份您重要的檔案即可,別把整個硬碟備份,那是蠻呆的動作。

--------------------------------------------------------------------------------

如果您有許多臺機器,可利用其中一臺任務較輕的內部網路主機,做為主要備份主機。將所有機器都自動執行備份,然後利用NFS/Coda/Samba等網路檔案系統,將備份的資料放到該備份機器中,該機器則定時收取備份資料,然後您再由該機器中進行一次備份。

這裡是整個系統備份方案的圖示。

在您進行之前,先解一下,系統中那些是要備份的,那些是不需要的。

--------------------------------------------------------------------------------

新的backup

#!/bin/sh

HOSTNAME=`hostname`

DIRS="/etc /var /your_important_directory"

BACKUP="/tmp/$HOSTNAME.tgz"

NFS="/mnt/nfs"

tar -c $DIRS | gzip -9 > $BACKUP

mv -f $BACKUP $NFS

--------------------------------------------------------------------------------

備份主機內的Script : collect_backup

#!/bin/sh

NFS="/mnt/nfs"

BACKUP="/backup"

mv -f $NFS/*.tgz $BACKUP

在此,您不能夠將所有備份都直接放在/mnt/nfs,這是危險的。萬一任一臺機器不小心將/mnt/nfs所有內容刪除,那麼備份就會消失。因此,您需要將/mnt/nfs移到一個只有該備份主機可存取的目錄中。

--------------------------------------------------------------------------------

當這些個別的Script都測試好以後,接下來我們將他們放到crontab裡面。找到您的crontab,它的位置可能在/var/spool/cron/crontabs/root、/etc/crontab、/var/cron/tabs/root。

在crontab中選擇以下之一加入(看您定期的時間):

Slackware : /var/spool/cron/crontabs/root

01 * * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每小時(太過火一點)

30 16 * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每日16:30,下班前備份

30 16 * * 0 /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每週一16:30

0 5 1 * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每月一號5:0

RedHat/Debian : /etc/crontab

RedHat可直接將backup放入/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly。或採用如上加入/etc/crontab的方式:

有關crontab的用法,可查"man 5 crontab",在此不詳述。

備份主機的設定類同。

注意: 所有機器不要同時進行備份,否則網路會大塞車。備份主機收取備份的時間要設為最後,否則會收不到備份資料。您可以在實作後,將時間間隔調整一下。

--------------------------------------------------------------------------------

看看,兩個小小不到三行的Shell Script,配合cron這個定時工具。可以讓原本需要耗時多個小時的人工備份工作,簡化到不到十分鐘。善用您的想像力,多加一點變化,可你讓您的生活變得輕鬆異常,快樂悠哉

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-944713/,如需轉載,請註明出處,否則將追究法律責任。

相關文章