Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Linux系統教程 >> Linux教程 >> Linux環境下的備份

Linux環境下的備份

日期:2017/2/7 9:25:17      編輯:Linux教程

Linux系統管理員常常問的一個問題是:如何備份我的系統?對於windows系統來說,進行備份是很簡單的工作(僅僅需要在菜單模式下點擊鼠標就可以完成)。 Linux備份工作則要麻煩的多,若你不熟悉Linux系統文件和設備,情況則會變得更糟。該篇文章討論了在Linux環境下保護數據的方法和相關的設備信息。

   1、什麼是備份?

  最簡單的講,備份數據的過程就是拷貝重要的數據到其他的介質之上(通常是可移動的),以保證在原始數據丟失的情況下可以恢復數據。一次備份可能是簡單的cp命令,將一個文件復制到其他目錄下,也可能是使用特定的程序將數據流寫進一個特定的設備中的復雜過程。很多情況下是將要備份的數據寫入到磁帶機中,但有些情況也不是這樣的。在Linux環境下,或其他Unix系統,備份可以是將文件拷貝到已存在的文件系統,可替換的文件系統,磁帶機,遠程文件系統,甚至是遠程系統的上的磁帶機。當然,從用戶的角度來看,並不存在磁帶機或ZIP驅動器的概念,而僅僅是文件而已。

   2、應該選擇哪一種備份設備?

  市場上有很多自稱是“完美的系統備份選擇”的設備,包括磁帶機,便攜式磁盤驅動器,甚至有神秘的Internet備份系統。對於備份操作來說,磁帶機提供了最可信的存儲方式。為什麼是磁帶機呢?當然,Iomega公司的Jaz或Zip驅動器看上去是令人感興趣的備份工具,但是它們易於在硬盤驅動器崩潰的情況下因為文件系統的原因而導致問題出現。對於Internet備份來說,當你因為系統崩潰而不能訪問互聯網時,就不能恢復系統的數據。同樣,你能真正信任你的數據存放在別人的遠程系統麼?

  因此,我們選擇了磁帶機,但是如何訪問磁帶機呢?正如文章前面提到的,在Linux系統中,在用戶狀態的角度來看,任何都可以被看做是文件。因此,可以“打開”合適的磁帶驅動器文件來進行寫入操作,將要備份的數據寫入到文件中去。雖然這聽上去過於簡單了,但是實際情況就是這樣。Linux環境下根文件系統的/dev目錄包含了所有和物理設備關聯的文件。當對這些文件進行操作,實際上是在操作下層的物理設備。下面的表格說明了Linux環境下設備文件是如何和物理設備關聯起來的:

  設備(Device) 回卷(Rewinding) 不回卷(No-Rewind)
   1st SCSI tape drive /dev/st0 /dev/nst0
   2nd SCSI tape drive /dev/st1 /dev/nst1
   nth SCSI tape drive /dev/st[n-1] /dev/nst[n-1]
   1st ATAPI tape drive /dev/ht0 /dev/nht0
   2nd ATAPI tape drive /dev/ht1 /dev/nht1
   nth ATAPI tape drive /dev/ht[n-1] /dev/nht[n-1]
   1st floppy tape drive /dev/ft0 /dev/nft0

  這正如在上表中看的那樣,設備名是基於位於針對這種設備類型的分層結構的設備的邏輯數字,而不是其物理ID(SCSI)或者IDE通道(ATAPI)。因此,即使某個SCSI磁盤機被分配為SCSI設備的ID4,如果它是SCSI鏈的第一個磁帶設備,則它將是 /dev/st0, 而不是/dev/st4,這種命名慣例有利於跟蹤系統中的磁帶設備,甚至在擁有多個驅動類型的磁帶設備。同樣,在2.0.X內核下,只支持單個ATAPI設備,2.2版本的內核可以使用多個ATAPI驅動(ht0, ht1,...)。

