天天看點

tar指令進階用法——備份資料

linux上有功能強大的tar指令,tar最初是為了制作錄音帶備份(tape archive)而設計的,它的作用是把檔案和目錄備份到錄音帶中,然後從錄音帶中提取或恢複檔案。現在我們可以使用tar來備份資料到任何存儲媒體上。它是檔案級備份,不必考慮底層檔案系統類别,并且支援增量備份。

-z, --gzip:使用gzip工具(解)壓縮,字尾一般為<code>.gz</code>

-c, --create:tar打包,字尾一般為<code>.tar</code>

-f, --file=:後面立刻接打包或壓縮後得到的檔案名

-x, --extract:解包指令,與<code>-c</code>對應

-p:保留備份資料的原本權限和屬性

-g:後接增量備份的快照檔案

-c:指定解壓縮的目錄

--exclude:排除不打包的目錄或檔案,支援正則比對

其他

-x, --exclude-from:在一個檔案中列出要排除的目錄或檔案(在<code>--exclude=</code>較多時使用)

-t, --list:列出備份檔案中的檔案清單,不與<code>-c</code>、<code>-x</code>同時出現

-j, --bzip2:使用bzip2工具(解)壓縮,字尾一般為<code>.bz2</code>

-p:保留絕對路徑,解壓時同樣會自動解壓到絕對路徑下

-v:(解)壓縮過程顯示檔案處理過程,常用但不建議對大型檔案使用

許多系統(應用或網站)每天都有靜态檔案産生,對于一些比較重要的靜态檔案如果有進行定期備份的需求,就可以通過tar打包壓縮備份到指定的地方,特别是對一些總檔案比較大比較多的情況,還可以利用-g選項來做增量備份。

備份的目錄最好使用相對路徑,也就是進入到需要備份的根目錄下

具體示例方法如下。

<code>-g</code>選項可以了解備份時給目錄檔案做一個快照,記錄權限和屬性等資訊,第一次備份時<code>/tmp/snapshot_data.snap</code>不存在,會建立一個并做完全備份。當目錄下的檔案有修改後,再次執行第一條備份指令(記得修改後面的檔案檔案名),會自動根據<code>-g</code>指定的快照檔案,增量備份修改過的檔案,包括權限和屬性,沒有動過的檔案不會重複備份。

另外需要注意上面的恢複,是“保留恢複”,即存在相同檔案名的檔案會被覆寫,而原目錄下已存在(但備份檔案裡沒有)的,會依然保留。是以如果你想完全恢複到與備份檔案一模一樣,需要清空原目錄。如果有增量備份檔案,則還需要使用同樣的方式分别解壓這些檔案,而且要注意順序。

下面示範一個比較綜合的例子,要求:

備份<code>/tmp/data</code>目錄,但<code>cache</code>目錄以及臨時檔案排除在外

由于目錄比較大(&gt;4g),是以全備時分割備份的檔案(如每個備份檔案檔案最大1g)

保留所有檔案的權限和屬性,如使用者組和讀寫權限

恢複過程

如果需要定期備份,如每周一次全備,每天一次增量備份,則可以結合crontab實作。

備份檔案系統方法有很多,例如cpio, rsync, dump, tar,這裡示範一個通過<code>tar</code>備份整個linux系統的例子,整個備份與恢複過程與上面類似。

首先linux(這裡是centos)有一部分目錄是沒必要備份的,如<code>/proc</code>、<code>/lost+found</code>、<code>/sys</code>、<code>/mnt</code>、<code>/media</code>、<code>/dev</code>、<code>/proc</code>、<code>/tmp</code>,如果是備份到錄音帶<code>/dev/st0</code>則不必關心那麼多,因為我這裡是備份到本地<code>/backup</code>目錄,是以也需要排除,還有其它一些nfs或者網絡存儲挂載的目錄。

使用tar無論是備份資料還是檔案系統,需要考慮是在原系統上恢複還是另一個新的系統上恢複。

tar備份極度依賴于檔案的atime屬性,

檔案所屬使用者是根據使用者id來确定的,異機恢複需要考慮相同使用者擁有相同userid

備份和恢複的過程盡量不要運作其他程序,可能會導緻資料不一緻

軟硬連接配接檔案可以正常恢複

繼續閱讀