首頁  >  文章  >  系統教程  >  Linux tar指令進階用法-備份數據

Linux tar指令進階用法-備份數據

WBOY
WBOY轉載
2024-02-12 22:10:02579瀏覽

Linux 系統上有一個強大的 tar 指令。 tar 最初是為了製作磁帶備份(tape archive)而設計的,它可以將檔案和目錄備份到磁帶中,並從磁帶中提取或還原檔案。現在,我們可以使用 tar 來將資料備份到任何儲存媒體。它是一種檔案級備份,不需要考慮底層檔案系統的類型,並且支援增量備份。

Linux 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中文網其他相關文章!

陳述:
本文轉載於:lxlinux.net。如有侵權,請聯絡admin@php.cn刪除