現在我們來看看這些文件是如何被命名的,回卷和不回卷的區別在哪裡呢?簡單的說,回卷設備允許在結束操作以後,自動將磁帶回卷到開始處,而不回卷設備在操作結束以後,將磁帶機停留在當時的位置而不進行回卷操作。對於大多數簡單備份操作,回卷設備更適合一些,因為在備份操作結束以後其自動回卷以准備取出磁帶。而對於那些復雜的備份操作(如附加備份,邏輯搜索及那些高端備份工具的操作),不回卷設備更適合一些。

   3、Linux環境下的設備訪問

   在Linux環境下,設備訪問是通過和它們關聯的設備節點文件。這些節點位於/dev目錄下,但是不要混淆概念—一個設備節點不僅僅是一個簡單的文件。當打開一個設備節點以供訪問時,其有特殊的屬性來通知內核操作的是哪一個物理設備。每一個節點文件都有一個關聯的主號和從號(major and minor number)及設備類型屬性,例如,對於SCSI磁帶機的設備節點情況如下:

   crw-rw-rw- 1 root operator 9, 0 Dec 1 04:10 /dev/st0

  第一個“c”表示該設備是一個字符設備(意味著該設備在I/O操作時每次僅僅處理一個字符),主號為9,從號為0。主號就象一個地址來通知內核使用哪個設備驅動器,而從號則被用來定義該設備的某個特定實例的功能。如果該節點文件不存在呢?Linux提供了一個命令來方便的創建一個設備節點文件-mkmod,命令格式如下:

   mknod /dev/nodename [c|b] major minor

  然而若系統中沒有合適的設備節點,則需要檢測內核是否支持了這種類型的設備。這可以通過命令cat /proc/devices的輸出來察看,在我的系統中,情況如下:

   Character Devices
   1 mem 10 misc
   2 pty 14 sound
   3 ttyp 21 sg
   4 ttyS 29 fb
   5 cua 37 ht
  7 vcs 128 ptm
  9 st 136 pts
  Block Devices
  1 ramdisk
  2 fd
  3 ide0
  9 md
  22 ide1

  很多管理員在操作回卷設備時都會遇到關於mt命令的問題。mt命令實現操作一個“磁帶”設備。例如,命令mt -f /dev/st0 eod 命令設置磁帶為進行新的附加備份做好准備,磁帶機/dev/st0將前進到數據結束處以准備新的附加備份操作,但由於st0是回卷設備,磁帶機在定位到數據結束以後馬上回卷到開始處並關閉磁帶設備(因為st0是一個回卷設備)。這時候如果進行備份操作則會覆蓋磁帶中的數據信息,而不是將新數據附在磁帶數據結束處。若使用非回卷設備,mt將會把磁帶停留在eod的位置,隨後的備份操作將被添加到上次備份結束以後的地方。

  對於這種問題的推薦解決方法是在為希望使用的非回轉設備建立符號鏈接,如:/dev/tape,mt命令在沒有提供-f參數時則可以使用/dev/tape來操作該設備。若系統擁有多個磁帶設備,則你可以不使用符號鏈接的方式,而使用環境變量TAPE=/dev/nst[x]來達到一樣的結果。對於上面兩種方法,在使用mt命令時不需要使用-f參數,例如:mt eod,則會自動使用正確的介質位置,而無需關心使用的是哪個/dev設備。

4、Linux環境下的基本備份方法

  現在我們已經討論了如何調用磁帶設備,並且我們已經知道如何決定使用回卷或非回卷設備。但是如何實現將系統的文件從系統中搬移到磁帶設備上呢?這是各種備份工具的功能了。所有的Linux發布都提供了所有備份工具的祖先:tar(當然實際上dbppt和bppt, a/k/a dump and restor,才是Unix系統的備份工具的亞當)。tar命令在Unix Version 7中出現的。該命令的名字來自於"Tape ARchiver"。該命令被設計為能非常容易的實現將數據從系統備份到磁帶中或者從磁帶中恢復數據。

  tar命令的基本語法為:

  tar -mode -option [files]

  這裡c表示創建(backup),-x提取(restore)或者-t內容列表(list),選項包括如下元素:如-v表示詳細輸出,-f file表示目的(創建模式)或源(提取或者列表模式),更詳細的信息,請看系統tar命令的手冊(man tar)。

  使用tar做最簡單的備份如下所示:

  tar -cvf /dev/st0
  lost+found/
  var/
  var/adm/
  var/adm/LST/
  var/adm/LST/log/
  var/adm/LST/log/debug
  var/adm/LST/log/history
  var/adm/LST/log/cmd.trace
  var/adm/LST/log/install.success
  var/adm/LST/log/postin.failed
  var/adm/LST/log/install.failed
  var/adm/LST/analyse/
  var/adm/LST/analyse/boot.img
  var/adm/LST/analyse/boot.msg
  var/adm/LST/analyse/boot.info
  var/adm/LST/analyse/boot.diag
  var/adm/LST/analyse/boot.params
  var/adm/LST/database/
  var/spool/
  [...]

  該命令的c選項表示創建一個新的備份(c),並且使用詳細模式(v),並且將整個系統備份輸出到/dev/st0(f)。在這種情況下,tar操作將打開/dev/st0文件(設備),將數據流以tar的數據格式的寫入到那個打開的文件,並且在所有的數據被寫入以後,關閉文件。因為我們這裡選擇了回卷設備/dev/st0,文件(存儲介質)將使設備驅動在tar關閉文件以後回卷磁帶。

  下一步將是驗證數據被正確的寫入到磁帶中。不幸的是,Linux環境下的tar命令僅僅提供了一種比較模式的驗證手段-磁帶內容被重新讀入,並和原始文件逐字節進行比較。然而,這仍然比沒有驗證要好很多。因為在進行恢復時發現磁帶中有壞數據是一個非常糟糕的事情。

  在恢復結束並且被驗證以後,一切並沒有結束,因為系統中的數據是不斷變化的,一個保持不斷變化的系統的備份的方法是持續進行定期的對發生變化的數據進行備份。有很多方法可以實現這樣的備份,但是最方便的是增量(incremental)和差分(differential)備份。

  這兩種方法的備份方法都是依賴於時間,或者是基於上一次備份(增量),或者基於上一次完全備份。增量備份僅僅備份那些上次備份以來修改過的數據,有時候也被稱為常規備份;而差分備份則僅僅備份上次完全備份以來變化過的文件。下表是幾種備份方案的特點比較:

  5、完全備份 增量備份 差分備份

  空間使用 Most Least Less than Full
  備份速度 Slowest Fastest Faster than Full
  恢復速度 Fastest Slowest Faster than Incremental

  差分備份可能會備份增量備份忽略的數據,但是差分備份恢復速度要比增量快,因為它僅僅需要上一次完全備份和最近的一次差分備份;而增量備份則需要從上次完全備份及以來的每一次增量備份。

  為了使用者寫方法進行備份,需要使用tar命令的-N或--newer選項,後面跟一個時間,時間應該是通常的日歷格式(例如:03/12/199 = March 12th, 1999)。

  tar -cvf /dev/st0 --newer 03/12/1999 /

  該命令將備份系統中所有在March 12th, 1999及其以後被修改的文件。
