歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> Linux系統備份與恢復

Linux系統備份與恢復

日期:2017/3/6 9:15:58   编辑:學習Linux

Linux系統備份與恢復


Linux系統備份與恢復


序言:前面一篇文章簡單地介紹了Linux系統備份與恢復的相關概念,這裡接著上一篇介紹兩個常用的備份與恢復命令。

1 常見的備份命令

在介紹下面的備份恢復命令之前先簡單的說明一下:

如果我們只是要實現完全備份,那我們可以直接使用tar命令,將需要備份的重要數據進行打包壓縮,然後使用cp命令進行復制來實現備份。再寫一個備份腳本,通過定時任務在指定的時間來運行這個腳本就可以實現完全備份。

但是如果是要想實現增量備份,用自己去寫備份腳本的方式來做的話就會非常地麻煩,因為需要判斷哪些是備份的新文件等等一些繁瑣的操作。

為了更加便捷地使用增量備份,Linux系統提供了非常方便的備份恢復工具。下面就介紹兩個比較常用的備份恢復命令dump和restore。

1.1 備份命令:dump命令

注意:dump命令在有些centos系統中默認是沒有安裝的,需要手動進行安裝。那麼我們可以通過如下命令事先查詢一下系統是否已經安裝dump命令。

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#rpm-qa|grepdump

操作結果如圖1所示:

圖1 查看系統是否已經安裝dump命令

如圖1所示,在查詢結果中,我們只看到有一個tcpdump命令。這個是Linux系統的抓包命令,不是dump命令。所以這裡顯示的是系統並沒有安裝dump命令,需要我們手動進行安裝。此時,如果確定系統的yum源可以使用的話,只需要執行以下命令,系統就會自動將dump命令默認安裝。

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#yum-yinstalldump

操作結果如圖2所示:

圖2 安裝dump命令

安裝完dump命令之後,再來看一下dump命令的基本命令格式:

[root@localhost~]# dump [選項] 備份之後的文件名 原文件或目錄

選項說明:

-level:備份級別。(一共十個備份級別,具體格式為“-0”~“-9”:“-”和具體的級別數字之間沒有空格。其中0就是完全備份;1就是第一次增量備份;2就是第二次增量備份。。。最多支持9次增量備份。)

-f 文件名:手工指定備份之後的文件名。

-u:備份成功之後,把備份時間記錄在/etc/dumpdates文件中。

-v:顯示備份過程中國更多的輸出信息。

-j:調用bzlib庫壓縮備份文件,其實就是把備份文件壓縮為.bz2格式。

-W:顯示允許被dump的分區的備份等級及備份時間。

我們先來看一下備份分區,首先,可以通過如下命令查看系統分區:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#df-h

操作結果如圖3所示:

圖3 查看系統分區

在這裡呢,因為boot的分區容量最小,備份起來更節省時間,所以就用boot分區來做一個備份的演示。但是在實際的工作當中,一般情況下,boot分區是不需要備份的,因為每一個安裝的Linux系統,只要版本是一致的,它的boot分區裡的內容就都是一樣的。這裡僅僅只是為了方便演示dump命令,節省備份演示時間,而選用boot分區進行備份。

示例:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#dump-0uj-f/root/boot.bak.bz2/boot/

說明:備份命令。先執行一次完全備份,並壓縮和更新備份時間

操作結果如圖4所示:

圖4 完全備份分區

注意:壓縮文件的時候一定要標明壓縮格式(即標明壓縮文件名稱後面的諸如“.bz2”的信息),避免事後需要手工解壓縮的時候因為不清楚壓縮格式而造成解壓過程的繁瑣。

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#cat/etc/dumpdates

說明:查看備份時間文件,了解文件是在什麼時間進行備份的,也就是每次執行dump操作的具體時間。

操作結果如圖5所示:

圖5 查看備份時間文件

注意:上述進行的是一個完全備份,那麼要進行增量備份的話,就需要先向原文件中增加新的數據。首先,我們通過如下命令來查看一下備份文件的大小

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#ll-h
說明:查看備份文件的詳細信息

操作結果如圖6所示:

圖6 查看完全備份分區文件的詳細信息

可以看到,完全備份後的壓縮文件大小為30M,現在我們再來給原文件添加一個新的文件,比如說添加上面顯示的安裝日志文件install.log。通過如下所示命令,將28K的系統安裝日志文件install.log復制到/boot分區中:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#cpinstall.log/boot/

說明:復制日志文件到/boot分區

當然,對於啟動分區boot來說,不建議向其中存放過多的內容,避免造成該分區的內存占用過大,導致系統無法啟動。

此處只是為了演示的方便,演示操作完成之後會將添加進去的文件刪除的。

數據新增完成之後,我們再來看看1級別的增量備份操作:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#dump-1uj-f/root/boot.bak1.bz2/boot/

說明:增量備份/boot分區,並壓縮。

操作結果如圖7所示:

圖7 1級別增量備份分區

備份完成之後再來查看一下文件詳情:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#ll-h

操作結果如圖8所示:

圖8 查看1級別備份分區詳情

可以看到,1級別備份文件boot.bak1.bz2的大小只有19K,並不包含之前的30M的完全備份的數據內容。同樣的。再來查看一下備份時間文件

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#cat/etc/dumpdates

操作結果如圖9所示:

圖9 查看備份時間文件信息

