IT Knowledge Base

~ Without sacrifice, there can be no victory ~

發佈日期:

分類:

, ,

如何在Ubuntu Desktop (9.10, 10.04)下‧執行定期的檔案至DVD碟備份工作(以7z作壓縮)

01. 備份工作主要分為3部份。第1部份先將相關檔案、資料夾以7z方式,加以密碼作壓縮。第2部份會將已壓縮檔案,燒錄至DVD碟內。第3部份將DVD碟內資料解壓,再跟原來檔案比較,以保證DVD碟內檔案跟原來的一致。02. 如使用7z壓縮,請先安裝7z套件。

sudo apt-get install p7zip-full

03. 建立7z壓縮執行檔及貼上以下內容。以下例子為以7z方式,每個檔案不太於2GB,以密碼password作保護,將/var/lib/mysql、/data資料夾內資料,壓縮到/backup/monthly資料夾內,以今天日期命名的檔案($file.7z),及把壓縮過程文件,寫入到/backup/monthly資料夾內,以今天日期命名的檔案中($file.log)。

sudo gedit zip.sh
clear
file=$(date +"%Y%m%d")
sudo 7z a -v2048m -t7z -ppassword /backup/monthly/$file.7z /var/lib/mysql /data > /backup/monthly/$file.log 2>&1

04. 壓縮完成後,在/backup/monthly資料夾內,會找到今天日期命名的檔案.7z及今天日期命名的檔案.log。

05. 建立檔案名為initial.tmp,不需要有任何內容,用於燒錄時檢查,DVD碟是否第一次燒錄(First session)或是繼續燒錄(Continuous session)。

06. DVD燒錄前,如是DVD-RW,需保證己格式化。

07. 建立燒錄執行檔及貼上以下內容。以下內容為先掛上DVD燒錄器,再檢查DVD碟內是否存在initial.tmp檔案,如沒有則代表第一次燒錄(First session),否則則是繼續燒錄(Continuous session),完成後卸下燒錄器。

sudo gedit burning.sh
clear
file=$(date +"%Y%m%d")
umount /dev/sr0
umount /media/cdrom0
mount /dev/sr0 /media/cdrom0
if [ -e /media/cdrom0/initial.tmp ];
then
echo "Not first session"
growisofs -dvd-compat -input-charset utf-8 -V "backup_disk" -M /dev/sr0 -R -J /backup/monthly/$file.* > /data/hd_status/burning.log 2>&1
else
echo "First session"
growisofs -dvd-compat -input-charset utf-8 -V "backup_disk" -Z /dev/sr0 -R -J /backup/monthly/initial.tmp /backup/monthly/$file.* > /data/hd_status/burning.log 2>&1
fi
umount /dev/sr0
umount /media/cdrom0

08. 建立檢查執行檔及貼上以下內容。以下內容為先檢查/tmp/monthly_backup暫存資料夾是否存在,如不存在則建立資料夾。再掛上DVD燒錄器,將DVD碟用量及內裡檔案解壓出來,解壓過程文件則寫入/data/hd_status/dvd_extract.log檔案內。之後使用cmp命令,比較暫存資料夾檔案及原來檔案內容,比較過程文件寫入/data/hd_status/dvd_compare.log檔案內。最後刪除暫存資料夾。

sudo gedit check.sh
#!/bin/sh
if [ -e /tmp/monthly_backup ];
then
echo "/tmp/monthly_backup folder exist"
else
echo "/tmp/monthly_backup folder is not exist.  Create new one"
mkdir /tmp/monthly_backup
fi
cd /tmp/monthly_backup

file=$(date +"%Y%m%d")
umount /dev/sr0
umount /media/cdrom0
mount /dev/sr0 /media/cdrom0

if [ -e /media/cdrom0/$file.log ];
then
echo "find $file.log on DVD disk"
df -l /dev/sr0 > /data/hd_status/backup_dvd.log
sudo rm /backup/monthly/$file.*
fi

echo "starting extract zip file"
if [ -e /media/cdrom0/$file.7z ];
then
7z x -ppassword /media/cdrom0/$file.7z > /data/hd_status/dvd_extract.log
else
7z x -ppassword /media/cdrom0/$file.7z.001 > /data/hd_status/dvd_extract.log
fi

umount /dev/sr0
umount /media/cdrom0

echo "comparing"
find /tmp/monthly_backup -name "*" > /tmp/file_list.log
sed 's/\\/tmp\\/monthly_backup//' /tmp/file_list.log > /tmp/path_list.log
exec < /tmp/path_list.log
read line
echo "Compare process starting..." > /data/hd_status/dvd_compare.log
echo "" >> /data/hd_status/dvd_compare.log
while read line
do
echo "Comparing file," $line >> /data/hd_status/dvd_compare.log
cmp /tmp/monthly_backup$line $line >> /data/hd_status/dvd_compare.log
echo "" >> /data/hd_status/dvd_compare.log
done

rm -R /tmp/monthly_backup
rm /tmp/file_list.log
rm /tmp/path_list.log

09. 最後在系統中,加入定期工作(cron job),分別執行zip.sh、burning.sh、及check.sh檔案。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *