备份关键信息linux
?
大多數 UNIX 管理員都有相應的方法來備份 UNIX 計算機中的數據和信息,但對于配置文件和提供計算機運行所需配置數據的其他內容,又應該如何處理呢?本文提供了相關技術的詳細信息,這些技術用于針對關鍵的文件,實現有效和高效的備份系統。
關于本系列
通常,UNIX 管理員都擁有一套常用的輔助進程管理的關鍵實用工具、訣竅和系統。本文提供了各種用于簡化各個過程的關鍵實用工具、命令行鏈和腳本。這些工具中的一部分來自于操作系統,而大部分的訣竅則來源于長期的經驗積累和減輕系統管理員的工作壓力的要求。本系列文章主要專注于最大限度地利用各種 UNIX 環境中可用的工具,包括簡化異類環境中的管理任務的方法。
確定關鍵的文件
在對 UNIX 系統建立備份時,最重要的是其中包含的數據。無論是數據庫、開發源代碼文件或其他類型的所謂用戶生成的 信息,備份這些數據都是很重要的,它們可以確保在出現故障或其他問題的情況下,您可以恢復這些數據,并重新回到工作中。
然而,系統中存在大量這樣的文件和信息,從技術上看它們并不是用戶數據,但這些文件可能需要耗費相當長的時間進行重建或者重新配置。例如,重新配置服務器或為您的域重建域名系統 (DNS) 文件需要多長時間?
完全備份,即復制系統中所有的文件,很明顯這樣做可以保存所有的信息,但這可能是一種代價很大的信息備份方式。您應該能夠通過挑選那些配置、生成或支持相關信息和應用程序的特定文件,從而創建有效的備份。
在 UNIX 或 Linux 系統中,大部分系統配置文件位于 /etc 目錄,但是您應該考慮對所有可能的文件(以及可能的位置)進行備份,具體包括:
??? * 主配置目錄 (/etc)
??? * DNS 域信息 (/var/bind)
??? * NIS/NIS+ 文件和配置 (/var/yp)
??? * Apache 或其他 Web 服務器配置(/var/apache、/etc/apache 或 /usr/local/apache)
??? * 郵件文件或文件夾(/var/mail 和 /usr/mail)
??? * Lightweight Directory Access Protocol (LDAP) 服務器數據(/var/ldap 或 /usr/local/ldap)
??? * 安全證書
??? * 自定義內核驅動程序
??? * 內核配置或構建配置和參數
??? * 許可密鑰和序列號
??? * 自定義腳本和應用程序
??? * 用戶/root 登錄腳本
??? * 郵件配置;特別是,如果您使用了像 Cyrus Internet Message Access Protocol (IMAP) 這樣的解決方案,其中對用戶郵件文件夾進行了特殊的記錄和索引
其他的文件和信息來源則取決于具體的系統和環境,但是提出這樣一份關鍵配置文件的列表不應該耗費太長的時間,而如果丟失這些信息,將會對您的公司或系統造成極大的影響。
為進行存儲而整理數據
盡管直接從數據的源位置對其進行備份非常方便,但是在對其進行備份之前,先將備份數據復制到一個單獨的目錄將使得您能夠更好地選擇要復制的文件,并且讓您能夠更靈活地選擇合適的備份方法。如果文件位于同一個位置,那么您可以將其備份到磁帶、磁盤,或將這些內容復制到另一臺計算機,而無需對源文件進行重新組織。
要對備份到任何目標的文件進行重新配置,只需更改相應的腳本,而該腳本對這些文件進行整理并將其復制到備份準備目錄。因為您擁有這些信息的本地的和直接的副本,所以在發生故障時可以快速和輕松地恢復這些數據,并且您依然保留了將這些信息備份到磁帶、磁盤或另一個系統的能力。
信息的整理方式非常重要,因為不同的解決方案對應著不同的存儲需求、技術和恢復機制。
記錄信息的方法
您可以選擇各種各樣的方法來進行實際的備份和信息存儲。顯而易見的選擇是將文件備份到傳統媒介,如磁帶。可以將相關信息復制到網絡上的另一臺計算機,這是一種比較簡單的解決方案,但是存在許多優缺點。任何成功的備份解決方案都有一個關鍵要素,即在另一個位置保存重要信息的副本。無論是另一個物理設備、可移動存儲設備或另一臺計算機,都是可行的。
從災難恢復的角度來看,可移動存儲設備(磁帶、磁盤、甚至 USB)是最可靠的備份,因為可以將所存儲的信息保存在現場以外的其他位置。這樣做可以在放置計算機的場所遭遇大災難(如火災或被盜)時,得以幸免。
使用另一臺計算機進行存儲則意味著備份數據基本上是聯機的和可用的。在這種情況下,恢復備份數據可能非常簡單,在發生故障時只需將這些文件復制回您的服務器,或者在發生系統故障時將它們復制到替換系統。
當使用另一臺計算機來存儲您的備份數據時,最好在本地保存這些文件的多個副本,但是應該在可能的情況下,為這些文件使用直接可用的非現場位置。這臺計算機可能是 Internet 上的另一臺計算機、您的 WAN 或其他站點上的另一臺計算機。這樣可以提供必要的冗余和安全性。
使用專業的或商業的備份解決方案,您需要在恢復備份數據之前,重新安裝該軟件,而在安裝該軟件之前,可能需要使用某些配置信息和關鍵文件。
使用 tar 存儲備份數據
使用 tar、cpio 或其他的存檔文件類型,可能是最直接的信息存儲方式。當使用這種方法時,最好注明這些文件的日期,并創建一個簡單的備份腳本,專門用來生成指定的文件。另一方面,您還需要一種方法,以便刪除不再需要的備份數據(例如,那些超過了特定時間段的備份數據)。
清單 1 顯示了一個簡單的腳本,該腳本為不同的目錄創建了經過 tar 處理和壓縮(使用 bzip2)的備份。這些備份文件創建于與遠程系統共享的網絡文件系統 (NFS),而該遠程系統保留了相應的備份副本。
清單 1. 為不同的目錄創建經過 tar 處理和壓縮的備份
01.#!/bin/bash
02.
03.DATE=`date +%Y%m%d.%H%M`
04.HOST=`hostname`
05.
06.TEMP=/mnt/backupprepare
07.
08.echo "Preparing backup..."
09.
10.cd $TEMP
11.
12.files=`/usr/local/mcslp/filesbydate.pl notlast5days $HOST*`
13.if [ -n "$files" ]
14.then
15.??? echo "Deleting old files: $files"
16.??? rm $files
17.fi
18.
19.cd /etc
20.tar cf - ./* |bzip2 -9 - >$TEMP/$HOST-etc.$DATE.tar.bz2
21.
22.cd /var/bind
23.tar cf - ./* |bzip2 -9 - >$TEMP/$HOST-bind.$DATE.tar.bz2
24.
25.cd /export/home/webs
26.tar cf - ./* |bzip2 -9 - >$TEMP/$HOST-webs.$DATE.tar.bz2
27.
28.cd /etc/apache2
29.tar cf - ./* |bzip2 -9 - >$TEMP/$HOST-webconfig.$DATE.tar.bz2
使用 date 命令生成 DATE 變量,并創建一個“20060627.2200”或“10PM on 27th of June 2006”形式的文件名。要使得備份腳本具有可移植性,要求創建的所有文件的前綴中包含創建該文件的主機的名稱,這樣一來就可以很容易地將多臺主機的內容備份到相同的位置,并且 TEMP 目錄作為每個備份的目標。
使用單獨的 Perl 腳本來確定可以對備份準備目錄中哪些文件進行刪除。稍后將研究這個腳本。在這個腳本中,您可以指定需要保留最近 5 天的文件,換句話說,該腳本將根據備份文件的文件名中的日期說明,選擇那些不是最近 5 天內創建的文件。
實際的備份過程是一個簡單的 tar 命令,同時還使用了 bzip2 對文件進行壓縮。因為生成的文件可能很大,所以您可能需要對這個方法進行改進,以便僅選擇那些可能在某個時間段內進行過更改的文件。通過使用 find 命令選擇所需的文件(請參見清單 2),您可以達到這個目的。
清單 2. 使用 bzip2 對文件進行壓縮的 tar 命令
01.tar cf - `find . -type f -mtime -1` | bzip2 -9 -
02.>$TEMP/$HOST-webconfig.$DATE.tar.bz2
復制代碼您可以在 find 語句中僅指定需要選擇的文件,這樣可以防止對目錄的更改導致將那些沒有更改的文件包含到 tar 文件中。這將包含當前目錄中的文件,如清單 3 所示。
清單 3. 引用當前目錄
01.$ cd /etc
02.$ tar cf etc.tar ./*
復制代碼這樣做可以避免顯式地指定目錄,如清單 4 所示。
清單 4. 避免顯式地指定目錄
01.$ tar cf etc.tar /etc
復制代碼這樣可以確保將恢復的文件放到備用的目錄,而不是運行中的某個位置。
這個用于刪除舊文件的腳本將使用文件名,提取其中嵌入的日期和時間,并確定該文件是否屬于指定的界限,例如,在不在特定的天數之內(請參見清單 5)。
清單 5. 用于刪除舊文件的腳本
01.#!/usr/local/bin/perl
02.
03.my $choice = shift;
04.my @files = @ARGV;
05.
06.my @selection;
07.
08.if ($choice =~ /thismonth/)
09.{
10.??? my ($day,$mon,$year) = dateaslist();
11.??? my $match = sprintf('%04d%02d',$year,$mon);
12.??? foreach my $file (@files)
13.??? {
14.??????? if ($file =~ m/$match/ && $choice eq 'thismonth')
15.??????? {
16.??????????? push @selection,$file;
17.??????? }
18.??????? elsif ($file !~ m/$match/ && $choice eq 'notthismonth')
19.??????? {
20.??????????? push @selection,$file;
21.??????? }
22.??? }
23.}
24.elsif ($choice =~ /today/)
25.{
26.??? my ($day,$mon,$year) = dateaslist();
27.??? my $match = sprintf('%04d%02d%02d',$year,$mon,$day);
28.??? foreach my $file (@files)
29.??? {
30.??????? if ($file =~ m/$match/ && $choice eq 'today')
31.??????? {
32.??????????? push @selection,$file;
33.??????? }
34.??????? elsif ($file !~ m/$match/ && $choice eq 'nottoday')
35.??????? {
36.??????????? push @selection,$file;
37.??????? }
38.??? }
39.}
40.elsif ($choice =~ /last(\d+)days/)
41.{
42.??? my $days = $1;
43.??? my ($day,$mon,$year) = dateaslist(time()-($1*24*3600));
44.??? my $match = sprintf('%04d%02d%02d',$year,$mon,$day);
45.??? my $spec = sprintf('last%ddays',$days);
46.??? my $notspec = sprintf('notlast%ddays',$days);
47.??? foreach my $file (@files)
48.??? {
49.??????? my ($date) = ($file =~ m/(\d{8})/);
50.??????? push @selection,$file if ($date >= $match && $choice eq
51.$spec);
52.??????? push @selection,$file if ($date < $match && $choice eq
53.$notspec);
54.??? }
55.}
56.
57.print join ' ',@selection;
58.
59.sub dateaslist
60.{
61.??? my ($time) = @_;
62.??? $time = time() unless defined($time);
63.??? my ($day,$mon,$year) = (localtime($time))[3..5];
64.??? $mon++;
65.??? $year+= 1900;
66.??? return($day,$mon,$year);
67.}
使用這個腳本,您可以通過各種方法挑選出備份文件(請參見清單 6)。
清單 6. 挑選備份文件
01.$ filesbydate.pl last5days???????? # Files created in the last 5 days
02.$ filesbydate.pl notlast14days? # Files 15 days or older
03.$ filesbydate.pl nothismonth??? # Files not created this month
復制代碼請記住,比較操作針對于文件名,而不是文件系統的創建或修改日期,所以該腳本可以對頭天晚上創建的文件進行操作。
使用 rsync 存儲備份數據
rsync 工具可以在不同的位置或計算機之間復制整個目錄結構,它通過使用一種特殊的算法,可以實現僅傳輸更改過的文件。這使得它成為一種非常高效的復制文件的方法,特別是在不同的計算機之間,這也意味著,備份過程將很快完成。
有兩種使用 rsync 的方法,要么作為一種簡單的同步方法,使用這種方法,您可以將所有重要的文件復制到新的驅動器或系統,要么作為一種備份方法,按日期復制整個目錄樹,這與在前面的示例中創建 tar 備份文件的方法相同。
前面這種方法既快速又簡單,但是您不能回到出現故障之前某個特定的日期。而后面這種方法提供了基于日期的選擇,但是它需要更多的管理(尤其是因為您需要刪除不再需要的舊版本的文件)以及相當數量的存儲空間,因為沒有對這些文件進行壓縮。然而,您獲得了更簡單和更直接的訪問方式。
如何對 rsync 進行設置,這超出了本文的范圍,但在完成了相應的配置工作之后,進行信息的傳輸和同步就非常簡單了。清單 7 顯示了使用 rsync 進行文件同步的腳本。
清單 7. 使用 rsync 對文件進行同步的腳本
01.#!/bin/bash
02.
03.DESTBASE=admin@atuin:/mnt/backupprepare
04.HOST=`hostname`
05.
06.cd /export/data/svn
07.rsync --stats --rsh=/usr/bin/ssh --delete --recursive --times -og
08.--links . $DESTBASE/$HOST/svn
09.
10.cd /export/home/webs
11.rsync --stats --rsh=/usr/bin/ssh --delete --recursive --times -og
12.--links . $DESTBASE/$HOST/webs
13.
14.cd /var/bind
15.rsync --stats --rsh=/usr/bin/ssh --delete --recursive --times -og
16.--links . $DESTBASE/$HOST/bind
17.
18.cd /etc
19.rsync --stats --rsh=/usr/bin/ssh --delete --recursive --times -og
20.--links . $DESTBASE/$HOST/etc
指定的 rsync 命令選項如下所示:
??? * --stats 顯示同步的統計信息。
??? * --rsh 告訴 rsync 使用安全 Shell (SSH) 復制文件(出于安全考慮)。
??? * --delete 刪除目標中那些在本地目錄中不存在的文件。
??? * --recursive 確保對整個目錄進行檢查。
??? * --times 保留文件的創建和修改時間。
??? * -og 保留所有權和組信息。
??? * --links 將鏈接復制為鏈接,而不是它們所鏈接的文件。
DESTBASE 變量指定了基本位置(在本示例中為遠程主機上的文件系統),而 HOST 變量則保存了主機名信息,以便您能夠對多臺主機使用相同的腳本進行備份。
備份整理的數據
在前面的部分中,您已經使用了 tar 和 rsync 在單獨的文件夾中創建相應的備份。您可以使用這種經過整理的信息作為主備份,尤其是當文件位于另一臺計算機時。然而理想的情況下,您還應該將這些文件備份到另一個位置。
使用上面介紹的這些腳本,無論是 tar 或 rsync,都可以將多臺主機的多個目錄中的信息整理到單個位置。基于這一點,您可以使用自己喜歡的方法進一步地對這些信息進行備份,包括將其復制到另一臺計算機或設備,或復制到磁帶或磁盤。
保存長期的記錄
大多數備份解決方案,盡管對其進行了良好的管理,但通常依賴于交替和循環使用用于存儲數據的介質或目標。然而,您可能需要長期保存相關信息的某些類型的關鍵數據,甚至可能需要能夠記錄這些數據的變更和修改信息,并作為備份過程的一部分。
實際上,記錄這些信息的時間間隔僅受到可用磁盤空間或存儲空間的限制。使用基于日期的方法,特別是在使用 tar 或 cpio 時,您可以長期保存相關記錄,而不會對存儲空間造成很大的影響。通過使用常規的完整備份(換句話說,包括所有的文件)和增量 (diff) 備份(其中僅備份變更的內容),您可以進一步延長其保留時間。
總結
備份關鍵文件涉及到確定相關文件,并找到一種合適的方法存儲和備份這些信息。文件可能存儲在許多不同的位置,而您應該多加小心,以確保包含重要的、但經常被遺忘的內容,比如內核驅動程序、庫和相關配置。
然后使用合適的方法,就可以對這些信息進行有效的備份。與用戶數據不同,通常需要優先對關鍵文件進行恢復,以便在繼續進行其他的還原操作之前,使計算機獲得正確的配置。通過使用 tar 或 rsync,做好對該信息進行訪問的準備,這樣通常將更加有效。
?
?
轉載于:https://blog.51cto.com/shusheng/575769
總結
以上是生活随笔為你收集整理的备份关键信息linux的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡刷一笔就上征信吗
- 下一篇: PNG、GIF与JPG的区别有哪些?