Rsync

為什麼 rsync 只硬連結一些未更改的文件?

  • October 6, 2021

我正在使用rsync增量備份,使用--link-dest指向上一個備份的選項,以便未更改的文件硬連結到那裡。

這是有效的,但不適用於所有文件。例如,我在備份中有一個目錄,其中包含三年多未修改的文件。但出於某種奇怪的原因,只有其中一些是硬連結。

不方便的是,較大的文件都是副本(即只有一個指向該文件的連結,通過 檢查ls -l)。但是對於一些較小的文件也是如此,而且確實一些硬連結文件比一些複製的文件大。

似乎沒有任何模式可以讓我預測哪些將是副本以及哪些硬連結。文件名長度和文件大小似乎無關緊要,修改日期也是如此:在複製和硬連結列表中都有所有這些。也就是說,文件在多個備份中似乎確實是一致的,因此一次備份發生的情況似乎也發生在下一次備份中。

是否有文件的某些屬性(技術或其他),某些功能會導致rsync複製它而不是硬連結它?

**編輯1:**提到“屬性”讓我想知道是否有一些ls -l沒有列出的屬性可能會產生影響,但是lsattr在源目錄中執行表明所有文件都具有相同的屬性。

**編輯 2:**我之前說過(現在已刪除)權限都是一樣的,但這是錯誤的。目標(備份)目錄中的權限相同。我正在使用--perms(保留權限),所以我不知道為什麼沒有保留權限。我以前也以非 root 使用者身份執行,但現在我嘗試以 root 身份執行以防萬一,但仍然沒有保留權限,這可能是某些文件看起來已經更改的原因 - 文件沒有’t 但它的權限顯然有(至少,與以前的備份相比,它的權限不正確)。

**編輯 3:**我現在認為這與我的 CIFS 伺服器有關。mount.cifs手冊頁中有關於該file_mode選項的內容:“如果伺服器不支持 CIFS Unix 擴展,則會覆蓋預設文件模式。” 當我執行mount不帶參數的命令來列出掛載時,列出的選項包括file_mode=0755以及dir_mode=0755與我看到的內容相關聯。我不能chmod在掛載上的文件,因此那些最初沒有0755權限的文件被視為已更改,因此被再次複製 - 由於掛載而再次在備份中獲得錯誤的權限。

與其說是解決方案,不如說是一種解決方法,我現在避免使用--perms/-p或任何暗示它的東西。顯然,我的權限不會被複製,但至少它不會因為權限不同而認為未更改的文件被更改。

引用自:https://serverfault.com/questions/1077528