Rsync

rsync 的 –inplace 選項如何與 –backup 一起使用?

  • December 15, 2020

我將數據與rsync --delete --backup --backup-dir=[some directory] -avz [source] [destination].

  • 在執行 rsync 的機器上,[source][destination]目錄都是本地掛載的 NFS 導出(即執行 rsync 的機器是 NFS 客戶端)。
  • 在成功rsync+一些檢查後,備份被刪除。

我區域網路的另一台機器是應用程序伺服器,並且[destination]在本地安裝了相同的 NFS 導出。由於應用程序方面的一些複雜性,我沒有控制,看起來應用程序通過它們的 inode 而不是使用它們的名稱來引用文件。當文件從以下位置更改時會帶來困難[source]

  • 比方說[destination],這個文件有 inode123
  • 應用程序“指向”具有 inode 的文件123
  • [source]rsync 檢測到這個文件的版本和版本之間的差異,[destination]並且必須傳輸它
  • 在傳輸它之前,它通過“移動”它來創建一個備份:備份文件現在有 inode123
  • 文件的更新版本由 rsync 傳輸,並獲得一個新的 inode ( 456)
  • 123在成功rsync + 檢查後,備份被刪除:沒有文件有 inode
  • 仍然指向 inode 的應用程序123已損壞
  1. 您是否確認我清楚了解如何rsync --backup工作和 inode ?
  2. --inplacersync 選項如何使用--backup
  • rsync 會創建一個擁有自己的 inode 的備份文件嗎?
  • 文件會保留其目前的 inode 嗎?

幾乎不可能通過 inode 引用文件。要打開文件,必須打開對目錄中文件名的引用。然後你有一個文件句柄,它現在獨立於文件名(這就是為什麼文件可以從文件系統中刪除但仍然是打開和活動的)。因此,讓我們假設文件在應用程序的整個生命週期中保持打開狀態。您現在需要使用rsync.

通常,rsync它將在任何現有實例旁邊創建目標文件的臨時副本,然後在最後一刻刪除(或備份)原始文件並切換到替換。可以使用該--inplace選項修改此行為,這樣就不會創建新副本,而是rsync寫入實際目標。

現在,您還指定了--backup,所以做正確的事情並在允許更新原始實例rsync之前為備份創建一個副本。--inplace您可以通過一個簡短的範例看到這一點:

# Prepare scenario
mkdir /tmp/624404
cd /tmp/624404
date >src
cp -p src dst

# Initial files, with inodes
ls -li src dst
149172 -rw-r--r-- 1 roaima 29 Dec 14 11:49 dst
137559 -rw-r--r-- 1 roaima 29 Dec 14 11:49 src

# Update, copy, and list
date >src
rsync --times --inplace --backup src dst
ls -li
total 12
149172 -rw-r--r-- 1 roaima 29 Dec 14 11:50 dst
149194 -rw-r--r-- 1 roaima 29 Dec 14 11:49 dst~
137559 -rw-r--r-- 1 roaima 29 Dec 14 11:50 src

# Update again, copy, and list
date >src
rsync --times --inplace --backup src dst
ls -li
total 12
149172 -rw-r--r-- 1 roaima 29 Dec 14 11:50 dst
149194 -rw-r--r-- 1 roaima 29 Dec 14 11:50 dst~
137559 -rw-r--r-- 1 roaima 29 Dec 14 11:50 src

您可以看到目標 ( dst) 文件仍然具有其原始 inode,但已為備份提供了新的 inode。第二次更新顯示此後保留了 inode。

在你的例子中,聽起來確實--inplace --backup是你需要的。但是,請注意手冊頁警告,

警告:您不應使用此選項來更新其他人正在訪問的文件,因此在選擇將其用於副本時要小心。

不是預設值的原因--inplace是中斷的部分副本可能會使目標文件處於不一致狀態,並且作者認為擁有內部一致的過期文件比損壞的文件更好-of-date 文件。這種行為可以用諸如--inplace和之類的標誌來修改--partial(甚至--append使用rsync3.0.0 及更高版本)。

引用自:https://unix.stackexchange.com/questions/624404