? 上一篇下一篇 ?

Linux系統的后悔藥,如何快速恢復出錯系統至原先狀態

     新手在學習Linux系統的時候,難免會遇到命令輸錯,或系統出錯的難題。那么如何快速解決呢?本文就先給你一個后悔藥,讓你快速備份并恢復Linux系統。本文將以Ubuntu為例,在這之前,你需要一臺服務器,你可以免費使用集群云開發者實驗室進進行試驗。

      為了避免重裝后又一次對系統進行大量的配置,于是我決定對系統進行拷貝。然后在裝后進行覆蓋還原(ps:這是linux系統相比windows一個非常大的方便,不用用恢復軟件。直接覆蓋原來系統就好)。于是上網搜了系統的重裝與還原,

       呃,實際上這并不是一項系統功能,至少不應該在名字里帶上“系統”這兩個字,因為你不會在任何一個Linux系統發行版的系統菜單中找到所謂的系統恢復(System Restore)功能。你要做的是找到一個合適的應用程序并安裝才可以。絕大多數的系統恢復應用程序和Windows中系統恢復功能的工作原理是相同的,在特定的時間節點為你的系統創建快照文件,然后在系統出現問題的時候,允許你回滾到選定的時間點。
在介紹這些應用程序之前,讓我們先簡單的了解一下系統快照究竟是什么?
    系統快照與備份的區別
拋開這兩者的名字不同,總的來說,備份(Backup)是指將文件復制出一份副本并且保存到另一個位置。備份很少會將整個磁盤備份,那樣做通常是叫做磁盤鏡像或者是磁盤克隆,這種類型的備份實際上是對整個磁盤做了一個鏡像,包括用戶數據,操作系統,啟動分區等等。磁盤鏡像可以被用在裸機恢復工作中。這時候你就可以在不需要安裝操作系統情況下,將一塊硬盤的全部內容復制到另一臺電腦上。
而系統快照(Snapshot)則是在特定的時間節點上保存文件系統的狀態,并且保存在與文件系統相同的存儲設備上。通常系統快照中會包含所有的目錄與文件信息,或者至少是保存了操作系統所需要的文件信息。

一、備份
當然,能夠還原服務器上所做更改的最簡單、最安全的方法是對重要文件執行常規例行備份。

Linux系統上有大量備份的軟件。我們要研究備份工具之間的差異,找出最適合您需求的工具。更重要的是定期驗證您的備份,以確保它們正常執行。

備份提供了一種非常好的方法來恢復服務器的損壞。只要復制的重要數據保存在其他服務器,它們就可以在數據損壞或刪除時發揮效用。

備份包括完全備份(完全備份所有數據),差異備份(備份自上次全備份以來已更改的每個文件)和增量備份(備份自上次完全備份或差異備份以來文件中的數據更改)。

這些級別的組合通常彼此聯合使用以完全備份文件,通常,您可以恢復單個文件,而無需還原整個文件系統。如果您不小心刪除或修改了文件,可以用備份快速恢復。

二、版本控制
與備份有些類似的策略是版本控制。雖然不是備份整臺計算機的理想解決方案,但如果您只想將文件恢復到以前的狀態,則版本控制可能正是您所需要的。

版本控制系統,如git和mercurial,允許您跟蹤文件的更改。這意味著,如果您將配置目錄/etc放在版本控制下,則可以輕松地在由于更改而導致文件損壞的情況下還原更改。

簡而言之,您可以使用以下命令在Ubuntu上安裝git:

sudo apt-get update
sudo apt-get install git


安裝完成后,您需要輸入以下內容來設置一些配置選項:

git config --global user.name "your_name"
git config --global user.email "your_email"


完成此操作后,切換到要跟蹤更改的目錄。我們將使用此示例中的目錄。另一個置于版本控制之下的好地方是您的主目錄。我們可以通過輸入以下內容來初始化git存儲庫:/etc

cd /etc
sudo git init

然后,您可以通過輸入以下內容添加此目錄(和子目錄)中的所有文件:

sudo git add .

通過輸入以下內容來提交更改:

git commit -m "Initial commit"

您的文件現在將受版本控制。當您對此目錄中的文件進行更改時,您將需要重新運行最后兩個命令(使用不同的內容而不是“Initial commit”)。

然后,您可以通過日志查找哈希值將文件還原到以前的狀態:

git log

commit 7aca1cf3b5b19c6d37b4ddc6860945e8c644cd4f
Author: root
Date:   Thu Jan 23 13:28:25 2014 -0500

    again

commit 4be26a199fd9691dc567412a470d446507885966
Author: root
Date:   Thu Jan 23 13:20:38 2014 -0500

    initial commit

