如何備份 Linux 系統ㄌㄟ?

今天蔡爸跟 Jerome 分別問了同一個問題:我的 Linux server 要怎麼做 Full backup 啊?這裡就用同樣的環境來示範吧....在HP DL-380 G4 上,安裝 RHEL AS/ES 3 的版本來做範例,其中 RHES3 擔任 RPC server 的角色,RHAS3 則是今天的苦主,要被備份的機器啦...我在這台 DL-380 上是做 HW Raid mirror (/dev/cciss/c0d0 and /dev/cciss/c0d1)喔:

基本上這裡先列出主要幾種可以做方式:
首先,建議先備份一下做好的MBR,在 Linux 下使用下面的命令:
RHAS3# dd if=/dev/cciss/c0d0 of=/root/linux.bin bs=512 count=1

第一種方式:使用 cpio 來備份與還原:
RHAS3# find / -print cpio -covB > /dev/st0 (備份到磁帶機去) RHAS3# cpio -iduv < /dev/st0 (當然就是由磁帶機還原囉)

第二種方式:用 dd 來備份一顆完全一模一樣的硬碟:
RHAS3# dd if=/dev/cciss/c0d0 of=/dev/cciss/c0d2 (這裡假設新插進去要備份的 Target HDD 是 c0d2)

第三種方式是我最常用的:使用 tar 來備份與還原 (請參考最下面的詳細範例)
RHAS3# tar --exclude /proc --exclude /mnt --exclude /tmp -zcvpf RHAS3-bak.tgz /
(把根目錄以下排除 /proc /mnt/ tmp 以外的資料備份到 RHAS3-bak.tgz 去,這個動作會順便把 tar 完的資料作壓縮喔,如果你不要壓縮,那就把 -zcvpf 中的 z 這個 option 拿掉吧)
RHAS3# tar -zxvf host.tgz (當然就是由 RHAS3-bak.tgz 還原囉)

這裡我再細部介紹一下如果把檔案用 tar 備份到遠端的 Backup server 去要怎麼做:
首先在遠端的 Backup server 上把 NFS service 打開,並 share 出一個目錄,嗯,就叫 /Netbackup 好了,直接去 vi /exports 然後加入下面這一行:
RHES3# cat /etc/exports
/tmp/Netbackup 202.39.112.0/24(rw,sync) 202.39.120.0/24(rw,sync)
然後 Reload 一下 share 的目錄吧...
RHES3# exportfs -arv

接著我們到 Client server 端,也就是要備份的機器上啦,先建一個目錄就叫 /backup 好了,然後把 NFS server share 出來的 /Netbackup 給 mount 過來吧...
RHAS3# mount -t nfs RHES3:/Netbackup /backup

然後就是備份囉...
RHAS3# tar --exclude /proc --exclude /mnt --exclude /tmp --exclude /lost+found --exclude /backup -zcvpf /backup/RHAS3-20080424.tgz /
以我這台 RedHat EL AS3 全裝所有 package 大概 6G的容量,tar 一次大概要花 15 分鐘,tar 完的檔案,大概 1.8G 左右。

如果要從 Backup server restore 回來的話,一樣先把 /Netbackup mount 到 /backup 然後:
RHAS3# tar -zxf /backup/RHAS3-20080424.tgz

另外,如果你的 Linux OS 慘到連開機都開不了,那就用 CD 來 restore 吧:
1. Boot from RHEL E(A)S3(4) CD1, type:
>> boot : linux rescue selinux=0
2. sh-2.05b# df -f (先檢查一下目前的 partition 狀態吧)
3. sh-2.05b# cat /mnt/sysimage/etc/fstab (查看一下原來的 /etc/fstab,因為是在 rescue 模式,所以原有的 partition 都會被 mount 到 /mnt/sysimage/ 底下去了)
4. sh-2.05b# chroot /mnt/sysimage (要把現在的 / 目錄改變為從 /mnt/sysimage/ 目錄中開始, 可使用 chroot 命令,這時如果再用 df -h 或 df -k 應該就會看到跟原來一樣的 partition 狀態)
5. sh-2.05b# mkdir -p /backup (如果需要的話,就先建立一個待會兒要用的 mount point 吧)
6. sh-2.05b# mount -t nfs RHES3:/Netbackup /backup
7. sh-2.05b# tar -zxvf /backup/RHAS3-20080424.tgz (基本上以我的容量大概是15分鐘內就可以 restore 好了)
8. sh-2.05b# grub-install /dev/cciss/c0d0 (把 GRUB 的 stage1 bootloader 重新寫入 /dev/cciss/c0d0 的 MBR)
9. sh-2.05b# exit (離開 chroot)
10. sh-2.05b# exit (離開 rescue 模式,系統會被重起)
11. 然後你的掛點的 server 就又可以活跳跳的重新工作啦。

報告完畢,謝謝收看~
1 Response
  1. 匿名 Says:

    那....Solaris 咧?! Solaris 又要怎麼備份?!

    (我承認, 我來亂的.....)