Linux 學習筆記(九)備份

1 用 dump 建立增量備份機制

dumprestore 都是用來創建備份以及從備份恢復的最常用的方法。這兩個程序已經存在很長時間了,在大多數站點中,dumprestore 都是支撐自動備份軟件使用的命令。但這裏有些情況是要說明下的,實際上,在 Linux 環境下,沒有說非要選擇 dump 來做備份的理由,遺憾的是,大多數主流 UNIX 發行版本所附帶的 tar 版本缺乏 GNU 的 tar 所具備的許多功能。如果您必須對 UNIX 和 Linux 都提供備份支持,那麼 dump 是最好的選擇。它是唯一能夠在不同平臺上(相當)一致地處理好這些問題的命令,這樣一來,您只要是一條命令的專家就夠了,不必熟悉兩條命令。如果您很幸運,處在一個純 Linux 環境裏,那麼就可以選用自己最喜歡的工具啦,dump 的功能不足,而 tar 就好用多了!

根據所選擇的發行版本的不同,您可能不得不在 Linux 系統上明確安裝 dumprestore 命令。默認情況下,Ubuntu 系統是沒有安裝 dump 的,所以您需要使用命令:

$ sudo apt-get install dump

來進行安裝。

2 轉儲文件系統

dump 命令的第一個參數必須是增量轉儲級別(0~9),dump 使用 /etc/dumpdates (Ubuntu 系統 /var/lib/dumpdates ) 文件來決定增量轉儲必須倒回去多遠。-u 標誌可以使 dump 命令在轉儲完成之後自動更新 /etc/dumpdates 文件,將日期、轉儲級別和文件系統的名稱都記錄下來。如果您從來沒有使用過 -u 標誌,那麼所有轉儲都會變爲級別 0,因爲那樣的話,將不會有先前備份過當前文件系統的記錄。

dump 命令會把它的輸出發送到某個默認設備上,通常情況下是主磁帶機。如果想使用不同的設備,可以使用 -f 標誌來通知 dump 將其輸出發送到別處。-f 所使用的可以是設備文件例如 /dev/st0 (磁帶機),/dev/rsd1c (軟盤驅動器),/dev/sda1 (硬盤驅動器),普通文件(可以使用 touch file 來創建)或者是 - (標準輸出)。當需要轉儲數據到一個遠程系統時,必須把遠程磁帶驅動器指定爲 host:file 或者 user@host:file 的形式,例如:

$ sudo dump -0u -f username@hostname:/dev/sdb1 /boot

訪問遠程磁帶機的權限由 ssh 通道控制。

下面我們來看一些具體的備份策略:

$ touch /tmp/dump.file
$ sudo dump -0 -f /tmp/dump.file ~angel/music

通知 dump 將 angel 用戶的 music 目錄備份到 /tmp/dump.file 文件中。當備份的並非是整個文件系統時,dump 限定了備份的選項:-u 選項是不可用的,並且只支持 0 級轉儲級別。如上面的命令選項所示。

$ sudo dump -1u -f /dev/nst0 /boot

這裏的 /boot 假定的是一個單獨的文件系統,並非僅僅只是一個文件目錄,因此可以使用 -u 選項並支持任意的增量轉儲級別。所用的是非倒帶設備,Linux 通常用 /dev/st0 代表倒帶設備,而用 /dev/nst0 代表非倒帶設備。如果是使用 dump 來做備份操作的話,都應該使用非倒帶設備 /dev/nst0,如果您不小心選擇了自動倒帶設備,那麼最終只能保存最後轉儲的那個文件系統。因爲 dump 命令並不知道磁帶定位在哪裏,這個失誤當時並不會造成出錯,這種情況只有在試圖恢復文件的時候纔會顯現出來。

正常情況下,當磁帶驅動器到達末尾時 dump 會自動倒帶並彈出當前磁帶,然後要求換入一卷新磁帶。

$ sudo dump -5u -f /dev/sda1 /usr

以上這條命令順利執行的條件要求:

  • /usr 是一個獨立的文件系統
  • /dev/sda1 的空間要比 /usr 大,能夠完全裝入 /usr 文件系統。