如圖9所示,可以看到很明顯的備份級別區分。

此時,如果你需要隔一段時間就進行一次增量備份,就可以寫一個腳本,通過定時任務來實現上述的備份操作。

最後再來看看選項“W”的功能:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#dump-W

說明:查詢整個分區的備份時間及備份級別的詳細信息

操作結果如圖10所示:

圖10 查詢整個分區的備份時間及備份級別的詳細信息

可以看到,根分區和home分區顯示的是從來沒有備份過,而boot分區則顯示的是最後一次進行備份的備份級別和備份時間。

以上就是使用dump命令來備份分區的基本操作。接下來需要了解的是如果想要備份文件或者目錄,我們應該要怎麼操作:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#dump-0j-f/root/etc.dump.bz2/etc/

說明:完全備份/etc/目錄。

操作結果如圖11所示:

圖11 備份目錄

注意:如果是備份目錄,則只能使用0級別進行完全備份,而不再支持增量備份。也就是說,dump只有在備份分區的時候才可以執行增量備份,否則如圖12所示,系統將會報錯:

圖12 1級別增量備份目錄報錯

1.2 恢復命令:restore命令

[root@localhost~]# restore [模式選項] [選項]

模式選項說明:restore命令常用的模式有以下四種,且在使用的時候這四個模式只能擇其一,不能混用。

-C:比較備份數據和實際數據的變化。

-i:進入交互模式,手工選擇需要恢復的文件。

-t:查看模式,用於查看備份文件中擁有哪些數據。

-r:還原模式,用於數據還原。

選項說明:

-f:指定備份文件的文件名

示例:

(1)比較備份數據和實際數據的變化

首先需要模擬一下原數據毀損或丟失的場景,例如破壞boot分區中的數據或文件。先通過如下命令查看一下boot分區中有哪些文件:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#ll/boot

操作結果如圖13所示:

圖13 查看boot分區中的文件

然後通過如下命令來模擬破壞其中的某些文件,例如鏡像文件vmlinuz-2.6.32-642.el6.x86_64:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#mv/boot/vmlinuz-2.6.32-642.el6.x86_64/boot/vmlinuz-2.6.32-642.el6.x86_64.bak

說明:把/boot目錄中的內核鏡像文件改個名字。

注意:在做演示的時候一定要記得演示完成之後要記得將該文件名再更改過來,否則會造成系統關機以後無法啟動。

再來演示一下“-C”模式能否比較出現有文件與備份文件之間存在不同(即是否能夠發現現有文件發生了變化)。

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#restore-C-f/root/boot.bak.bz2

操作結果如圖14所示:

圖14 -C模式功能演示

可以看到,系統提示我在前面修改過的鏡像文件找不到了,存在一個比較錯誤。這就是“-C”模式的功能。

這個時候,我們可以通過備份恢復來將boot分區恢復,也可以直接像剛才那樣再把文件名稱修改過來。在這裡,我先直接把文件名修改過來,避免後面忘了恢復導致系統關機後無法啟動了,等演示完了所有模式之後再來演示恢復功能,

同樣的,我們也可以順便看看文件名修改正確以後再次使用“-C”進行比較會是個什麼效果:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#mv/boot/vmlinuz-2.6.32-642.el6.x86_64.bak/boot/vmlinuz-2.6.32-642.el6.x86_64
  2. [root@localhost~]#restore-C-f/root/boot.bak.bz2

操作結果如圖15所示:

圖15 -C模式功能演示2

可以看到,現在系統不會再提示有比較錯誤了。

(2)查看模式

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#restore-t-fboot.bak.bz2

操作結果如圖16所示:

圖16 查看備份文件中擁有哪些數據信息

(3)還原模式

下面先演示一下怎麼還原boot.bak.bz2分區備份:

首先通過如下命令創建一個目錄,然後進入該目錄中進行恢復操作,避免恢復的過程中文件解壓的到處都是。

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost~]#mkdirbootbak
  2. [root@localhost~]#cdbootbak/

先還原完全備份的數據:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhostbootbak]#restore-r-f/root/boot.bak.bz2

說明:恢復的同時會進行解壓縮。

操作結果如圖17所示:

圖17 恢復完全備份數據

可以看到,/boot分區的數據文件全部解壓到當前目錄下了。再恢復增量備份數據:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhostbootbak]#restore-r-f/root/boot.bak1.bz2

操作結果如圖18所示:

圖18 恢復增量備份數據

可以看到,拷貝到/boot分區的系統日志文件也被解壓到當前目錄下了。

再來看看怎麼還原目錄備份,例如現在要還原前面備份的/etc/目錄的備份etc.dump.bz2。為了簡單一點,我們就在剛剛恢復備份分區時創建的目錄中恢復/etc/目錄的備份:

首先把該文件中剛剛恢復的分區備份數據都刪掉,再來恢復我們的目錄備份:

[html]view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. [root@localhostbootbak]#rm-rf*
  2. [root@localhostbootbak]#restore-r-f/root/etc.dump.bz2

操作結果如圖19所示:

圖19 恢復目錄備份

最後,要記得把前面進行演示的時候拷貝到boot分區中的系統日志文件刪除。但是,切記,一定不要刪錯了文件,誤刪了boot分區的原有的文件!

http://xxxxxx/Linuxjc/1155955.html TechArticle

Copyright © Linux教程網 All Rights Reserved