Linux 系統上有一個強大的 tar 指令。 tar 最初是為了製作磁帶備份(tape archive)而設計的,它可以將檔案和目錄備份到磁帶中,並從磁帶中提取或還原檔案。現在,我們可以使用 tar 來將資料備份到任何儲存媒體。它是一種檔案級備份,不需要考慮底層檔案系統的類型,並且支援增量備份。
#1.部分常用選項
#●-z, –gzip:使用gzip工具(解)壓縮,後綴一般為.gz
●**-c, –create:**tar打包,字尾一般為.tar
●**-f, –file=:**後面立刻接打包或壓縮後得到的檔名
●**-x, –extract:**解包指令,與-c對應
#●-p:保留備份資料的原本權限和屬性
●**-g:**後接增量備份的快照檔案
●**-C:**指定解壓縮的目錄
●**–exclude:**排除不打包的目錄或文件,支援正規匹配
其他
●**-X, –exclude-from:**在一個檔案中列出要排除的目錄或檔案(在–exclude=較多時使用)
●**-t, –list:**列出備份檔案中的文件列表,不與-c、-x同時出現
●**-j, –bzip2:**使用bzip2工具(解)壓縮,後綴一般為.bz2
●**-P:**保留絕對路徑,解壓縮時同樣會自動解壓縮到絕對路徑下
●**-v:**(解)壓縮過程顯示檔案處理過程,常用但不建議對大型檔案使用
2.增量備份(網站)資料
許多系統(應用程式或網站)每天都有靜態檔案產生,對於一些比較重要的靜態檔案如果有進行定期備份的需求,就可以透過tar打包壓縮備份到指定的地方,特別是對一些總文件比較大比較多的情況,還可以利用-g選項來做增量備份。
備份的目錄最好使用相對路徑,也就是進入需要備份的根目錄下
具體範例方法如下。
「
#备份当前目录下的所有文件# tar -g /tmp/snapshot_data.snap -zcpf /tmp/data01.tar.gz .在需要恢复的目录下解压恢复# tar -zxpf /tmp/data01.tar.gz -C .」
#-g選項可以理解備份時給目錄文件做一個快照,記錄權限和屬性等信息,第一次備份時/tmp/snapshot_data.snap不存在,會新建一個並做完全備份。當目錄下的文件有修改後,再次執行第一條備份指令(記得修改後面的檔案檔案名稱),會自動根據-g指定的快照文件,增量備份修改過的文件,包括權限和屬性,沒有動過的檔案不會重複備份。
另外需要注意上面的恢復,是“保留恢復”,即存在相同文件名的文件會被覆蓋,而原目錄下已存在(但備份檔案裡沒有)的,會仍然保留。所以如果你想完全恢復到與備份檔案一模一樣,需要清空原始目錄。如果有增量備份檔案,則還需要使用相同的方式分別解壓縮這些檔案,並且要注意順序。
下面示範一個比較綜合的例子,要求:
●備份/tmp/data目錄,但cache目錄以及暫存檔案排除在外
●由於目錄比較大(>4G),所以全備時分割備份的檔案(如每個備份檔案檔案最大1G)
●保留所有檔案的權限和屬性,如使用者群組和讀寫權限
「
## cd /tmp/data
#做一次完全備份
# rm -f /tmp/snapshot_data.snap
## tar -g /tmp/snapshot_data.snap -zcpf – –exclude=./cache ./ | split -b 1024M – /tmp/bak_data$(date -I).tar.gz_
#分割後檔案名稱後會依序加上aa,ab,ac,…,上面最終的備份歸檔會儲存成
bak_data2014-12-07.tar.gz_aa
bak_data2014-12-07.tar.gz_ab
bak_data2014-12-07.tar.gz_ac
…
增量備份
可以是與完全備份一模一樣的指令,但需要注意的是假如你一天備份多次,可能導致檔案檔案名稱重複,那麼就會導致
備份實現,因為split依然會從aa,ab開始命名,如果一天的檔案產生(修改)量不是特別大,那麼建議增量部分不
分割處理了:( 一定要分割的話,檔案名稱加入更細緻的時間如$(date %Y-%m-%d_%H) )
# tar -g /tmp/snapshot_data.snap -zcpf /tmp/bak_data2014-12-07.tar.gz –exclude=./cache ./
隔天增備
# tar -g /tmp/snapshot_data.snap -zcpf /tmp/bak_data2014-12-08.tar.gz –exclude=./cache ./
」
#復原程序
「
#恢復完全備份的檔案檔案
可以選擇是否先清空/tmp/data/目錄
# cat /tmp/bak_data2014-12-07.tar.gz_* | tar -zxpf – -C /tmp/data/
恢復增量備份的檔案檔案
$ tar –zxpf /tmp/bak_data2014-12-07.tar.gz -C /tmp/data/
$ tar –zxpf /tmp/bak_data2014-12-08.tar.gz -C /tmp/data/
…
一定要保證是按時間順序恢復的,像下面檔名規則也可以使用上面通配符的形式
」
#如果需要定期備份,例如每週一次全備,每天一次增量備份,則可以結合crontab實作。
3.備份檔案系統
#備份檔案系統方法有很多,例如cpio, rsync, dump, tar,這裡示範一個透過tar備份整個Linux系統的例子,整個備份與復原過程與上方類似。
首先Linux(這裡是CentOS)有一部分目錄是沒必要備份的,例如/proc、/lost found、/sys、/mnt、/media、/dev、/proc、/tmp,如果是備份到磁帶/dev/st0則不必關心那麼多,因為我在這裡是備份到本地/backup目錄,所以也需要排除,還有其它一些NFS或網路儲存掛載的目錄。
「
#建立排除清單檔案
# vi /backup/backup_tar_exclude.list
/backup
/proc
/lost found
/sys
/mnt
/media
/dev
/tmp
$ tar -zcpf /backup/backup_full.tar.gz -g /backup/tar_snapshot.snap –exclude-from=/backup/tar_exclude.list /
」
#4.注意
#使用tar無論是備份資料或檔案系統,都需要考慮是在原始系統上恢復還是另一個新的系統上恢復。
●tar備份極度依賴檔案的atime屬性,
●文件所屬使用者是根據使用者ID來決定的,異機復原需要考慮相同使用者擁有相同USERID
●備份和復原的過程盡量不要執行其他進程,可能會導致資料不一致
●軟硬連線檔案可以正常恢復
以上是Linux tar指令進階用法-備份數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!