1,212 瀏覽數

Linux 系統與檔案備份

Linux 備份的方法可以分成兩部份 1.OS本身 2.重要資料

  • 備份方法 1: 利用 Ghost 作備份 OS 本身
  • 備份方法 2: 利用 tar 備份重要資料

備份方法 1: 利用 Ghost 作備份OS本身

欲利用 Ghost 來備份 Linux 平台, 應先了解您拿到的 Ghost 版本, 以及各版本支援 Linux 檔案系統的程度為何?這其中還牽涉到開機程式 LILO 及 GRUB 的支援及復原問題. 換言之, 欲成功備份及還原 Linux 平台, 應該針對 “檔案系統"及 “多重開機程式" 這二個部份來處理.

以下是 Ghost 各版本支援 Linux 檔案系統的情形:
http://service1.symantec.com/

Ghost 版本 Ghost 2003 Symantec Ghost 7.5 Ghost 2002 symantec Ghost 7.0
支援 sector 對拷 支援 支援 支援 支援
支援 EXT2 支援 支援 支援 支援
支援 EXT3 支援 支援 不支援 不支援

目前我使用的是 Ghost Server 7.5 , 這個版本皆支援 Linux 最新的檔案系統 ext3 以及 LILO 多重開機程式的復原. 但是不支援 GRUB 的備份.

note:
Ghost Server 7.5 能正常備份 LILO 但 GRUB 並不行.所以要等備份完成後,用原開機磁片開機, 再下 grub-install /dev/hda的指令, 即可把 GRUB 再安裝回 MBR 中.

Ghost 8.0 已經能備份 GRUB 了.

做 Ghost 時,記的要加上 a:ghost –ial
-ial Force a sector by sector copy of Linux partitions, other partitions as normal.
還有 MBR 預設是無法備份的,所以記得在使用 ghost 備份程式時要將“Options / Image Tape /Image Boot”標記起來,這樣  ghost 才會幫我們將 MBR 備份起來.