然后通過下面的命令恢復文件,例如:

git checkout commit_hash -- file_to_revert

請記住,只有在準備好進行修改時才能定期提交git。

使用程序包管理器還原更改
有時,您可以使用apt包管理器進行一些更改。程序包管理器可以幫助您將程序包還原為默認設置。我們將在下面討論這些情況。

使用Apt卸載軟件包
有時,您安裝一個軟件包卻發現它不是您想要保留的東西。您可以通過輸入以下內容來刪除apt中的包:

sudo apt-get remove package

但是,上面的命令將使配置文件保持不變。但如果您嘗試從系統中完全刪除軟件包,則可以使用purge命令,如下所示:

sudo apt-get purge package

您可以使用autoremove apt命令卸載任何不再需要的自動安裝的依賴項:

sudo apt-get autoremove --purge

使用apt安裝軟件包時發生的另一個問題是“元軟件包”很難正確刪除。

元包是簡單的依賴列表的包。它們本身并沒有安裝任何東西,而是一個其他包的列表。很難以自動方式完全刪除。

一個可以提供幫助的工具就是deborphan包:

sudo apt-get install deborphan

刪除元數據包后,可以運行orphaner命令查找軟件包卸載所留下的孤立信息。這將幫助您找到未通過常規方法刪除的包。

查找雜散文件的另一種方法是通過mlocate包。安裝:

sudo apt-get install mlocate

之后,您可以通過以下命令來更新文件索引:

sudo updatedb

然后,您可以搜索包名稱,以查看引用該包的文件系統(apt索引之外)是否有其他位置。

locate package_name

您還可以通過檢查apt日志來查看元數據包安裝的文件:

sudo nano /var/lob/apt/history.log

三、恢復默認文件
有時,在配置期間,您需要更改配置文件,并希望恢復默認文件。

如果要將當前配置文件保留為備份,可以通過輸入以下內容將其復制:

sudo mv file file.bak

如果您沒有對相關目錄的寫入權限,則必須使用上述命令中的sudo。

刪除文件或將其移開后,您可以重新安裝軟件包并檢查是否缺少任何配置文件:

sudo apt-get -o Dpkg::Options="--force-confmiss" install --reinstall package_name

如果您不知道哪個軟件包負責需要還原的配置文件,則可以使用dpkg程序:

dpkg -S file_name

如果您只想執行某些安裝期間發生的初始程序包配置步驟以更改某些值,則可以使用下面的命令:

dpkg-reconfigure package_name

這將重新啟動最初安裝程序時的配置。

四、查找文件的默認權限
修改文件權限時會發生另一種常見情況。有時,您為了測試目的而更改文件的權限但是事后想要恢復其權限。

通過查找哪個包擁有文件,可以找出您的發行版打包文件的默認權限。您可以通過發出以下命令來執行此操作:

dpkg -S filename

這將告訴您與該文件關聯的包。例如,如果我們想要找出/etc/deluser.conf文件的包所有者,我們可以輸入:

dpkg -S /etc/deluser.conf

adduser: /etc/deluser.conf


如您所見,它告訴我們adduser包負責該文件。然后,我們可以通過更改為apt存檔來檢查該包的.deb文件:

cd /var/cache/apt/archive

在此目錄中,您將找到系統上安裝的軟件包的.deb文件。如果找不到與您正在使用的包的匹配的文件,則需要使用以下命令從存儲庫重新下載它:

sudo apt-get download package

如果我們的adduser包沒有.deb,我們可以通過輸入以下內容獲取一個:

sudo apt-get download adduser

一旦文件出現在該目錄中,我們可以通過輸入以下內容來查詢它安裝的文件的默認屬性:

dpkg -c file.deb

對于adduser程序,可能看起來如下:

dpkg -c adduser_3.113ubuntu2_all.deb

drwxr-xr-x root/root         0 2011-10-19 18:01 ./
drwxr-xr-x root/root         0 2011-10-19 18:01 ./etc/
-rw-r--r-- root/root       604 2011-10-19 18:01 ./etc/deluser.conf
drwxr-xr-x root/root         0 2011-10-19 18:01 ./usr/
drwxr-xr-x root/root         0 2011-10-19 18:01 ./usr/sbin/
-rwxr-xr-x root/root     35120 2011-10-19 18:01 ./usr/sbin/adduser
-rwxr-xr-x root/root     16511 2011-10-19 18:01 ./usr/sbin/deluser
. . .

     如您所見,我們可以驗證默認包是否為root設置讀/寫訪問權限,以及為所有其他用戶設置讀訪問權限。

結論
現在你應該有一些策略來扭轉你所犯的錯誤,并提出規劃相關的應急計劃。上面提到的五種方案都需要提前備份。