Linux下用dump實現備份和還原 ux下用dump實現備份和還原


對於系統而言,我們可以有很多種辦法去備份(還原)系統或文件,之所以要去做備份,就是為了在系統或文件遭到損害時,能及時恢復,把損失減小到最小。當然,對於企業服務器而言,備份的重要性是舉足輕重。咱們今天就詳細討論一下LINUX中如何用dump和restore實現備份和還原。

一,dump的原理,優點及限制

dump和restore默認已經安裝在RHEL5中,如果你使用的Linux中沒有,可以自己去google中搜一下並下載安裝。

使用dump命令時,它會建立一份自上次備份操作以來進行修改過的文件列表,然后把這些文件打包成一個單獨的文件。在做備份時,需要指定一個備份級別,它是0-9之間的一個整數。級別為N的轉儲會對從上次進行的級別小於N的轉儲操作以來修改過的所有文件進行備份,而級別0就是完全備份。通過這種方式,可以很輕松的實現增量備份,差異備份,甚至每日備份。例如,第一次備份時可選擇級別0(具體操作看后面),以后每天做增量備份時就可以每天依次使用級別1,級別2,級別3等等… …;當需要每天做差異備份時,可先選擇級別0做完整備份,然后每天都使用同一大於0的級別就行了,比如說第二天用5,第三天也用5,第四天也一樣。

使用dump的優點:

1,備份可以跨多卷磁帶

2,能備份任何類型的文件,甚至是設備

3,備份時,文件的權限,宿主,宿組,修改時間等都會被保存

4,能夠正確處理從未包含任何數據的文件塊(孔洞文件)

5,能夠做增量,差異備份

它也有不足:

1,每個文件系統必須單獨轉儲備份

2,只有本地計算機的文件系統才能夠轉儲備份(rdump,rrestore可用來彌補此項不足)

當然,使用tar也可以用來實現備份和還原,但tar只能在Linux或Unix環境下使用,對於跨平台的環境,dump使用起來個人感覺更方便一些。

如果有條件,dump也可以將備份存儲在磁帶上。Linux通常用/dev/st0代表倒帶設備,而用/dev/nst0代表非倒帶設備,使用倒帶設備存儲時,當磁帶用完它會自動倒帶並接着存儲,所以會覆蓋以前的數據,這樣就存在以前數據丟失的風險。這個地方咱們就不詳細討論了。

二,dump的格式,常用參數及使用

