[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > Shell > 正文
Linux程式設計-11.Shell Script(bash)--(3)用於自動備份的Shell Script
http://www.openchess.org/noitatsko/programming/ (2001-05-25 10:08:00)
一個用於自動備份的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這個定時工具。可以讓原本需要耗時多個小時的人工備份工作,簡化到不到十分鐘。善用您的想像力,多加一點變化,可你讓您的生活變得輕鬆異常,快樂悠哉。 

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
Linux程式設計-31.工作群資訊管理(grp) (2001-05-27 22:08:00)
Linux程式設計-30.使用者資訊管理(pwd) (2001-05-27 21:04:00)
Linux程式設計-29.時間處理 (2001-05-27 20:10:01)
Linux程式設計-28.GNU Make (2001-05-27 19:00:00)
Linux程式設計-27.GNU Debugger (2001-05-27 18:08:01)
Linux程式設計-26.PIPE (2001-05-27 17:04:00)
Linux程式設計-25.Message Queues (2001-05-27 16:10:00)
Linux程式設計-24.Semaphores (2001-05-27 15:00:00)
Linux程式設計-23.共享記憶體(Shared Memory) (2001-05-27 14:08:00)
Linux程式設計-20.getopt (2001-05-27 13:04:00)

===更多相關===
 

★  樊強制作 歡迎分享  ★