3 用 restore 從轉儲中恢復

restore -i 從磁帶中讀取備份目錄,然後讓您通過使用 lscdpwd 這樣的命令像一個普通的目錄樹那樣遍歷轉儲目錄。使用 add 命令來標記那些需要恢復的文件。選好後,鍵入 extract 命令將文件從磁帶中提取出來。

例如,用戶 angel 不小心刪除了 music 目錄下他最心愛的 lonly.mp3 這首歌曲,需要從 /tmp/dump.file 備份中取回這曲歌曲,這時候系統管理員要做的就是:

$ sudo mkdir /var/restore
$ cd /var/restore
$ restore -i -f /tmp/dump.file
restore> ls
.:
music/
restore> cd music
restore> ls
a.mp3 b.mp3 lonly.mp3
restore> add lonly.mp3         使用 add 命令標記需要恢復的文件
restore> ls
a.mp3 b.mp3 *lonly.mp3         lonly.mp3 前面的星號表示標記 
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
oset owner/mode for '.'? [yn] n

卷(磁帶)是從 1 而不是從 0 開始記數的,所以對於在單獨一卷磁帶上進行的轉儲而言,可以指定 1。當 restore 命令詢問是否需要爲“.”設置屬主和模式時,它是在詢問是否應該設置當前目錄去匹配磁帶的根。除非您是在恢復整個文件系統,否則可能不需要這麼做。

restore 完成之後,在 /var/restore 目錄下就會有相應的文件夾出現,這時只要將裏面的歌曲拷貝到 angel 的 music 目錄下並設置屬主和屬組既可。

4 使用其他存檔程序

dump 命令不是用於把文件存檔到磁帶、磁盤中的唯一程序,不過通常情況下,它是備份整個系統的最有效的方法。tar, cpiodd 命令都能夠把文件從一個介質轉移到另外一個介質中去。

4.1 tar: 給文件打包

tar 命令讀取多個文件或者目錄,並把它們打包成一個文件,通常情況下是一個磁帶文件。可以直接使用 -cf 選項創建一個存檔文件:

$ tar -cf file.tar fromdir

也可以在創建存檔文件時加上壓縮選項,我們很多時候都是這麼幹的,可以使用 -z (gzip), -j (bzip2) 或者 -J (xz) 等壓縮算法,其中 xz 是目前最高效的壓縮算法,壓縮後的存檔文件比 gzip 和 bzip2 壓縮後的存檔文件都要小得多。我們可以使用以下任意一條命令來創建壓縮存檔文件:

gzip

$ tar -czvf file.tar.gz fromdir

bzip2

$ tar -cjvf file.tar.bz2 fromdir

xz

$ tar -cJvf file.tar.xz fromdir

默認情況下,tar 命令不會對符號鏈接所指向的真正文件做備份,但可以提示它去這麼做。也可以指定 tar 只包含自給定日期以來修改過的文件,這對於創建您自己的增量備份方案來說很有幫助。具體詳情請參考 tar 手冊頁,瞭解這項功能以及別的好功能。

4.2 cpio: 古老的存檔工具

cpio 在功能上和 tar 相似。它可以追溯到 UNIX 的最初時期,但現在很少使用了。不過所有的系統中都包含它。和 tar 一樣,cpio 命令能夠用於移動目錄樹。如下命令:

$ find fromdir -depth -print | cpio -pdm todir

4.3 dd: 處理位流

dd 是文件複製和轉換程序。除非告訴 dd 命令去進行某種轉換操作,否則它只進行從輸入文件到輸出文件的複製工作。如果用戶給您一卷在某些非 Linux 系統上寫入的磁帶,那麼 dd 命令可能是讀取它的唯一方法。

dd 命令在歷史上的一種應用就是創建一個完整文件系統的副本。但現在更好的選擇是使用 mkfs.ext4 命令創建目標文件系統,然後運行 dump 命令導出給 restore 命令。如果使用不正確的話,dd 命令有時候能夠破壞分區信息。它只能在大小完全相同的兩個分區之間複製文件系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章