Ubuntu如何備份和恢復(fù)系統(tǒng)
http://wsfei.iteye.com/blog/1100534
在 使用Ubuntu之前,相信很多人都有過(guò)使用Windows系統(tǒng)的經(jīng)歷。如果你備份過(guò)Windows系統(tǒng),那么你一定記憶猶新:首先需要找到一個(gè)備份工 具(通常都是私有軟件),然后重啟電腦進(jìn)入備份工具提供的軟件環(huán)境,在這里備份或者恢復(fù)Windows系統(tǒng)。Norton Ghost是備份Windows系統(tǒng)時(shí)經(jīng)常使用的備份工具。
在備份Windows系統(tǒng)的時(shí)候你可能想過(guò),我能不能把整個(gè)C盤都放到一個(gè)ZIP文件里去呢。這在Windows下是不可能的,因?yàn)樵赪indows中有很多文件在它們運(yùn)行時(shí)是不允許拷貝或覆蓋的,因此你需要專門的備份工具對(duì)Windows系統(tǒng)進(jìn)行特殊處理。
和 備份Windows系統(tǒng)不同,如果你要備份Ubuntu系統(tǒng)(或者其它任何Linux系統(tǒng)),你不再需要像Ghost這類備份工具。事實(shí)上,Ghost 這類備份工具對(duì)于Linux文件系統(tǒng)的支持很糟糕,例如一些Ghost版本只能完善地支持Ext2文件系統(tǒng),如果你用它來(lái)備份Ext3文件系統(tǒng),你可能會(huì) 丟失一些寶貴的數(shù)據(jù)。
1. 備份系統(tǒng)
我該如何備份我的Ubuntu系統(tǒng)呢?很簡(jiǎn)單,就像你備份或壓縮其它東西一樣,使用TAR。和Windows不同,Linux不會(huì)限制root訪問(wèn)任何東西,你可以把分區(qū)上的所有東西都扔到一個(gè)TAR文件里去!
首先成為root用戶:
$ sudo su
然后進(jìn)入文件系統(tǒng)的根目錄(當(dāng)然,如果你不想備份整個(gè)文件系統(tǒng),你也可以進(jìn)入你想要備份的目錄,包括遠(yuǎn)程目錄或者移動(dòng)硬盤上的目錄):
# cd /
下面是我用來(lái)備份系統(tǒng)的完整命令:
# tar cvpzf backup.tgz –exclude=/proc –exclude=/lost+found –exclude=/backup.tgz –exclude=/mnt –exclude=/sys /
讓我們來(lái)簡(jiǎn)單看一下這個(gè)命令:
“tar”當(dāng)然就是我們備份系統(tǒng)所使用的程序了。
“cvpfz”是tar的選項(xiàng),意思是“創(chuàng)建檔案文件”、“保持權(quán)限”(保留所有東西原來(lái)的權(quán)限)、“使用gzip來(lái)減小文件尺寸”。
“backup.gz”是我們將要得到的檔案文件的文件名。
“/”是我們要備份的目錄,在這里是整個(gè)文件系統(tǒng)。
在 檔案文件名“backup.gz”和要備份的目錄名“/”之間給出了備份時(shí)必須排除在外的目錄。有些目錄是無(wú)用的,例如“/proc”、“/lost+ found”、“/sys”。當(dāng)然,“backup.gz”這個(gè)檔案文件本身必須排除在外,否則你可能會(huì)得到一些超出常理的結(jié)果。如果不把“/mnt”排 除在外,那么掛載在“/mnt”上的其它分區(qū)也會(huì)被備份。另外需要確認(rèn)一下“/media”上沒(méi)有掛載任何東西(例如光盤、移動(dòng)硬盤),如果有掛載東西, 必須把“/media”也排除在外。
有人可能會(huì)建議你把“/dev”目錄排除在外,但是我認(rèn)為這樣做很不妥,具體原因這里就不討論了。
執(zhí)行備份命令之前請(qǐng)?jiān)俅_認(rèn)一下你所鍵入的命令是不是你想要的。執(zhí)行備份命令可能需要一段不短的時(shí)間。
備份完成后,在文件系統(tǒng)的根目錄將生成一個(gè)名為“backup.tgz”的文件,它的尺寸有可能非常大。現(xiàn)在你可以把它燒錄到DVD上或者放到你認(rèn)為安全的地方去。
在備份命令結(jié)束時(shí)你可能會(huì)看到這樣一個(gè)提示:’tar: Error exit delayed from previous errors’,多數(shù)情況下你可以忽略它。
你還可以用Bzip2來(lái)壓縮文件,Bzip2比gzip的壓縮率高,但是速度慢一些。如果壓縮率對(duì)你來(lái)說(shuō)很重要,那么你應(yīng)該使用Bzip2,用“j”代替命令中的“z”,并且給檔案文件一個(gè)正確的擴(kuò)展名“bz2”。完整的命令如下:
# tar cvpjf backup.tar.bz2 –exclude=/proc –exclude=/lost+found –exclude=/backup.tar.bz2 –exclude=/mnt –exclude=/sys /
2. 恢復(fù)系統(tǒng)
在進(jìn)行恢復(fù)系統(tǒng)的操作時(shí)一定要小心!如果你不清楚自己在做什么,那么你有可能把重要的數(shù)據(jù)弄丟,請(qǐng)務(wù)必小心!
接著上面的例子。切換到root用戶,并把文件“backup.tgz”拷貝到分區(qū)的根目錄下。
在 Linux中有一件很美妙的事情,就是你可以在一個(gè)運(yùn)行的系統(tǒng)中恢復(fù)系統(tǒng),而不需要用boot-cd來(lái)專門引導(dǎo)。當(dāng)然,如果你的系統(tǒng)已經(jīng)掛掉不能啟動(dòng)了, 你可以用Live CD來(lái)啟動(dòng),效果是一樣的。你還可以用一個(gè)命令把Linux系統(tǒng)中的所有文件干掉,當(dāng)然在這里我不打算給出這個(gè)命令!
使用下面的命令來(lái)恢復(fù)系統(tǒng):
# tar xvpfz backup.tgz -C /
如果你的檔案文件是使用Bzip2壓縮的,應(yīng)該用:
# tar xvpfj backup.tar.bz2 -C /
注意:上面的命令會(huì)用檔案文件中的文件覆蓋分區(qū)上的所有文件。
執(zhí)行恢復(fù)命令之前請(qǐng)?jiān)俅_認(rèn)一下你所鍵入的命令是不是你想要的,執(zhí)行恢復(fù)命令可能需要一段不短的時(shí)間。
恢復(fù)命令結(jié)束時(shí),你的工作還沒(méi)完成,別忘了重新創(chuàng)建那些在備份時(shí)被排除在外的目錄:
# mkdir proc
# mkdir lost+found
# mkdir mnt
# mkdir sys
等等
當(dāng)你重啟電腦,你會(huì)發(fā)現(xiàn)一切東西恢復(fù)到你創(chuàng)建備份時(shí)的樣子了!
Linux備份策略研究
世界上沒(méi)有絕對(duì)安全的系統(tǒng)。如果想獲得絕對(duì)安全的系統(tǒng),只有不連接網(wǎng)絡(luò),不讓管理員之外的人使用,刷卡管制人員進(jìn)出,使用監(jiān)視器監(jiān)視錄像,甚至于不 要開機(jī)。但是這是完全不切實(shí)際的,我們僅能寄望盡量讓系統(tǒng)能在承擔(dān)低風(fēng)險(xiǎn)的情況下工作,因?yàn)槿魏尾僮飨到y(tǒng)都不可能毫無(wú)漏洞。那么怎樣才能讓系統(tǒng)承擔(dān)最低的 風(fēng)險(xiǎn)呢?回答因該是在保障系統(tǒng)盡量安全的基礎(chǔ)上,做好各個(gè)系統(tǒng)上的數(shù)據(jù)備份工作。一旦系統(tǒng)遭受到毀滅性的打擊,可將平時(shí)做好的備份數(shù)據(jù)及時(shí)恢復(fù),這樣才能 使被破壞的系統(tǒng)迅速恢復(fù)正常,以避免不必要的損失。
下面針對(duì)Linux操作系統(tǒng)上的數(shù)據(jù)備份方法發(fā)表一下自己的看法。
數(shù)據(jù)備份種類
總的來(lái)說(shuō),在Linux操作系統(tǒng)中將備份分為兩類:系統(tǒng)備份,實(shí)現(xiàn)對(duì)操作系統(tǒng)和應(yīng)用程序的備份;用戶備份,實(shí)現(xiàn)對(duì)用戶文件的備份。在下面我們會(huì)看到,系統(tǒng)備份和用戶備份是不同的。
系統(tǒng)備份
系統(tǒng)備份就是對(duì)操作系統(tǒng)和應(yīng)用程序的備份,進(jìn)行系統(tǒng)備份的原因是盡量在系統(tǒng)崩潰以后能快速簡(jiǎn)單完全地恢復(fù)系統(tǒng)的運(yùn)行。進(jìn)行備份的最有效方法是僅僅備份那些對(duì)于系統(tǒng)崩潰后恢復(fù)所必需的數(shù)據(jù)。
Linux系統(tǒng)中很多重要的文件位于/etc目錄之下,如:
/etc/group : 組用戶信息;
/etc/passwd : 包含所有的用戶信息,如密碼,登錄shell等;
/etc/fstab : 配置系統(tǒng)有哪些文件系統(tǒng);
/etc/inittab : 配置init在不同運(yùn)行級(jí)別下分別如何啟動(dòng)系統(tǒng);
/etc/hosts : 域名解析的配置信息;
/etc/inetd.conf : 進(jìn)程控制信息;
/etc/printcap:配置如何與打印機(jī)通信;
/etc/XF86Config:包含XFree86的初始配置;
上面這些重要的配置文件都需要定期的做備份。
不 同的系統(tǒng)可能有很多重要配置文件,可以看到/etc目錄下的配置文件非常重要。當(dāng)然,某些程序使用了其他目錄下的一些文件,但是Linux的基本配置文件 絕大多數(shù)都位于/etc目錄下。很多人曾經(jīng)花費(fèi)了好長(zhǎng)時(shí)間才正確的配置了XF86Config文件,想到如果重新再做一遍,就很費(fèi)時(shí)費(fèi)力。再舉個(gè)例子, /etc目錄下的passwd文件,如果誤操作,將此文件更改,或刪除了,則整個(gè)系統(tǒng)用戶無(wú)法正常登錄,如果定期或及時(shí)的對(duì)其備份,遇到上面的情況后,就 可以非常快速的恢復(fù)。
如果修改了某個(gè)程序所使用的配置文件,一般不能將其搬移到其它的地方,因?yàn)槌绦蛲ǔT诠潭ǖ牡胤綄ふ遗渲梦募R虼擞涗泴?duì)系統(tǒng)所做的修改也非常重要,無(wú)論所做的修改如何小,當(dāng)系統(tǒng)崩潰時(shí)才能輕松的恢復(fù)系統(tǒng)。
用戶備份
用戶備份不同于系統(tǒng)備份,因?yàn)橛脩舻臄?shù)據(jù)變動(dòng)更加頻繁一些。當(dāng)備份用戶數(shù)據(jù)時(shí),只是為用戶提供一個(gè)虛擬的安全網(wǎng)絡(luò)空間,合理的放置最近用戶數(shù)據(jù)文件的備份,當(dāng)出現(xiàn)任何問(wèn)題,例如,誤刪除某些文件或者硬盤發(fā)生故障時(shí),用戶可以恢復(fù)自己的數(shù)據(jù)。
用戶備份應(yīng)該比系統(tǒng)備份更加頻繁,也許每天都需要進(jìn)行備份,或使用cron程序自動(dòng)定期運(yùn)行某個(gè)程序的方法來(lái)備份數(shù)據(jù)。
數(shù)據(jù)備份策略
不 管系統(tǒng)多么可靠,總會(huì)發(fā)生一些意想不到的事情,致使系統(tǒng)數(shù)據(jù)丟失。因此使用備份來(lái)保護(hù)數(shù)據(jù)不丟失是一種非常重要的手段,尤其在系統(tǒng)數(shù)據(jù)非常重要的時(shí)候。經(jīng) 常進(jìn)行數(shù)據(jù)備份能夠減少偶然破壞造成的損失,保證系統(tǒng)能夠從錯(cuò)誤中恢復(fù)正常運(yùn)行。備份不應(yīng)該成為一個(gè)長(zhǎng)時(shí)間痛苦的事情,但它是作為系統(tǒng)管理必不可少的工 作,在著手之前進(jìn)行詳細(xì)的考慮和計(jì)劃是應(yīng)該的。
在進(jìn)行備份之前,首先要選擇合適的備份策略,這將決定何時(shí)需要備份,以及出現(xiàn)故障時(shí)進(jìn)行恢復(fù)的方式。通常使用的備份方式有三種:
完全備份: 每隔一定時(shí)間就對(duì)系統(tǒng)進(jìn)行一次全面的備份,這樣在備份間隔期間出現(xiàn)數(shù)據(jù)丟失等問(wèn)題,可以使用上一次的備份數(shù)據(jù)恢復(fù)到前次備份時(shí)數(shù)據(jù)狀況。這是最基本的備份 方式,但是每次都需要備份所有的數(shù)據(jù),并且每次備份的工作量也很大,需要大量的備份介質(zhì),因此這種備份不能進(jìn)行的太頻繁,只能每隔一段較長(zhǎng)時(shí)間才進(jìn)行一次 完整的備份。但是這樣一旦發(fā)生數(shù)據(jù)丟失,只能恢復(fù)到上次備份的數(shù)據(jù),這期間內(nèi)更新的數(shù)據(jù)就有可能丟失。
增量備份: 首先進(jìn)行一次完全備份,然后每隔一個(gè)較短時(shí)間進(jìn)行一次備份,但僅僅備份在這個(gè)期間更改的內(nèi)容。當(dāng)經(jīng)過(guò)一個(gè)較長(zhǎng)的時(shí)間后再重新進(jìn)行一次完全備份,開始前面的 循環(huán)過(guò)程。由于只有每個(gè)備份周期進(jìn)行一次完全備份,其他只進(jìn)行更新數(shù)據(jù)的備份,因此工作量小,可以進(jìn)行頻繁的備份。例如以一個(gè)月為一個(gè)周期,一個(gè)月進(jìn)行一 次完全備份,每天晚上0點(diǎn)進(jìn)行這一天改變的數(shù)據(jù)備份。這樣一旦發(fā)生數(shù)據(jù)丟失,首先恢復(fù)到前一個(gè)完全備份,然后按日期一個(gè)一個(gè)恢復(fù)每天的備份,就能恢復(fù)到前 一天的情況。這種備份方法比較經(jīng)濟(jì)。
累計(jì)備份:這種備份方法與增量備份相似,首先每月進(jìn)行一次完全備 份,然后每天進(jìn)行一次更新數(shù)據(jù)的備份。但不同在于,增量備份是備份該天更改的數(shù)據(jù),而累計(jì)備份是備份從上次進(jìn)行完全備份后更改的全部數(shù)據(jù)文件。一旦發(fā)生數(shù) 據(jù)丟失,可以使用前一個(gè)完全備份恢復(fù)到前一個(gè)月的狀態(tài),再使用前一個(gè)累計(jì)備份恢復(fù)到前一天的情況。這樣做的缺點(diǎn)是每次做累計(jì)備份工作的任務(wù)比增量備份的工 作量要大,但好處在于,增量備份每天都備份,因此要保存數(shù)據(jù)備份數(shù)量太多,而累計(jì)備份則不然,只需保存一個(gè)完全備份和一個(gè)累計(jì)備份就可以恢復(fù)故障以前的狀 態(tài)。另外在進(jìn)行恢復(fù)工作時(shí),增量備份要順序進(jìn)行多次備份的恢復(fù),而累計(jì)備份只需兩次恢復(fù),因此它的恢復(fù)工作相對(duì)簡(jiǎn)單。
增量備份和累計(jì)備份 都能以比較經(jīng)濟(jì)的方式對(duì)系統(tǒng)進(jìn)行備份,在這些不同的策略之間進(jìn)行選擇不但與系統(tǒng)數(shù)據(jù)更新的方式相關(guān),也依賴于管理員的習(xí)慣。通常在系統(tǒng)數(shù)據(jù)更新不是太頻繁 的話,可以選用更新備份的方式。但是如果系統(tǒng)數(shù)據(jù)更新太快,使每個(gè)備份周期后的幾次累計(jì)備份的數(shù)據(jù)量相當(dāng)大。這時(shí)候可以考慮增量備份或混用累計(jì)備份和增量 備份的方式,或者縮短備份周期。
數(shù)據(jù)備份命令
在Linux系統(tǒng)中常用的備份命令通常有下面幾種:
1.使用tar命令
Linux的實(shí)用程序tar最初是為了制作磁帶存檔而設(shè)計(jì)的(把文件和目錄復(fù)制到磁帶中,然后從存檔中提取或恢復(fù)文件),而現(xiàn)在的應(yīng)用中可以把它用于任何設(shè)備,它是數(shù)據(jù)備份中最常用的命令之一。
下面具體介紹tar命令的使用方法:
(1)格式:tar 參數(shù) ......
(2)參數(shù):
c: 創(chuàng)建備份(Create)
v: 表示回顯模式(Verbose),將產(chǎn)生一系列備份的文件列表
f: 指定使用的備份文件,它后面的參數(shù)為輸出的備份文件名
x: 展開備份文件
t: 顯示備份文件的內(nèi)容
T: 后面跟隨一個(gè)文件參數(shù),指定從這個(gè)文件中讀取要備份的各個(gè)文件的路徑。如果不使用T參數(shù),那么就需要一個(gè)參數(shù),指明進(jìn)行備份文件和目錄的路徑
Z: 使用壓縮方式創(chuàng)建和解開備份文件,這是GNU的新版tar的功能,需要同時(shí)安裝gzip。
例如:
$ tar cvf backup.tar /etc
上 面的命令將/etc下的所有文件打包成tar存檔文件backup.tar。tar的第一個(gè)參數(shù)“cvf”,是tar的命令參數(shù),“c”告訴tar創(chuàng)建一 個(gè)存檔文件;“v”選項(xiàng)迫使tar采用冗長(zhǎng)模式,即在存檔時(shí)打印每個(gè)文件名;“f”選項(xiàng)告訴tar下一個(gè)參數(shù)backup.tar是創(chuàng)建的存檔文件名。
下面一行的命令將tar文件backup.tar解開并放到當(dāng)前工作目錄下。必須說(shuō)明的是這樣做是有危險(xiǎn)的,因?yàn)樵趶膖ar文件中解開文件時(shí),舊文件將被覆蓋。
$ tar xvf backup.tar
在解開tar文件之前,知道在何處打開文件是非常重要的。例如,假設(shè)存檔以下文件:/etc/hosts,/etc/group和/etc/passwd。如果用下述命令:
$ tar cvf backup.tar /etc/hosts /etc/group /etc/passwd
目錄/etc會(huì)被加到每個(gè)文件名前。為了將文件展開到正確位置,需要用下述命令:
$ cd /
$ tar xvf backup.tar
這是因?yàn)槲募拇鏅n文件中抽取出路徑名,如果用下述命令存檔文件:
$ cd /etc
$ tar cvf hosts group passwd
這樣目錄名就不存在存檔文件中,因此需要在展開文件之前用“cd /etc”命令進(jìn)入目錄etc。由此可見,tar文件的創(chuàng)建方式與在何處展開有很大關(guān)系。
命令:
$ tar tvf backup.tar
在解開tar文件之前顯示tar文件的索引,用這種方式可以看到存檔文件中與文件名有關(guān)的目錄名,從而在正確位置上展開存檔文件。
2.gzip和compress 命令
與MS-DOS的存檔程序不同, tar在存檔過(guò)程中并不壓縮文件。因此,如果存儲(chǔ)兩個(gè)1MB的文件,那么tar文件大小為2MB,gzip命令用來(lái)壓縮文件(被壓縮的文件并不需要是tar格式)。
例如:
$ gzip -9 backup.tar
壓縮backup.tar文件,產(chǎn)生的文件為backup.tar.gz,開關(guān)“-9”告訴gzip用最高的壓縮比。gunzip命令用來(lái)解開一個(gè)gzip壓縮的文件,用“gzip -d”也可以達(dá)到同樣效果。
例如:
$ gunzip backup.tar.gz
$ gzip -d backup.tar.gz
3. 聯(lián)合使用
介紹了這些命令之后,我們來(lái)嘗試組合使用這些命令。為了壓縮存儲(chǔ)一組文件,可以用下述命令:
$ tar cvf backup.tar /etc
$ gzip -9 backup.tar
結(jié)果是形成文件backup.tar.gz。展開該文件時(shí),用相反的命令:
$ gunzip backup.tar.gz
$ tar xvf backup.tar
tar命令還包括“z”選擇項(xiàng),它會(huì)自動(dòng)采用gzip壓縮算法來(lái)聯(lián)機(jī)壓縮/解壓文件。例如,下列命令:
$ tar cvfz backup.tar.gz /etc
上面一行的命令等價(jià)于:
$ tar cvf backup.tar /etc
$ gzip backup.tar
而命令:
$ tar xvfz backup.tar.Z
可以用來(lái)代替下述命令:
$ uncompress backup.tar.Z
$ tar xvf backup.tar
案例實(shí)驗(yàn)
案例:使用tar進(jìn)行備份。
選定了備份方式之后,可以使用tar、cpio、dump等備份工具軟件將數(shù)據(jù)備份到磁帶上。對(duì)于一般的備份,使用tar就足夠了。tar能夠創(chuàng)建備份文檔,能夠備份到磁帶上或者產(chǎn)生一個(gè)文件,如:
$ tar cvf root.tar /root
將/root目錄下的所有文檔備份到root.tar文件中,root.tar為指定輸出的備份文件,/roo t指出要做備份的目錄。如果要備份到磁帶上,將輸出的備份文件指定為磁帶設(shè)備文件即可:
$ tar cvf /dev/rmt/0h /root
如果設(shè)置了環(huán)境變量TAPE,則可以不使用選項(xiàng)“f”指定輸出磁帶設(shè)備名字:
$ TAPE=/dev/rmt/0h; export TAPE
$ tar cv /root
要進(jìn)行增量備份,必須找出哪些文件在這個(gè)期間進(jìn)行更新。這個(gè)任務(wù)可以由命令find來(lái)完成,例如查找過(guò)去七天更改的文件,并使用tar的“-T”參數(shù)制定進(jìn)行備份的文件,命令如下:
$ find / -mtime -7 -print > /tmp/filelist
$ tar -c -T /tmp/filelist -f /dev/rmt/0h
由 于要使用find來(lái)找出需要備份的文件列表,那么就需要利用文件的修改時(shí)間進(jìn)行查詢,需要使用“-mtime” 參數(shù)。另一個(gè)更有用的參數(shù)是“-newer”,可以查找出所有比某個(gè)文件更新的文件,由于備份是周期進(jìn)行的,因此可以在完全備份之后生成一個(gè)標(biāo)記文件,那 么所有比這個(gè)文件新的文件都需要進(jìn)行更新備份。
$ find / -newer full_back_tag_file -print > /tmp /filelist
進(jìn) 行數(shù)據(jù)備份需要定期執(zhí)行,不能完全依賴于管理員手工進(jìn)行備份。備份也應(yīng)該選擇在系統(tǒng)比較空閑時(shí)進(jìn)行,以免影響系統(tǒng)的正常處理任務(wù)。通常可以選擇半夜 0:00點(diǎn)之后進(jìn)行備份,這樣更不能將這個(gè)任務(wù)由管理員手工完成了。但Linux提供了定時(shí)服務(wù)cron程序,能夠在確定的時(shí)間中執(zhí)行一系列任務(wù),因此數(shù) 據(jù)備份必須和cron合作來(lái)完成,或者使用/etc下的daily,weekly,monthly文件做定時(shí)備份的操作。
posted on 2011-08-25 12:56
MEYE 閱讀(11660)
評(píng)論(2) 編輯 收藏