Ubuntu桌面生存指南四:Ubuntu系統(tǒng)備份恢復(fù)升級策略
本文作者張佳偉(@ghosert)繼續(xù)上篇的內(nèi)容續(xù)寫的,在最初使用開發(fā)者系統(tǒng)的時(shí)候,無論是構(gòu)建Ubuntu系統(tǒng)基礎(chǔ)設(shè)施,還是安裝配置各種軟件都是一個(gè)費(fèi)心勞力的過程:由于開發(fā)者系統(tǒng)是一個(gè)需要付出腦力成本換取高效率的系統(tǒng),它因此被設(shè)計(jì)成一個(gè)高可定制又極度自由的系統(tǒng),暫且不說你可以自由地從編譯源碼的方式配置安裝整個(gè)操作系統(tǒng),即便是大多數(shù)的常用軟件例如:vi,emacs等等通過變更配置文件都可以玩出無數(shù)的操作方式,用戶需要花費(fèi)時(shí)間去變更嘗試這些配置,使得操作這些軟件的方式***自己的習(xí)慣,達(dá)到高效的目的。因此經(jīng)過一段時(shí)間調(diào)配,每一個(gè)Linux用戶都會有一個(gè)自己專屬的高效系統(tǒng),有1000個(gè)用戶就會有1000個(gè)專屬高效系統(tǒng),每一個(gè)系統(tǒng)上安裝的軟件和配置方法都各不一樣,并且每一個(gè)用戶在打造這個(gè)專屬系統(tǒng)的過程中都會耗費(fèi)大量的精力和時(shí)間。
丟失自己的專屬系統(tǒng),就意味著時(shí)間精力的丟失,對于一個(gè)長期使用Linux的用戶更是如此:用戶已經(jīng)在這個(gè)系統(tǒng)上積累太多軟件和操作習(xí)慣,如果因?yàn)橄到y(tǒng)崩潰而需要從頭開始配置一個(gè)全新的系統(tǒng),在事前又沒有任何備份措施,那剩下的簡直就是一場災(zāi)難。這也是有經(jīng)驗(yàn)的Linux用戶很注意備份的原因。介于此,筆者在本章節(jié)結(jié)合自己的一些經(jīng)驗(yàn)來介紹一下Ubuntu系統(tǒng)的備份恢復(fù)以及升級策略。
這些備份恢復(fù)策略不僅適用于Ubuntu,對于使用其他發(fā)行版的Linux用戶,同樣可以參閱以下內(nèi)容,對其中的步驟稍加改造即可。
腳本恢復(fù)策略 — 完全格式化更新
我們前面介紹過Ubuntu系統(tǒng)的一個(gè)特色就是可以從自己的源通過apt-get命令來下載需要的軟件,因此用戶可以建立一個(gè)腳本文件,通過寫入常用的apt-get install命令的方式來備份需要的軟件(參見上一篇中的在云端保存一個(gè)軟件安裝的腳本部分),同時(shí)在這個(gè)腳本文件中加入某些需要手工干預(yù)的個(gè)性化配置的具體步驟,例如:更改激活拼音輸入法快捷鍵的具體步驟(大多數(shù)拼音輸入法搶占了ctrl+space,如果不更改,開發(fā)者用戶就無法在諸如Eclipse這樣的IDE里使用這個(gè)快捷鍵激活智能代碼提示的功能),又例如:你可能對 Firefox 的默認(rèn)字體并不滿意,需要替換一下,這些詳細(xì)的步驟都應(yīng)該以注釋的形式記錄在這個(gè)腳本里,如果這些步驟實(shí)在太過繁瑣,也可以在配置以后,找到對應(yīng)的配置文件,直接保存在Dropbox里,方便今后直接從云端恢復(fù)這些配置到本機(jī)。例如,你自己定制化了Vim的行為并且加裝了Vim插件,那你只需要將~/.vimrc ~/.vim備份在云端即可。
所以一旦建立了這樣一個(gè)腳本文件,即使需要重裝系統(tǒng)或者面對一臺全新的計(jì)算機(jī),只需要執(zhí)行這個(gè)腳本文件,查看腳本里的注釋記錄,就可以保證軟件沒有丟失,配置軟件的步驟可以還原,重要的資料都被存儲在云端:Dropbox(二進(jìn)制文件),GitHub(文本文件,以后詳述)。自然這個(gè)策略的前提是:你在使用系統(tǒng)的時(shí)候必須保持勤于更新腳本的習(xí)慣,用于日后的系統(tǒng)恢復(fù)。
優(yōu)點(diǎn)
這種方法比較適用于希望將現(xiàn)有系統(tǒng)遷徙到更高版本的情形。例如:遷徙 Ubuntu 10.04 至 12.04的時(shí)候,在格式化系統(tǒng),重新安裝12.04以后,用戶就可以通過這個(gè)腳本恢復(fù)原先計(jì)算機(jī)的面貌。并且由于Ubuntu源里的軟件版本和Ubuntu發(fā)行版版本之間存在對應(yīng)關(guān)系(例如:10.04源里的firefox版本可能在某個(gè)版本以后不再提供更新),如果12.04在目前還是一個(gè)比較新的LTS版本,那么就可以保證在12.04上使用apt-get install安裝的軟件版本都比較新。同時(shí)如果你大多數(shù)的配置恢復(fù)是通過還原具體步驟完成的,那么就有機(jī)會檢查這些步驟在新版本軟件上是否仍舊適用。也不會出現(xiàn)從云端恢復(fù)舊版本軟件的配置到新版本軟件以后無法適用的狀況,當(dāng)然理論上這也不是一個(gè)太大的問題,Linux下許多著名的軟件都非常尊重用戶的舊有習(xí)慣,輕易不會變更自己讀取配置文件的方式,大多數(shù)情況下恢復(fù)舊有軟件的配置到新版本不會出現(xiàn)太多狀況。
缺點(diǎn)
由于沒有采用全盤備份的方式,這種備份恢復(fù)策略的缺點(diǎn)同樣明顯,盡管可以保證在升級以后,計(jì)算機(jī)的原始面貌不會有任何丟失,但是相對來說,手動恢復(fù)許多軟件的配置仍舊需要投入相當(dāng)?shù)臅r(shí)間和精力,即使在備份策略完善的前提下,筆者通過這種方式將Ubuntu 10.04升級到12.04的時(shí)候仍然花費(fèi)了整整5天的國慶長假。因此個(gè)人建議只在每隔兩年發(fā)布一次的LTS版本出現(xiàn)的時(shí)候才做這樣的升級,以此保證計(jì)算機(jī)的全新狀態(tài)。#p#
腳本恢復(fù)策略 — 沿用/home分區(qū)數(shù)據(jù)
我們前面提到過獨(dú)立/home分區(qū)的原因在于用戶大多數(shù)重要的個(gè)性化配置和數(shù)據(jù)都保存在這個(gè)目錄,以至于Ubuntu官方的云端備份軟件Ubuntu One在默認(rèn)情況下就是協(xié)助用戶備份/home分區(qū)所在的數(shù)據(jù)到云端。因此如果可以在重裝系統(tǒng)的時(shí)候沿用這個(gè)分區(qū)的數(shù)據(jù),無疑可以為我們節(jié)省大量的數(shù)據(jù)恢復(fù)和配置恢復(fù)的時(shí)間,更何況某些數(shù)據(jù)如電影,照片可能占據(jù)幾百個(gè)G的空間,沒有獨(dú)立/home分區(qū),用戶在重裝系統(tǒng),格式化分區(qū)的時(shí)候根本就沒有可以容納那么大數(shù)據(jù)的第二個(gè)媒介做臨時(shí)的備份,除非你有第二塊硬盤。另一方面在恢復(fù)系統(tǒng)的時(shí)候因?yàn)榕渲煤蛿?shù)據(jù)仍舊在/home目錄,你只需要執(zhí)行前面提到的腳本重新安裝軟件即可,無需手工還原配置軟件的步驟。
為了使用這種恢復(fù)策略,在***安裝Ubuntu的時(shí)候可以參考上一篇博客的分區(qū)推薦方案獨(dú)立出/home分區(qū),在使用系統(tǒng)的過程中時(shí)刻保證只在這個(gè)目錄下存儲自己重要的數(shù)據(jù)和配置,如果一定有一些特例狀況也一定要在恢復(fù)腳本中加以記錄,在云端有另外的備份措施。只要你的/home分區(qū)沒有被損壞,再次恢復(fù)的代價(jià)就相當(dāng)?shù)男?。重裝系統(tǒng)的時(shí)候可以格式化 / 目錄所掛載的分區(qū),但是記得在以下Installation type界面上千萬不要選擇格式化 /home 所在的分區(qū),否則就無法沿用這個(gè)分區(qū)的數(shù)據(jù)。
優(yōu)點(diǎn)
顯而易見,這種策略很經(jīng)濟(jì),省去很多的麻煩,是非常常見的系統(tǒng)恢復(fù)策略,同樣也適用于在重新安裝一個(gè)高版本的Ubuntu以后恢復(fù)計(jì)算機(jī)原先的面貌,例如從10.04LTS升級至12.04LTS。
缺點(diǎn)
沿用過去/home分區(qū)的數(shù)據(jù)畢竟在保留了數(shù)據(jù)的同時(shí)也保留了舊有的配置和目錄結(jié)構(gòu),如前所述雖然在匹配新版本軟件的時(shí)候,這不會是一個(gè)太大的問題,但是一旦出現(xiàn)狀況,例如兩個(gè)軟件版本之間的差異過大,導(dǎo)致新版本無法正常工作在舊配置或者目錄結(jié)構(gòu)上,用戶要有一定解決問題的能力,仍然需要通過查看腳本注釋手動還原配置步驟。#p#
tar包全盤備份恢復(fù)策略
上述兩種恢復(fù)策略免不了還是需要在分區(qū)以后,插入啟動U盤或者光盤,從頭開始安裝操作系統(tǒng)本身,并且安裝完操作系統(tǒng)以后繼續(xù)安裝軟件,恢復(fù)配置,熟悉Windows下大名鼎鼎的Ghost的同學(xué)一定在想,Ubuntu下是否也有這種一站式的全盤備份方案:無論計(jì)算機(jī)系統(tǒng)當(dāng)前的狀態(tài),我可以對整個(gè)系統(tǒng)的每一個(gè)字節(jié)都做數(shù)據(jù)備份,當(dāng)需要恢復(fù)系統(tǒng)的時(shí)候甚至都不必再次安裝Ubuntu本身就可以把當(dāng)初備份的那個(gè)狀態(tài)復(fù)原到新的機(jī)器或者格式化以后的當(dāng)前機(jī)器上,甚至是虛擬機(jī)上。這也是一般公司的IT部門在幫員工重裝機(jī)器的時(shí)候最常用的策略,沒有其它原因,就是因?yàn)檫@種方式最快捷。備份恢復(fù)一個(gè)系統(tǒng)的時(shí)間不會超過一個(gè)小時(shí)。
優(yōu)點(diǎn)
最迅速快捷的備份恢復(fù)方式,可以通過刻錄母盤的方式在各處恢復(fù)自己的備份。你既可以在一臺物理機(jī)上做備份恢復(fù)到另一臺物理機(jī)或者虛擬機(jī),你甚至也可以將一臺虛擬機(jī)里的備份恢復(fù)到一臺物理機(jī)或者另一臺虛擬機(jī)上,非常的靈活方便。
缺點(diǎn)
采用這種方式的一個(gè)問題在于,如果需要還原的目標(biāo)機(jī)器和做備份的源機(jī)器硬件配置差異過大,可能會發(fā)生恢復(fù)以后某些驅(qū)動程序工作不正常的狀況,例如計(jì)算機(jī)沒有聲音,或者圖形分辨率特別低,無法聯(lián)網(wǎng)等狀況。這個(gè)時(shí)候需要用戶自行嘗試解決。第二個(gè)問題在于由于全盤備份,意味著如果你備份的是10.04的系統(tǒng),那你也只能恢復(fù)到10.04的系統(tǒng),這種恢復(fù)方式?jīng)]有辦法升級你的Ubuntu到更高的版本。第三個(gè)問題:一定的學(xué)習(xí)實(shí)踐成本,以下就我個(gè)人的實(shí)踐經(jīng)驗(yàn)提供tar包全盤備份的基本步驟和原理,也許你在網(wǎng)絡(luò)上可以找到更方便的腳本或者備份軟件替代這些工作,但是如果遇到問題回到這些具體的步驟和原理可以幫助你了解到底是哪里出了問題,怎么解決這些問題。
1. 全盤備份
得益于Linux系統(tǒng)強(qiáng)大的命令行和系統(tǒng)設(shè)計(jì),全盤備份一個(gè)Ubuntu系統(tǒng)的基本原理相當(dāng)簡單:使用tar命令打包必要的文件目錄即可,也就是說備份系統(tǒng)和備份數(shù)據(jù)基本沒有區(qū)別。
新建一個(gè)腳本文件BACKUP_SYSTEM.sh,在其中添加以下內(nèi)容:
- mkdir ~/BACKUP_SYSTEM
- sudo tar --exclude /proc --exclude /mnt --exclude /tmp --exclude /media --exclude /home/jiawzhang/Downloads --exclude /home/jiawzhang/Templates --exclude '/home/jiawzhang/VirtualBox VMs' --exclude /home/jiawzhang/BACKUP_SYSTEM -jpcvf ~/BACKUP_SYSTEM/Ubuntu-12.04-20121114-home-pc.tar.bz2 /
開啟終端運(yùn)行 sh BACKUP_SYSTEM.sh 開始備份。取決于用戶備份數(shù)據(jù)的多少和硬件配置的好壞,備份的時(shí)長會有所不同。在筆者本機(jī)上,去除非必要目錄的全盤備份花費(fèi)了大約1個(gè)小時(shí),把 40G 的資料壓縮在 9G 大小的壓縮包內(nèi)。如果你想時(shí)刻了解壓縮的進(jìn)度,可以開啟另一個(gè)終端,運(yùn)行以下命令:
- watch -d -n 5 ls -alh ~/BACKUP_SYSTEM/
2. 全盤恢復(fù)
恢復(fù)系統(tǒng)的步驟會比備份繁瑣許多,以下是主要步驟,我會盡量解釋每個(gè)步驟的含義。
●確保事先備份的壓縮包在某個(gè)分區(qū)可以被訪問到,這里假設(shè)你的備份壓縮包位于/home/jiawzhang/BACKUP_SYSTEM/UBUNTU-2012-02-05.tar.bz2
●通過Ubuntu的啟動U盤或者光盤重啟電腦,進(jìn)入試用Ubuntu的模式。
●在試用模式的Ubuntu中開啟終端,運(yùn)行命令
- sudo su -
●運(yùn)行命令
- sudo gparted
- sudo apt-get install gparted
●解壓備份壓縮包
- mkdir /tmp/root
- mkdir /tmp/root2
- mount /dev/sda1 /tmp/root
- mount /dev/sda2 /tmp/root2
- cd /tmp/root2/jiawzhang/BACKUP_SYSTEM/
- sudo tar -jpxvf UBUNTU-2012-02-05.tar.bz2 -C /tmp/root
你應(yīng)該可以查看到類似 /tmp/root/etc, /tmp/root/home/ 這樣的目錄,它們對應(yīng)的目錄就是原先的 /etc, /home。我們下面的步驟會指定啟動系統(tǒng)的時(shí)候把 sda1 分區(qū)掛載回 / 目錄,sda2分區(qū)掛載回 /home 目錄,這樣在系統(tǒng)的目錄結(jié)構(gòu)就完全恢復(fù)了。另外由于/home目錄對應(yīng)的 sda2 分區(qū)之前沒有進(jìn)行過格式化操作,此時(shí)你可以選擇刪除/tmp/root2/jiawzhang/下除了BACKUP_SYSTEM以外的所有數(shù)據(jù),然后運(yùn)行:
- cp /tmp/root/home/. /tmp/root2/ -r rm /tmp/root/home -rf
●恢復(fù)分區(qū)的 GRUB/MBR 信息
經(jīng)過格式化,分區(qū)等等步驟以后,即便你是在現(xiàn)有硬盤上恢復(fù)自己的系統(tǒng),分區(qū)的 uuid 都可能已經(jīng)被改變,因此當(dāng)初備份在壓縮備份包里的啟動引導(dǎo)信息諸如:GRUB/MBR都已經(jīng)不再和目前實(shí)際的信息相匹配,我們因此要做修復(fù)工作。
仍舊在 live ubuntu 模式下運(yùn)行:
- $ sudo add-apt-repository ppa:yannubuntu/boot-repair
- $ sudo apt-get update
- $ sudo apt-get install -y boot-repair
- $ sudo boot-repair
- 1 $ ls -al /dev/disk/by-uuid
- # / was on /dev/sda1 during installation
- UUID=f381f8cd-ca11-4227-b9ce-8de330bf0e9f / ext4 errors=remount-ro 0 1
- # /home was on /dev/sda2 during installation
- UUID=b4b376c7-9ef0-48dc-9f50-28decd899190 /home ext4 defaults 0 2
- # swap was on /dev/sda3 during installation
- UUID=d770aa08-a3f3-4469-a682-f161cff16135 none swap sw 0 0
●重建系統(tǒng)目錄
這些目錄就是我們當(dāng)初做備份時(shí)加在 –exclude 參數(shù)后面的目錄。
- mkdir /tmp/root/proc /tmp/root/mnt /tmp/root/tmp /tmp/root/media
- chmod 777 /tmp/root/tmp
●重啟計(jì)算機(jī)
關(guān)閉計(jì)算機(jī),幷從硬盤重啟計(jì)算機(jī),一切順利的話,全盤恢復(fù)已經(jīng)成功,至此,你可以別無二致的使用備份當(dāng)時(shí)的專屬高效系統(tǒng)了。
全盤備份恢復(fù)的操作對初學(xué)者來說有一定的風(fēng)險(xiǎn),如果擔(dān)心操作不當(dāng)丟失數(shù)據(jù),可以先在虛擬機(jī)環(huán)境里練習(xí),筆者實(shí)踐過這種方法對虛擬機(jī)一樣適用。#p#
遷徙wubi系統(tǒng)到物理分區(qū)
另外有一些用戶最初是在Windows上通過Wubi的方式試用Ubuntu,***決定徹底拋棄Windows的時(shí)候才發(fā)覺已經(jīng)在Wubi里積累了太多的軟件和配置,重裝系統(tǒng)的代價(jià)很大,筆者自己最初也是在Wubi系統(tǒng)中操練Ubuntu,一年半以后才正式遷移到獨(dú)立分區(qū),徹底告別Windows。所以這里簡要介紹一下如何將一個(gè)Wubi系統(tǒng)移植到物理分區(qū)。
●新建分區(qū)
在Windows下使用分區(qū)工具從現(xiàn)有的分區(qū)中劃分出兩個(gè)分區(qū),假設(shè)分別叫做 /dev/sda5 用作安裝系統(tǒng), /dev/sda6 用作 swap 分區(qū)。(如果需要獨(dú)立的/home分區(qū),可以再多分一個(gè))
●進(jìn)入Wubi系統(tǒng)
●下載運(yùn)行移植腳本
點(diǎn)擊下載Wubi移植腳本后解壓運(yùn)行
- sudo zxvf wubi-move.tar.gz
- sudo bash wubi-move.sh /dev/sda5 /dev/sda6
●重啟計(jì)算機(jī)
一切順利的話,系統(tǒng)會出現(xiàn)Grub引導(dǎo)菜單,你可以通過選擇菜單選擇進(jìn)入Windows還是物理分區(qū)上的Ubuntu系統(tǒng),這個(gè)Ubuntu系統(tǒng)的內(nèi)容和你的Wubi系統(tǒng)也同樣地別無二致。
這個(gè)腳本的使用方法和更新也在持續(xù)進(jìn)行中,目前支持從Ubuntu 8.04 到 12.04 之間的所有版本。這里只是做了一些摘要,讀者可以自行訪問Ubuntu Forums查看這個(gè)腳本更多的用法和其它詳細(xì)信息。#p#
Ubuntu系統(tǒng)升級策略
頻率
Ubuntu官方一直以來每隔半年就會發(fā)布自己的新版本,對于用戶來說實(shí)質(zhì)上是一個(gè)不小的負(fù)擔(dān),往往還沒有適應(yīng)現(xiàn)在的版本,新的版本又推送過來,所以我個(gè)人的意見是不用追新,只升級兩年一次的LTS版本即可。
時(shí)機(jī)
我們之前還說過Ubuntu某個(gè)版本源里的軟件版本都會和Ubuntu自己的版本存在對應(yīng)關(guān)系,例如:Ubuntu 10.04上的輸入法軟件iBus只會更新到1.2版本,如果你想使用***的1.4版本,要么自己去編譯安裝,要么設(shè)法說服軟件作者或者其它愛好者打包更新Ubuntu10.04源里的iBus版本或者找第三方源,相當(dāng)?shù)牟环奖?。對于一個(gè)太早的發(fā)行版很多軟件作者沒有動力和熱情再去為其做兼容性開發(fā),測試和更新源的工作。所以當(dāng)你發(fā)現(xiàn)自己手上的發(fā)行版源里的軟件都過于腐舊,互相之間出現(xiàn)越來越多的兼容性問題的時(shí)候,這也是一個(gè)提醒你應(yīng)當(dāng)對現(xiàn)有系統(tǒng)做一次升級的信號。舉我自己的例子,兩個(gè)月前決定從10.04升級到12.04就是因?yàn)?0.04下的拼音輸入法fcitx和firefox較新版本之間存在沖突,總是導(dǎo)致頁面假死。詢問fcitx的源打包者又無果:不愿意更新10.04下的fcitx版本解決這個(gè)問題,才有了這次升級。
方式
雖然Ubuntu自己也提供了’sudo apt-get dist-upgrade’這樣的命令做發(fā)行版之間的大升級,但是從一些用戶反饋來看效果并不理想,采用這種方式升級的系統(tǒng)總會存在各種問題。因此還是建議讀者可以參照本文前面的備份恢復(fù)策略進(jìn)行跨大版本的升級,一般這樣的升級不會有太多問題,除非某些軟件的差異過大,用戶自行適應(yīng)一段時(shí)間即可。另一方面在 Ubuntu Server 上做大版本升級的時(shí)候,我又推薦使用’sudo apt-get dist-upgrade’這種方式,其一沒有GUI軟件的升級會更平滑,其二以我自己的實(shí)踐:在 Server 端做這樣的升級會相當(dāng)順利,運(yùn)行apt命令以后,只用了半小時(shí)就完成了Ubuntu版本的升級和全部軟件的更新。
未完待續(xù)……