|
|||
2005/01/09 修改 | |||
在 FreeBSD 中已經內建好一些和備份有關的指令,例如:tar , dump , restore , dd , cpio , pax , ...... 至於要使用哪個工具則視個人喜好及需求囉!我個人習慣用 tar 來備份像 /etc , /usr/local/etc , ...... 等以目錄或檔案為主的設定檔,如果像使用者的資料 (/home) 及信箱 (/var/mail) 是放在單獨的 partition 則是利用 dump 備份及用 restore 來還原。 下面就來看看如何用 tar 及 dump 完成基本的備份工作。 1 tartar (tape archive) 原本是設計用來將文件打包到磁帶中的,我們也可以將檔案或是目錄打包成一個單一的檔案,必要時再用同一個程式來將資料全部還原或是只解開部份的資料,正因為它可以備份檔案或目錄,深受大家的愛用。 常用參數:
由於 tar 的功能非常的多,指令可用的選項令人眼花瞭亂,下面只示範最常用的,有興趣再自己用 man tar 好好的研究囉! 1-1 以 tar 打包要備份的資料如果沒有什麼特殊需求,利用 tar 備份檔案只要用到 -c (新增) ,-p (保留權限設定),-f (指定檔名),頂多再加個 -v 看一下打包的過程。 例如:
上例將 /etc 目錄中所有的檔案打包到 /home/backup/etc.tar 中。 也可以同時備份多個目錄,將要打包的清單(以空白分隔)接在最後面即可。下面的例子將 /etc , /usr/local/etc 打包在 etc.tar 中:
我們也可以使用:
和前面的例子比較,多了個參數 z ,也就是將 tar 打包完的檔案再利用 gzip 壓縮,所以新產生有經過壓縮處理的備份檔我們也將檔名命名為 etc.tgz (.tgz 結尾),也有人用 .tar.gz ,端看個人習慣。 咦∼好奇的人可能會想到 FreeBSD 的 packages 檔名好像叫 *.tgz 或 *.tbz,和 tar , gzip , bzip 有沒有關啊?有興趣可以找個 FreeBSD 的 package ,用 tar 來打開包裝看看哦!! 另外,比較一下這兩個同樣是備份 /usr/local/etc 的指令有何不同?
由於 tar 預設在備份時會儲存檔案的路徑 (但是自動去掉開頭的第一個斜線) ,也就是 /usr/local/etc/rc.d 在 local.etc.1.tgz 中會變成 usr/local/etc/rc.d,如果我們連 usr/local 都不想要,打包時可以利用 -C (大寫字母) 這個參數來控制路徑的保留層次,像前面第二個例子加了 -C /usr/local ,tar 會先切換至 /usr/local 目錄才備份 etc,所以在 local.etc.2.tgz 中 /usr/local/etc/rc.d 變成 etc/rc.d 儲存起來。
1-2 查看 tar 打包的檔案要查看以 tar 打包的檔案只要利用 -t 這個動作參數即可。 例如:
上例會將 /home/backup/etc.tar 中的檔案清單顯示出來。 如果備份時有用 gzip 壓縮過則可以加上 -z :
如果備份時用 bzip 壓縮過則加上 -y 或是 -j:
1-3 解開 tar 打包的檔案要解開 tar 封裝的檔案是利用 -x 這個動作參數,再搭配 -z , -y (-j) 解壓縮。如果想保留原來的權限設定則要記得使用 -p,至於要不要使用 -C (大寫字母) 則要看當初在打包時有沒有使用及自己想要放置的路徑而定,最容易犯的毛病大多是解錯路徑,所以在使用 -x 解開時一定要記得先用 -t 查看一下當初是怎麼打包的,最保險的方法是先解到一個暫存的地方,再將需要的檔案複製/搬移到目的地。 將 /home/backup/etc.tgz 中的東西在目前所在的目錄解開:
將 /home/backup/etc.tgz 中的東西在 /home 中解開:
將 /home/backup/etc.tgz 中的東西在 /home 中解開,並保留原始的權限:
1-4 只解開 tar 打包的部份檔案只解出 /home/backup/etc.tgz 中的 etc/group , etc/master.passwd 兩個檔案:
將 /home/backup/etc.tgz 中凡是叫 etc/rc* 通通解開,其它的不要:
將 /home/backup/etc.tgz 中的檔案解開,但是 rc.d 目錄中的東西不要:
以上提到的方法也可以應用在打包時 (-c) 及查看清單時 (-t) 。
1-5 利用 tar 直接複製整個目錄到另一個目錄中利用 tar 和 pipe 的技巧,可以做整個目錄直接複製,不過這個方法並不保證完整哦,畢竟它的方式不若 dump + restore 完備。 假設我想把 /usr 中所有的東西複製到 /mnt/usr 中,就執行底下的指令:
2 dump 及 restore前面提過的 tar 可以針對目錄或檔案來備份,而 dump 則是以 block 為處理單位,針對整個檔案系統(分割區)來備份,可以更完整的保持系統的原貌不會有所缺漏,以 dump 備份的資料可以用 restore 再還原回來。 2-1 以 dump 將整個 partition 備份至一個檔案使用過 Norton ghost 的人應該知道裡面有個選項是將 MS Windows 或 Linux 系統的某個分割備份到映像檔中,下面則是利用 dump 做類似的動作,將某個分割區備份至一個檔案。 假設 /home 是一個單獨的分割區 (/dev/ad0s1h),而 /backup 是一個空間夠大的目錄,我們可以執行:
上面的例子以 level 0 將 /home 所在的分割區備份至 /backup/home.dump 中。 參數說明:
2-2 以 restore 還原檔案以 dump 備份的分割區我們可以用 restore 將檔案還原出來,就像利用 ghost 把映像檔再寫入 partition 一樣,不過 restore 也可以只解出部份檔案。不過在使用 restore 要注意的是,restore 並不會幫我們將 partition 做格式式,而且,它是將內容解在目前所在的目錄,所以要記得先做好格式化並切換到要還原的目錄。 例如想把 /home dump 完的備份 ( /backup/home.dump ) 還原到 /mnt/new (/dev/ad1s1e) 這個 partition 中,如果 /dev/ad1s1e 已經格式化好,而且已經 mount 到 /mnt/new ,就可以執行以下指令:
完成後,/mnt/new 就可以看到原來 /home 的中的資料。 如果只想還原備份中的部份檔案怎麼辦呢? restore 提供 -i 的參數來進行交談式的還原,我們可以利用這個方法來指定要還原的部份,例如,只想由 /home 的備份檔 home.dump 中還原 /home/gsyan , /home/students 的資料,我們可以執行:
出現 restore > 的提示符號後,我們就可以下指令,例如:輸入問號 (?) 即可列出可用的指令,
為了達到範例的目標,我們要用 add 來新增要還原的檔案清單,用 extract 執行還原,下面是還原出 /home/gsyan 及 /home/studens 至目前分割區的步驟,黑體字的部份是自行輸入的部份:
要結束只要輸入 quit 按 Enter 鍵即可跳出 restore 。 2-3 以 dump 及 restore 做 partition 對 partition 的對拷將分割區 dump 給標準輸出,再讓 restore 由標準輸入還原在新的 partition 就能達到 partition 對 partition 對拷的目的,底下是進行對拷的流程:
※ 1-2 的步驟可以執行 /stand/sysinstall ,然後選取 Configure 利用裡面的 Fdisk 和 Label 進行分割及格式化 例如:想要將 /home (/dev/ad0s1h) 上的所有資料備份到新硬碟上的 partition (/dev/ad2s1h),執行:
特別注意 dump 及 restore 並沒有指定檔名,而都用了一個減號 ( - ),對 dump 來說,是將 partition 的資料一個 block 一個 block 的送向標準輸出,而 restore 則是由標準輸入讀入並還原。 2-4 以 dump & restore 備份整顆硬碟如果想將整顆硬碟的資料拷至另一顆新硬碟,以最笨的方法就是先用 /stand/sysinstall 將新硬碟切割好,再利用 dump & restore 把各 partitions 一一對拷即可,程序如下:
2-5 dump + ssh 進行異地備份dump 和 restore 其實有相對應的 rdump 和 rrestore 可進行遠端的備份及還原,不過 r 系統的指令的安全性較需考量,我們可以利用 ssh 來進行較安全的連線。 假設現在想把名為 mail 上掛在 /home 的這個 partition 異地備份至名為 bkserver 主機上的 /backup 目錄 ,我們可以進行以下程序來備份。
準備工作中比較麻煩的部份應該遠端登入用的金鑰,製作流程如下: 2-5-1 連線測試我們先在 mail 上以 root 的身份登入 mail,然後遠端登入 bkserver (假設在 bkserver 上已經建好 bk 這個帳號)
如果是第一次連線,應該會出現下面的問題詢問是否儲存遠端主機的識別資料,類似下面:
輸入 yes 即可,ssh 會將資料存入 ~/.ssh/know_hosts ,下次就不會有同樣的問題。 接著輸入 bk 的登入密碼,如果成功登入就完成連線測試,輸入 exit 登出,準備進行登入用金鑰的製作。 2-5-2 製作金鑰我們希望在進行遠端備份能夠不用輸入密碼自動登入遠端主機執行備份儲存的工作,所以要先在 mail 上用 ssh-keygen 來產生 ssh 登入用的金鑰對。 先確認已經在本機 ( mail ) 上用執行 dump 指令的 root 帳號登入哦!然後由 root 執行:
接著應該會出現以下的對話:
如果希望登入時不用輸入密碼直接登入,只要通通按 Enter 回所有問題即可。 執行完會在 /root/.ssh 中產生 id_dsa 和 id_dsa.pub ,後面那個就是我們要放在 bkserver 裡 bk 帳號下的金鑰。 接著我們要把 /root/.ssh/id_dsa.pub 複製到遠端主機 (bkserver) 裡備份專用帳號 (bk) 個人目錄的.ssh/authorized_keys 中。 如果 bkserver 的 ~bk/.ssh/authorized_keys 不存在,我們直接把前面在 mail 上 root 帳號產生的 id_dsa.pub 上傳過去即可,在 mail 上以 root 執行:
不過要記得先幫 bk 建好 .ssh 的目錄哦!不然會發生錯誤。 如果 authorized_keys 早已存在,我們可以先將 id_dsa.pub 傳到 bkserver 上,然後再將 id_dsa.pub 中的內容貼到 ~bk/.ssh/authorized_keys 新的一行。 如果前面的步驟完成了,我們在 mail 以 root 執行 ssh bk@bkserver 應該就可以不用輸入密碼遠端登入囉! 2-5-3 遠端備份做好前面的準備工作後,我們就可以在 mail 上將某個 partition 備份到位於遠端的 bkserver 上了。 例如:
上面的例子在 mail 上執行,將掛在 mail /home 的 partition 備份起來,並以 bk 帳號遠端登入 bkserver 儲存在 bkserver 的 /backup/mail.home.dump 裡。 如果想省一些空間則可以順便用 gzip 壓縮後再傳給 bkserver,指令改為:
北市文山區力行國小顏國雄 |