Linux tar incremental Backup / Restore

Incremental Backup 增量備份

tar 需要一個 Snapshot(快照)文件來對照新舊檔案差異
  • 備份實例基礎資料
備份目標位置: /etc
備份儲存位置: /var/backup

備份快照文件: etc.snar
Day 1 備份儲存文件: etc.1.tar
Day 2 備份儲存文件: etc.2.tar 
Day 3 備份儲存文件: etc.3.tar  
  • 第一天執行備份,建立 /var/backup/etc.snar 快照文件
# tar -cvf /var/backup/etc.1.tar /etc -g /var/backup/etc.snar
  • 第二天執行備份,會根據/var/backup/etc.snar的快照文件與 /etc的差異準行備份
# tar -cvf /var/backup/etc.2.tar /etc -g /var/backup/etc.snar 
  • 第三天執行備份,會根據上一次的快照文件最後備份結果與 /etc的差異準行備份
# tar -cvf /var/backup/etc.3.tar /etc -g /var/backup/etc.snar  

Incremental Backup 總結

經過三天的備份,我們應該會得到以下文件

# cd /var/backup
# ls -l
 total 10324
 -rw-r--r-- 1 root root 9687040 Feb 13 19:26 etc.1.tar
 -rw-r--r-- 1 root root  389120 Feb 14 19:26 etc.2.tar
 -rw-r--r-- 1 root root  430080 Feb 15 19:42 etc.3.tar
 -rw-r--r-- 1 root root   63331 Feb 15 19:42 etc.snar

第一天的 etc.1.tar 為 full Backup檔
第二天的 etc.2.tar 為 Day 2 的 Incremental Backup檔
第三天的 etc.3.tar 為 Day 3 的 Incremental Backup檔
注意:etc.snar文檔不可以刪除,否則就不能夠進行之後的 Incremental Backup

Restore 恢復

在Restore過程中,無需要使用快照文件,但必須要由第一天開始順序提取
  • Restore實例基礎資料
etc.1.tar: full Backup檔
etc.2.tar: Day 2 的 Incremental Backup檔
etc.3.tar: Day 3 的 Incremental Backup檔
恢複的資料存放在 /home/foo

e.g.
# cd /var/backup
# ls -l
 total 10324
 -rw-r--r-- 1 root root 9687040 Feb 13 19:26 etc.1.tar
 -rw-r--r-- 1 root root  389120 Feb 14 19:26 etc.2.tar
 -rw-r--r-- 1 root root  430080 Feb 15 19:42 etc.3.tar
 -rw-r--r-- 1 root root   63331 Feb 15 19:42 etc.snar
# 
  • 實例恢復 Day2 的資料步驟
# tar -C /home/foo -xvf etc.1.tar -g /dev/null
# tar -C /home/foo -xvf etc.2.tar -g /dev/null 
  • 檢查恢複結果
# cd /home/foo
# ls -l
total 4
 drwxr-xr-x 125 root root 4096 Feb 16 13:16 etc
#

Restore 總結

# tar -C /home/foo -xvf etc.1.tar -g /dev/null 

使用 -g /dev/null 的目的,會根據記錄自動刪除已改變的檔案。
若不使用 -g /dev/null,tar不會協助您刪除已取消的檔案。

Linux tar 基礎實例

  • 把 /home/foo 備份到 foo.tar 文件中
tar -cf foo.tar /home/foo
tar -vcf foo.tar /home/foo

-c 或--create 建立新的備份文件。
-f<備份文件>或--file=<備份文件> 指定備份文件。
-v 或--verbose 顯示指令執行過程。 
  • 把多個目錄或檔案,備份到 foo.tar 文件中
 tar -cf foo.tar /home/foo1 /home/foo2 /home/foo3/abc.jpg 
  • 還原備份文件
tar -vxf foo.tar

-x 或--extract或--get 從備份文件中還原文件。
  • 還原備份文件到指定目錄 /home/abc
tar -C /home/abc -vxf foo.tar
  • 查看tar文件中的內容
tar -tvf foo.tar
  • 如何還原備份文件中部份文件夾
# 先查看tar文件中的內容 

tar -tvf foo.tar  

從 foo.tar 中,只提取 /home/foo2目錄,並存放在 /home/temp中

tar -C /home/temp -vxf foo.tar home/foo2  

#注意 home/foo2 前是沒有「/」符號

參考:

RINOOB.COM Linux Tar命令
How do you extract a single folder from a large tar.gz archive?