• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Linux 使用 rsync 進行增量備份、建立檔案快照教學與範例

介紹如何在 Linux 系統上使用 rsync 指令進行資料的增量備份,配合硬連結製作各時間的點的檔案快照。


資料的備份方式可分為完全備份(full backup)、差異備份(differential backup)與增量備份(incremental backup),各種備份方式各有優缺點,其差別可以參考維基百科與 YouTube 的影片。

在 Linux 中我們可以使用 rsync 指令以增量備份的方式備份資料,並配合硬連結(hard link)建立每個時間點的完整檔案快照(snapshot),以這種方式備份資料既快速又節省資料儲存空間,同時也可以輕易取得每個時間的檔案快照,是一種非常方便的備份方法。

以下是一段簡單的 rsync 快照備份指令稿,只要修改目錄設定之後,就可以直接放在 crontab 中執行,每次備份時會自動以時間來建立一個獨立的備份目錄,執行此備份指令稿的週期可以任意調整。

#!/bin/bash
# 出錯時離開指令稿
set -o errexit

# 不允許使用未定義的變數
set -o nounset

# 管線中間出錯時傳回錯誤
set -o pipefail

# 原始資料來源目錄
readonly SOURCE_DIR="/data/source"

# 備份資料根目錄
readonly BACKUP_DIR="/data/backup"

# 本次備份目錄
readonly DATETIME="$(date '+%Y%m%d_%H%M%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"

# 最新備份目錄連結名稱
readonly LATEST_LINK="${BACKUP_DIR}/latest"

# 建立新備份目錄
mkdir -p "${BACKUP_DIR}"

# 建立備份
rsync -av --delete \
      --link-dest "${LATEST_LINK}" \
      "${SOURCE_DIR}/" \
      "${BACKUP_PATH}"

# 移除舊連結、建立新連結
rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"

這裡這裡在備份資料時會將每一個時間點所備份的資料放置在不同的目錄之下,也就是說每一個目錄之下就是各時間點的檔案快照。隨著時間會有許多的備份目錄,而我們為了方便起見,會建立一個 lastest 連結檔,指向最新的備份目錄。

備份目錄結構

當我們要新增一個備份目錄時,只有那些有異動的檔案會從原始資料目錄複製過來,沒有變動的檔案會直接從上一個備份目錄(也就是 lastest 指向的目錄)中建立硬連結,這就是 rsync 加上 --link-dest 參數的作用。

新增備份目錄

在第一次執行這個備份指令稿時,由於沒有任何之前的備份目錄,rsync 的 --link-dest 參數等於沒有作用,所以會直接複製整個資料來源目錄,做一次完整備份(full backup),而在第一次的完整備份之後,後續的備份都可以參考前一次的備份目錄,進行增量備份,所以後續備份的速度會非常快。

增量備份配合硬連結之後,每一個目錄都會是一個完整的快照,要還原至任何一個時間點也都非常方便。

在 rsync 的參數中,跟 --link-dest 類似的還有 --compare-dest 與 --copy-dest,--compare-dest 會比較資料來源目錄與指定目錄中的檔案,忽略已經有的檔案,也就是增量備份,而 --copy-dest 的效果跟 --link-dest 類似,只不過對於沒有異動的檔案,它是用複製的方式建立檔案,不是硬連結。

參考資料:nixCraft、Tyler’s Guides、LinuxConfig.org、Dev Notes、jveweb.net、mikerubel.org、Earl C. Ruby III、StackExchange、StackExchange

分類:Linux

讀者互動方式

留言

  1. Haoming 表示:

    2021-09-3008:57:38

    請問 這樣 當 文件的內容改變了
    備份處的文件也跟著改變了 是嗎?

    回覆

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

主要資訊欄

搜尋

近期文章

  • C++ 語言使用 Crypto++ 實作 RSA 數位簽章教學與範例
  • C++ 語言使用 Crypto++ 實作 RSA-OAEP 搭配 SHA256 加密教學與範例
  • C++ 語言使用 Crypto++ 實作 AES 加密、解密、認證加密教學與範例
  • C++ 語言使用 Crypto++ 實作 MD5、SHA1、SHA2、BLAKE2 雜湊教學與範例
  • Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例
  • C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例
  • Python 以 eciespy 實作 ECC 非對稱式加密方法教學與範例
  • C 語言使用 OpenSSL 實作 PBKDF2 教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide