(rsync on)已安裝卷:硬連結似乎被保留,但空間計算為完整文件

(rsync on)已安裝卷:硬連結似乎被保留,但空間計算為完整文件

我正在嘗試使用 rsnapshot / rsync 從伺服器到 Hetzner 儲存箱建立節省空間的旋轉備份方案。我很難理解目標上的硬連結如何影響所報告的磁碟使用情況。簡而言之:儘管硬連結似乎位於備份目標上,但它們似乎並未被考慮到磁碟使用中,而是被視為完整檔案。

由於 rsnapshot 的目標資料夾必須位於本機檔案系統上,因此我設定了一個由兩個部分組成的工作流程:

  1. 建立本機快照快照,在來源伺服器上的本機資料夾中
  2. 透過 SSH rsync 本地快照同步到目的地

這似乎運作良好且快速,但我有一個擔憂:目標上報告的磁碟使用情況(帶有du -sh)似乎累積了所有快照的大小,即使它們似乎已使用硬鏈接正確複製。注意:由於 Hetzner 儲存盒不允許互動式 SSH 登錄,因此我將此備份目標檢查為使用 CIFS 掛載的磁碟區。

例如,經過 3 輪 rsnaphsot + rsync 組合後,目標資料夾包含daily.0daily.1daily.2資料夾。當檢查這些快照資料夾中的隨機檔案的硬連結時,我確實得到了預期的結果:

  1. find /mnt/user.your-storagebox.de/rsync-backup/ -name "output.file" -print0 | xargs -0 ls -li

    351317 -rw-rw---- 3 root root 8650 Dec 15 11:25 /mnt/user.your-storagebox.de/rsync-backup/daily.0/home/user/output.file
    351317 -rw-rw---- 3 root root 8650 Dec 15 11:25 /mnt/user.your-storagebox.de/rsync-backup/daily.1/home/user/output.file
    351317 -rw-rw---- 3 root root 8650 Dec 15 11:25 /mnt/user.your-storagebox.de/rsync-backup/daily.2/home/user/output.file
    

    傳回 3 個具有相同 inode 的文件,連結計數為 3(如預期)

  2. find /mnt/user.your-storagebox.de/rsync-backup/ -samefile /mnt/user.your-storagebox.de/rsync-backup/daily.0/home/user/output.file

    /mnt/user.your-storagebox.de/rsync-backup/daily.0/var/tomcat/vhosts/output.file
    /mnt/user.your-storagebox.de/rsync-backup/daily.2/var/tomcat/vhosts/output.file
    /mnt/user.your-storagebox.de/rsync-backup/daily.1/var/tomcat/vhosts/output.file
    

    返回 3 個文件(如預期)

我想這表明這些快照已作為硬連結正確複製到目標。

然而...當檢查目標位置的磁碟使用情況時:du -sh /mnt/user.your-storagebox.de/rsync-backup,傳回值 12G。這是出乎意料的,因為原始來源資料夾只有大約 4G。顯然,儘管存在硬鏈接,但磁碟使用量是累積計算的?

OTOH,當通過 檢查目標資料夾時rsnapshot du,我得到的輸出是似乎考慮了硬連結:

4.3G    /mnt/user.your-storagebox.de/rsync-backup/daily.0/
41K     /mnt/user.your-storagebox.de/rsync-backup/daily.1/
41K     /mnt/user.your-storagebox.de/rsync-backup/daily.2/
4.3G    total

這很令人困惑:要么快照是透過硬連結複製的,並且應該佔用最小的空間(檢查 inode 時似乎就是這種情況),要么它們不是並且佔用的空間比預期多得多(如建議的那樣)輸出du -sh)。

我主要關心的是:此安裝卷上報告的磁碟使用情況是正確的還是錯誤的?使用du -sh已安裝磁碟區時是否有任何我應該注意的警告?

答案1

我的版本du(Debian,du (GNU coreutils) 8.30)處理具有硬連結的文件,並且僅對多個實例進行一次計數。看來你的沒有。不過,你可以很容易地驗證這一點

準備場景

mkdir zzz                 # Scenario workspace
tar cf zzz/etc.1 /etc     # Ignore "tar: Removing leading `/' from member names"

試驗#1。複製了兩個文件但未硬鏈接

cp zzz/etc.1 zzz/etc.2    # Create copy

du -s zzz/etc.1           # 2580 KB, in my instance
du -s zzz/etc.2           # As you would expect, the same value
du -s zzz                 # 5164 KB, because the files are "different"

試驗#2。兩個檔案硬連結在一起

rm zzz/etc.2
ln zzz/etc.1 zzz/etc.2    # Create hardlink

du -s zzz/etc.1           # Unchanged from above, of course, 2850 KB
du -s zzz/etc.2           # As you would expect, still the same value
du -s zzz                 # For me, this is still the same value, 2580 KB

如果您的實例du無法處理相同硬連結檔案的多個實例,則您的試驗#2 將傳回兩者的總和,etc.1就像etc.2試驗#1 所做的那樣。

使用此信息,您可以確定您的版本是否du具有誤導性,或者文件是否確實佔用了您預期的更多磁碟空間。 (考慮到你的其他指標,我相當確定是前者。)

相關內容