
我正在嘗試使用 rsnapshot / rsync 從伺服器到 Hetzner 儲存箱建立節省空間的旋轉備份方案。我很難理解目標上的硬連結如何影響所報告的磁碟使用情況。簡而言之:儘管硬連結似乎位於備份目標上,但它們似乎並未被考慮到磁碟使用中,而是被視為完整檔案。
由於 rsnapshot 的目標資料夾必須位於本機檔案系統上,因此我設定了一個由兩個部分組成的工作流程:
- 建立本機快照快照,在來源伺服器上的本機資料夾中
- 透過 SSH rsync 本地快照同步到目的地
這似乎運作良好且快速,但我有一個擔憂:目標上報告的磁碟使用情況(帶有du -sh
)似乎累積了所有快照的大小,即使它們似乎已使用硬鏈接正確複製。注意:由於 Hetzner 儲存盒不允許互動式 SSH 登錄,因此我將此備份目標檢查為使用 CIFS 掛載的磁碟區。
例如,經過 3 輪 rsnaphsot + rsync 組合後,目標資料夾包含daily.0
、daily.1
和daily.2
資料夾。當檢查這些快照資料夾中的隨機檔案的硬連結時,我確實得到了預期的結果:
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(如預期)
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
具有誤導性,或者文件是否確實佔用了您預期的更多磁碟空間。 (考慮到你的其他指標,我相當確定是前者。)