至於如何備份 OS, 這個過程和您在 Windows平台上的做法相差不遠. 簡述如下:
使用 Ghost Server 所提供的 Ghost Boot Wizard 做一片 DOS 的開機片(開機片內容請參考官方網站說明 http://service1.symantec.com/SUPPORT/INTER/ent-securitytraditionalchinesekb.nsf/twdocid/20020913113758932), 內含 Ghost 主程式以及網路驅動程式,驅動程式依據你所選的網路裝置會提供不同的程式,通常需要自己更新這驅動程式如 Broadcom 的名稱為 b57.dos ,請上官方網站下載和你平台相同的 DOS 網路驅動程式.以此開機片開機,接下來操作的過程和 Windows 平台一樣.至於還原的方法, 也是和 Windows 平台相同.

如果你沒有 Ghost Server,另外介紹一個 Linux 好用的類似 Ghost Server 的軟體.
http://www.feyrer.de/g4u/

備份方法 2: 利用 tar 備份重要資料

備份大概可以區分為下面幾種策略.

  • 完整備份 (Full backup)
    就是針對檔案完整性的備份,優點是還原快速,缺點是備份時間過久,所以會搭配 差異備份(Differential backup) 一同使用 .
  • 差異備份 (Differential backup)
    需要先有完整備份 (Full backup),之後的備份會先比對 完整備份 (full backup) 的檔案再來針對不同的地方備份.優點是速度快,但需要有一份完整備份檔案,缺點是 不適用於常變化的檔案,因為時間久了之後跟 完整備份 (full backup) 需要很久的時間.
  • 累積備份 (Incremental backup)
    類似於 差異備份 (Differential backup),但會產生多個 差異備份 (Differential backup) 檔,每次的備份都會跟最後一分的 差異備份 (Differential backup)檔案做比較,優點在於可以快速備份,但缺點是還原時間需要比較多的時間(需先還原 完整備份 (Full backup)檔 再還原 一個個的 累積備份 (Incremental backups) 檔).

下面就用 tar 包裝+壓縮(多數 Linux 簡單的備份方式之一).

  1. 完整備份 (Full backup)
    假設我們只需要備份 /var/ftp 和 /tftpboot 這個目錄,
    可以如此做:

    [root@benjr root]# tar zcvf ftp.tar /var/ftp
    [root@benjr root]# tar zcvf tftp.tar /tftpboot
    

    若要打包之後, 再行壓縮, 可加個 z 選項
    其中 c 是開設一個新檔, f 是指定檔名之意
    若要詳細顯示, 可多加個 v 選項

    對於備份檔應該加註日期, 這個可以透過 date +時間格式 這個指令達成, 比如:

    [root@benjr root]# tar zcvf ftp.`date +%F`.tar /var/ftp
    [root@benjr root]# tar zcvf tftp.`date +%F`.tar /tftpboot
    

    結果可能會得到 : ftp.2004-10-15.tar 和 tftp.2004-10-15.tar 檔案

    當然, 您應該利用 shell script 及 crontab 這二個工具, 將您上述的動作把它自動化, 最好是在備份好之後, 還能自動再寄一封通知 email 到您指定的信箱去.

    shell script
    下面是我自己寫的 Full Backup 程式

    [root@benjr root]# vi /root/backup.sh
    #! /bin/bash
    mkdir -p /backup/`date +%F`
    cd  /backup/`date +%F`
    find /var/ftp/* > /backup/`date +%F`/new.lst
    tar cvzf /backup/`date +%F`/ftp.`date +%F`.tar.gz /var/ftp
    tar cvzf /backup/`date +%F`/tftp.`date +%F`.tar.gz /tftpboot
    rm -f /backup/*
    mv /backup/`date +%F`/* /backup
    rmdir /backup/`date +%F`
    

    這個是 full backup ,備份完之後就將之前舊的資料清除.記的權限要改成可執行 #chmod a+x backup.sh.

    當然沒有人要自己去備份這些東西,最好是系統能自己備份,所以可以用 crontab 來幫我們.

    [root@benjr root]# crontab –e
    0 2 1 * * backup.sh
    

    我們的備份策略為每個月的一號做 full backup.

    但當檔案很多的時候建議可以使用 LVM + Snapshot http://benjr.tw/7353 的方式來做,確保資料備份的完整.

  2. 差異備份 (Differential backup)
    我們不可能每天都將 /var/ftp 和 /tftpboot 做一次完整的資料備份,所以通常的做法是

    完整備份 (Full backup) + 差異備份 (Differential backup)

    • 完整備份 (Full backup) 每個周末沒人上班時候做一次.
    • 差異備份 (Differential backup) 每個工作日下班後來備份與 完整備份 (Full backup) 有差異的部分.

    但我們要怎麼做到 Differential backup (差異備份) ,我用的方式如下:

    [root@benjr root]# touch new.lst
    [root@benjr root]# touch /var/ftp/test
    [root@benjr root]# find /var/ftp -cnewer new.lst > diff.lst
    [root@benjr root]# cat diff.lst
    /var/ftp
    /var/ftp/test
    

    # touch new.lst
    記錄本次備份(第一次全部備份)之時間.
    # touch /var/ftp/test
    故意在 /var/ftp 目錄產生一個檔案
    # find /var/ftp -cnewer new.lst > diff.lst
    find 參數 -cnewer 會跟據後面指定的檔案 (new.lst) 來比對 /var/ftp 裡面的檔案是不是比 new.lst 還要新.
    # cat diff.lst
    所以你會看到 diff.lst 的內容是 test

    [root@benjr root]# tar zcvf ftp.`date +%F`.tar -T diff.lst
    

    這時候就可以利用 tar -T 指定備份有異動的檔案.

    /tftpboot 目錄一樣可用相同的方式來做
    .
    當然, 您應該利用 shell script 及 crontab 這二個工具, 將您上述的動作把它自動化, 最好是在備份好之後, 還能自動再寄一封通知 email 到您指定的信箱去.

    diff Backup 程式

    [root@benjr root]# vi /root/diff.sh
    #! /bin/bash
    if [ -f /backup/new.lst ]; then
    cd  /backup/
    rm -f /backup/diff.lst
    find /var/ftp/* -cnewer /backup/new.lst > /backup/diff.lst
    tar cvzf /backup/ftp.diff.`date +%F`.tar.gz -T /backup/diff.lst
    find /var/tftp/* -cnewer /backup/new.lst > /backup/diff.lst
    tar cvzf /backup/tftp.diff.`date +%F`.tar.gz -T /backup/diff.lst
    else
    cd  /backup/
    rm -rf /backup/*
    find /var/ftp/* > /backup/new.lst
    tar cvzf /backup/ftp.`date +%F`.tar.gz /var/ftp
    tar cvzf /backup/tftp.`date +%F`.tar.gz /tftpboot
    fi
    

    這裡會檢查資料是否有 full backup 沒有的話就做 full backup,要不然就做 diff backup. 記的權限要改成可執行 #chmod a+x diff.sh.

    當然沒有人要自己去備份這些東西,最好是系統能自己備份,所以可以用 crontab 來幫我們.

    [root@benjr root]# crontab –e
    0 6 * * 6 diff.sh
    

    而每星期六做只備份異動檔

網友的想法

  1. 自動參照通知: 備份 Backup – Benjr.tw

發表迴響