unix中利用Find命令備份根文件系統
在Unix操作系統中有很多命令可以用來備份文件。但是Unix操作系統中根文件系統是一種比較特殊的文件。通常情況下對這類文件進行備份的話,必須要卸載其他文件系統。因為根文件系統是其他文件系統的祖宗,如果不卸載的話,會同時備份其他文件系統中的文件。但是如果先卸載其他文件系統再進行備份的話,那么就會很麻煩。為此在find命令中提供了一個很有用的參數,可以幫助我們實現這個功能。
一、根文件系統備份的重要性及備份的難點。
當系統發生崩潰時,雖然可以通過重新安裝操作系統來恢復。但是這個工作量很大,因為需要重新安裝每個外部設備。在Unix操作系統中,安裝并配置每個外部設備的驅動程序是一件很麻煩的事情。如果系統工程師能夠在平時的工作中備份好根文件系統中的文件,那么在遇到系統故障時,即使需要重新安裝操作系統,那么也只需要安裝Unix操作系統的最小集合。然后把這些根文件系統中的配置文件恢復過去,那么就省去了配置外部設備的麻煩。
但是在備份根文件系統的時候,由于其地位的特殊性會遇到不少的麻煩。如無論在什么時候把外部設備添加到Unix操作系統中,或者無論什么時候將外部設備從系統中卸載掉,根文件系統中的配置文件都要發生變化。也就是說,根文件系統中的配置文件在不斷變化的。為此操作系統要能夠鑒別那些變化了的配置文件,然后有選擇的進行復制。否則的話,就會增加備份的工作量。其次由于根文件系統是其他文件系統的祖宗,為此對根文件系統進行備份的話,系統會同時對其他文件系統中的內容進行備份。這無疑不是我們所希望達到的目的。
二、可選項mount的作用。
在find命令中有一個-mount可選項。如果采用find / -mount命令的話,操作系統不會在加載點查找其他文件系統的文件。也就是說,利用這個可選項可以只對根文件系統進行備份,而不需要卸載其他文件系統,而且也不會訪問他們。即使用了這個可選項的find命令,其搜索的路徑只在根文件系統下。
為此對根文件系統常用的備份策略是,當系統已經得到完整的、正確的配置之后,系統工程師立刻使用-mount可選項對 根文件系統進行全面的備份。然后每當根文件系統下的配置文件發生變化后,再對他們進行增量備份即可。可見通過-mount選項可以解決根文件系統備份過程中遇到的第一個問題。
三、辨別文件是否發生變化。
在根文件備份中要實現增量備份,操作系統就必須首先要判斷那些文件在上次備份之后更新了。為了達到這個目的,Find命令提供了兩種處理機制,分別采用-newer參數與-mtime參數。
1、 利用newer可選項來實現。
利用newer可選項來實現這個需求的話,比較麻煩一點,但是相對來說卻比較科學一點。要利用這個可選項來實現這個命令的話,主要分為三個步驟。
第一步:建立一個零字節的對比文件。系統工程師首先要利用VI或者其他工具創建一個零字節的文件。這個文件到底有什么用途,筆者下面馬上會談到。在使用newer可選項來判斷哪些文件在上次備份后進行了修改,這個零字節的文件在其中起動了關鍵的作用。其實我們用到的并不是這個文件內容的本身,而是用到了這個文件中的時間屬性。
第二步:利用touch命令來修改時間屬性。眾所周知,在Unix操作系統中的文件有很多屬性,如創建時間、修改時間等等。在很多腳本程序中,需要用到這些文件屬性。而此時我們就需要用到這些文件屬性中的修改時間屬性。利用touch命令可以修改文件的事件屬性。如我們利用touch 文件名字,可以把系統的當前時間賦值給文件的修改時間截。
第三步:利用-newer參數進行比較。我們利用newer 參數來尋找上次備份后所改變的文件主要思路就是備份完成之后,把上面建立的這個零字節文件的修改時間截改為備份完之后的時間。然后在下次備份的時候,再利用-newer可選項,把查找到的文件的修改時間與這個零字節文件的修改時間(上次備份后的事件)屬性來進行比較。此時find命令只會把那些比這個時間更新的文件查找出來并進行備份。為此find命令加上touch命令,然后再結合-newer可選項就可以把上次備份后更新了的文件找出來。所以在書寫腳本程序的時候,需要把find命令寫在前面。備份完成所需要的文件之后才能夠利用touch命令來修改零字節文件的時間屬性。
2、 利用mtime可選項來實現。
其實在Unix操作系統的Find命令中,本身就帶有一個可選項-mtime。這個選項就是指在最近某個時段內修改過的文件。在Find這個可選項之后,系統會比較系統的修改時間與當前的系統時間。把這個時間差額與mtime可選項指定的時間差額進行比較。如mtime 1就表示把最近一天(24小時)內更改過的文件全部查找出來。這也可以達到增量備份的目的,只是其可能不怎么科學。如可能由于安裝了某個重要的外部設備之后,系統工程師手工執行了備份腳本。而讓系統自動進行備份的時候,其查找配置文件的時間參數是最近一天,而不是從上次備份之后,故就會出現重復備份的時候。不過通常情況下,這不會影響到備份的效率。為此如果系統工程師不了解NEWER與TOUCH應用的話,那么也可以利用這mtime可選項來完成這個需求。他們是通用的。
但是如果備份的數據比較大,如一些大型應用系統的日志文件,則最好采用第一種方式來查找需要備份的文件。因為此時重復備份幾個文件可能會延長備份的時間。不過如果只是備份Unix操作系統的配置文件,這兩種方法都可以使用;而且其備份時間基本上相同。筆者是比較偏向于采用第一種方法的。其實只要掌握其實現的原理,在寫腳本的時候才用這第一種方式也并沒有多大的難度。
四、顯示備份文件的列表。
有時候系統工程師希望每次備份完成之后操作系統都能夠把備份文件的名字保存在一個文件中。如此當系統工程師向恢復某個配置文件的時候,他就可以查看這些文件,以確定這個文件最近的備份時間以及備份的地點。另外為了迅速定位這些文件,系統工程師還希望這些保存備份文件信息的文件名字能夠以備份的日期命名。為了實現這個需求,筆者建議大家可以使用下面這個命令來實現。
find / -mount –mtine 1 –printf | cpio –ov >/backup 2>backuplist_’date”+%d%b%y”’。在這個命令中,-ov可選項中的v表示顯示每個被備份的文件。其實-ov是兩個可選項,分別為-o與-v。在Unix操作系統中,如果一個命令中帶有多個可選項的話,可以把他們合并在一起寫,以節省書寫的數量。為此可以把以上兩個可選項寫為-ov。而backuplist_’date”+%d%b%y”’這個文件名字中筆者利用了一些參數,讓操作系統自動把備份文件的時間信息放入到文件名中。如此的話系統工程師一看文件名字就知道在某個時候備份了哪些文件。這個文件列表會每次備份時都生成一個文件,時間久了可能會有很多個文件。為此筆者有時候會把這個命名規則改為backuplist_’date”+%d”’。如此的話,最多就只有31個文件。操作系統會每個月循環一次,把舊的文件覆蓋掉。不過這個要慎用。如果系統工程師不需要以前的備份文件列表的話,那么可以采用這個命名規則。而且系統工程師還可以縮短這個循環周期,如文件名字中的的時間信息為“星期幾”。那么每隔7天操作系統就會覆蓋原有的文件。但是對于配置文件來說,有時候幾個月沒有更改也是很正常的事情。為此對于配置文件的備份,則其需要保留所有的備份信息。此時就必須在文件名字中加入年月日等詳細的信息,以防止文件被覆蓋。
關鍵字:Find、操作系統、文件
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解