我下面提供了一個簡單的腳本文件來作為一個同時實現完全和差分備份的自動化模型。在使用該腳本以前,請注意檢查腳本頭定義的環境變量以滿足自己的需要。

  #!/bin/sh
  #
  #######################################
  #
  # TAR backup script to cover daily and weekly backups on one tape.
  # Generic UNIX version - edit variables as required
  #
  # For this to work, it MUST be started on a Monday!
  #
  # Copyright (c) 1999, Tim Jones
  # Permission granted for use/modification
  #
  # Tim Jones/Linux Magazine provide this shell script with no warranty
  # (implied or otherwise)
  #
  ########################################

  DOW=`date +%w`
  DATE=`date +%D`
  DAY=`date +%A`
  DEVICE="MY REWIND TAPE" # Rewinding tape drive
  NDEVICE="MY NO_REWIND TAPE" # non-rewinding tape drive
  REWIND="mt -f $DEVICE rewind"
  EOD="mt -f $NDEVICE eod"
  FSF="mt -f $NDEVICE fsf"
  MAILLIST="root" # list of users to receive backup notice

  if [ $DOW = "6" ]
  then
  # This is Saturday, so append and write the whole system!
  $EOD
  echo $DATE > /tmp/.LASTFULL
  tar -cvvf $NDEVICE / >/tmp/backup.txt
  $REWIND
  $FSF 5
  tar -dvf $NDEVICE >> /tmp/backup.txt
  $REWIND
  cp /tmp/.LASTFULL /etc/.LASTFULL
  else
  # this is not Saturday
  case $DOW in
  0)
  # it\'s Sunday - nothing to do
  exit 0
  ;;
  1)
  # Monday, Let the tape rewind for the difference verification
  echo $DATE > /tmp/.LASTINC
  tar -cvvf $DEVICE --newer `cat /etc/.LASTFULL` / >/tmp/backup.txt
  cp /tmp/.LASTINC /etc/.LASTINC
  ;;
  *)
  # Other Days, must rewind manually and Inspect, -i
  $EOD
  echo $DATE >/tmp/.LASTINC
  tar -cvvf $NDEVICE --newer `cat /etc/.LASTINC` / >/tmp/backup
  $REWIND
  $FSF `expr $DOW - 1`
  echo "************ Verifying ${DAY}\'s backup" >> /tmp/backup.txt
  tar --dvf $NDEVICE >> /tmp/backup.txt
  cp /tmp/.LASTINC /etc/.LASTINC
  $REWIND
  esac
  fi
  mail $MAILLIST < /tmp/backup.txt
  rm -f /tmp/backup.txt
  # END OF SCRIPT

Copyright © Windows教程網 All Rights Reserved