格式:dump [-level#] [-acmMnqSuv] [-A file] [-B records] [-b blocksize]

[-d density] [-D file] [-e inode#,inode#,...] [-E file]

[-f file] [-h level] [-I nr errors] [-j zlevel] [-Q file]

[-s feet] [-T date] [-y] [-z zlevel] filesystem

常用參數 Level:備份級別0-9

-B:指定用來備份的磁帶的長度,以KB為單位(有些磁帶不支持以結束標志判斷時,就需要使用到此參數

-b:指定塊大小,默認為10

-d:指定密度,默認為1600BPI

-D:設定存儲數據庫的名稱和路徑,默認是/etc/dumpdates文件

(-e,-E:與備份文件的inodes數有關的參數)

-f:指定備份文件的路徑和名稱

-u:更新數據庫文件/etc/dumpdates

-s:統計備份所需的空間,一般在備份前做,以防磁帶或磁盤空間不足

舉例:

dump –0s /dev/sda1

完整備份/dev/sda1前統計一下需多大容量

dump -0u –f /tmp/boot.dump /boot

 

Linux下用dump實現備份和還原 - zhuzhu - 津津計較

  

以完全備份的方式備份/boot分區到文件/tmp/boot.dump,並且更新/etc/dumpdates數據庫文件。“0”代表的就是備份級別為完全備份。“u”更新數據庫,會將文件的日期,存儲級別,文件系統等信息都記錄下來。如果從來都不使用-u參數,那么所有的存儲都會變為級別0。因為,系統不會有先前備份過當前文件系統的記錄。

當以后更改了/boot,比如說內核升級后,如果再想備份,可以按下列方式:

dump -1u –f /tmp/boot1.dump /boot

這樣就只會備份完全備份后有變化的文件(級別1大於0)。

如果以后想做增量備份,就依次用級別2,3,4… …

如果想做差異備份,以后就一直用級別1.關於增量備份和差異備份的區別看看下圖吧,不詳細講了:

 

Linux下用dump實現備份和還原 - zhuzhu - 津津計較

  

 

Linux下用dump實現備份和還原 - zhuzhu - 津津計較

  

三,查看備份文檔中的文件及還原

查看備份文檔中的文件和還原就需要用到另外一個工具,restore。

1, 查看備份文檔中的文件

 

Linux下用dump實現備份和還原 - zhuzhu - 津津計較

  

Linux下用dump實現備份和還原 - zhuzhu - 津津計較

 

-t參數是查看的意思,-f是指定要查看的備份文件。通過以上命令,就可以查看備份文件中備份了哪些文件。

1, 還原備份

還原備份的時候有兩種方式可以選擇,一種是完全還原,一種是有選擇的部分還原。

咱們還是用前面的例子來看,如果你前面備份的/boot分區文件損壞了,這時候你想還原,可以按如下步驟:

 

Linux下用dump實現備份和還原 - zhuzhu - 津津計較

  

-r參數表示重建

如果只是一部分數據丟失了,那么可以使用參數-i通過交互方式來實現文件的選擇性還原

 

Linux下用dump實現備份和還原 - zhuzhu - 津津計較

  

這個地方我故意刪掉了一個文件initrd-2.6.18-53.el5.img

 

Linux下用dump實現備份和還原 - zhuzhu - 津津計較

  

使用參數-i交互式,並指定備份文件。

通過?來查看可以使用的命令,ls是列出備份文件的內容

 

Linux下用dump實現備份和還原 - zhuzhu - 津津計較

  

通過add來選擇要恢復的文件,選定后再ls的時候會標記為*

通過extract還原選定的文件。

提示“Specify next volume”時填如1,它表示是在單獨一卷磁帶(這里我用的是磁盤的空間)上進行的備份。下面一行提示選“n”,表示不是恢復整個文件系統,而是單個文件。

關於在linux系統進行增量備份的例子

1. dump/restore 進行增量備份 注意,這種方法只能進行整個分區備份

# mount /dev/sdb1 /mnt/sdb   新建一個硬盤將其掛載到/mnt/sdb
 # ls /mnt/sdb
123  456  aaa.zip  f1 
里面有4個文件 f1為目錄

現在可以備份原始鏡像

#dump -0u /dev/sdb1 -f /backup/sdb1_0u_110210.dump
  DUMP: Date of this level 0 dump: Thu Feb 10 23:21:40 2011
  DUMP: Dumping /dev/sdb1 (/mnt/sdb) to /backup/sdb_0u_110210.dump
  DUMP: Label: none
.....中間省略
  DUMP: Average transfer rate: 5687 kB/s
  DUMP: DUMP IS DONE
備份完成

dump -0u  :    0代表鏡像備份(完整備份)        1-9 分別代表在前一個級別基礎上的增量備份

下面進行增量備份:
首先 將123那個文件刪除,新增一個文件kkk 並輸入hello man!

[root@mysql1 sdb]# ls
456  aaa.zip  f1  kkk 
開始增量備份:
[root@mysql1 sdb]# dump -1u /dev/sdb1  -f /backup/sdb1_1u_110210.dump
  DUMP: Average transfer rate: 0 kB/s
  DUMP: DUMP IS DONE
現在/backup下有兩個備份了。

[root@mysql1 sdb]# ls /backup
sdb1_0u_110210.dump  sdb1_1u_110210.dump

為了更好了解我們在增加一個備份,備份之前我們再改變以下分區里面的文件
修改 456 內容為456 modifiy    刪除aaa.zip
[root@mysql1 sdb]# ls
456  f1  kkk

備份第二個增量,這里用3u 只要比前面大就可以了,建議備份都用2u 4u 6u 這樣備份,不然你所有數字都用上,123456 如果想重新再2u的基礎上再備份就不行了,因為3已經用了,你只能在6后面備份
[root@mysql1 sdb]# dump -3u /dev/sdb1  -f /backup/sdb1_3u_110210.dump

備份完畢 就刪除里面的所有記錄
然后現在開始恢復
[root@mysql1 sdb]# restore -r -f /backup/sdb1_0u_110210.dump   先恢復0u
[root@mysql1 sdb]# ls
123  456  aaa.zip  f1  restoresymtable
這時候把第一備份都還原出來了,然后一個一個還原
# restore -r -f /backup/sdb1_1u_110210.dump
# restore -r -f /backup/sdb1_3u_110210.dump
# ls
456  f1  kkk  restoresymtable
和最后一次備份一樣了

查看備份鏡像里面的內容
# restore -t -f /backup/sdb1_1u_110210.dump
Dump   date: Thu Feb 10 23:28:38 2011
Dumped from: Thu Feb 10 23:21:40 2011
Level 1 dump of /mnt/sdb on mysql1.dog.com:/dev/sdb1
Label: none
         2      .
        16      ./kkk

提取鏡像里的文件
[root@mysql1 sdb]# restore -if /backup/sdb1_3u_110210.dump
restore > ls
.:
3                f1/              lost+found/      restoresymtable
456              kkk              newfile

restore > add kkk
restore > extract
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
set owner/mode for '.'? [yn] n
restore > quit

關於定期備份的方案:
先做一個完整的備份 
#dump -0u /dev/sdb1 -f /backup/sdb1_0u_110210.dump
周一:#dump -2u /dev/sdb1 -f /backup/sdb1_1u_110210.dump
周二:
#dump -2u /dev/sdb1 -f /backup/sdb1_2u_110210.dump
周三:#dump -2u /dev/sdb1 -f /backup/sdb1_3u_110210.dump
。。。。。

--------------------------------------------------------------------------------------------------------------------
下面這方法比較靈活,直接用tar備份

 # cd /test/t1
# ls
aaa.zip  file1  file2  file3
有三個文件
首先執行完整備份
# tar -g snapshot -zcf backupp_full.tar.gz /test/t1
然后修改文件,增加一個文件
進行增量備份:
# tar -g snapshot -zcf backupp_incremental_1.tar.gz /test/t1
修改
再次增量備份
# tar -g snapshot -zcf backupp_incremental_2.tar.gz /test/t1

還原
tar zxf backup_full.tar.gz -C /
tar zxf backup_incremental_1.tar.gz -C /
tar zxf backup_incremental_2.tar.gz -C /
注意,修改的文件以后面增量備份為准,刪除的文件這個種備份方法是不會跟着刪除的,恢復的時候之前刪除的文件也會恢復

另一種tar 備份 用-u參數進行增量備份,同樣刪除的文件不會同步

備份資料
tar zcf backup.tar  /test/t1

查看 內容
tar ztf backup.tar
file1 file2 file3

在/test/t1下新增一個文件

增量備份
tar uf backup.tar  /test/t1

還原備份其實就是直接解壓
tar zxf backup.tar

 如果你需要壓縮增量備份的時候需要先將原來那個解壓然后再備份在壓縮 (-u 參數不會自動壓縮)
gunzip backup.tar.gz
tar uf backup.tar test
gzip backup.tar

 

1、dump 命令可以用來備份 ext2 和 ext3 格式的文件系統,也就是可以備份整個分區。
簡要參數說明:
level# 通常在用dump 命令備份時,會加上 -0~-9的參數,“-0”完全備份 ,“-1~-9”增量備份(只備份上次備份后被變更的文件,只備份比當前備份數字小的數字);
如下果,備份順序為 “0、1、2”


但通常不會使用上面的方式進行備份,而是使用“0、2、1”的順序進行備份;


-f : 可以用來指定備份的文件儲存的位置;例:dump –f /dev/st0 備份到磁帶中;
-u : 每次執行完 dump 命令時,都會將備份的級別號記錄到/etc/dumpdates文件中,這個參數就是將每次執行 dump 命令時,將對應的 dump 級別號更新到 /etc/dumpdates文件中;
例:
(1) dump –0 –u –f ~/backup  /dev/sda1   備份 sda1 分區到家目錄中 backup 文件中,同時更新 /etc/dumpdates 將當前備份的級別號記錄到這個文件中;
十四、使用cpio命令備份還原文件
1、cpio 命令可以解壓縮一個打包文件或將文件復制到一個已打包好的文件中去。
常用參說明說(可使用 man cpio 命令查看詳細說明):
· –d  可以用來建立一個目錄;
· –i   解壓縮;
· –o  將文件進行打包;
· –t  列出打包文件中的內容;
注:在cpio解壓縮文件時,必須解壓縮到沒有原始文件的目錄中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM