Rsync
rsync 和使用 du 後的不同目錄大小
我將一些特殊目錄(常用遷移工具不支持)從一個 Synology NAS 卷 (ext4) 遷移到另一個 (btrfs)。檢查同步是否成功後,我發現大小差異很大。
我知道存在塊大小差異,但
du
在同一卷內給了我錯誤的數據大小。整個目錄的總大小超過 1 TB,所以我將下面的命令縮小到一個較小的子目錄。
不同尺寸:
sudo du -sm /volume[12]/@synologydrive/@sync/repo/1/2 11418 /volume1/@synologydrive/@sync/repo/1/2 11122 /volume2/@synologydrive/@sync/repo/1/2
但是對於每個子目錄,我都會得到正確的大小(使用字節時或多或少) -
n
選擇了子目錄:sudo du -sm /volume[12]/@synologydrive/@sync/repo/1/2/n 295 /volume1/@synologydrive/@sync/repo/1/2/n 295 /volume2/@synologydrive/@sync/repo/1/2/n sudo du -sb /volume[12]/@synologydrive/@sync/repo/1/2/n 308387853 /volume1/@synologydrive/@sync/repo/1/2/n 308391693 /volume2/@synologydrive/@sync/repo/1/2/n
但是,我在
*
使用時會得到完全不同的大小(即,即使在上面相同的音量比較命令和第 2 卷上的這個命令上):sudo du -sm /volume[12]/@synologydrive/@sync/repo/1/2/* | grep n$ 295 /volume1/@synologydrive/@sync/repo/1/2/n 200 /volume2/@synologydrive/@sync/repo/1/2/n sudo du -sb /volume[12]/@synologydrive/@sync/repo/1/2/* | grep n$ 308387853 /volume1/@synologydrive/@sync/repo/1/2/n 209533219 /volume2/@synologydrive/@sync/repo/1/2/n
我還計算了目錄下所有文件的大小,
n
並且得到了相同的大小:ls -lA /volume1/@synologydrive/@sync/repo/1/2/n | tr -s ' ' | cut -f5 -d" " | awk '{s+=$1} END {print s}' 308387597 ls -lA /volume2/@synologydrive/@sync/repo/1/2/n | tr -s ' ' | cut -f5 -d" " | awk '{s+=$1} END {print s}' 308387597
因此,似乎目錄已正確“同步”(文件數量相同,大小相同),並試圖排除兩個不同文件系統之間的差異。但是
du
在新卷1上給了我更大的尺寸(或者更準確地說 - 在舊卷2上明顯更小)。你有什麼解釋嗎?
筆記:
volume1
是新的 btrfs 目標卷(我將數據複製到)volume2
是舊的 ext4 源卷(我從中複製了數據)- 使用複制數據
sudo rsync -a --progress --delete /volume2/@synologydrive /volume1
感謝@they 在 OP 下的評論中,我找到了根本原因。原始源卷包含許多硬連結目錄/文件,它們都被複製到新卷作為新的獨立(固定)目錄/文件。
實際上有兩件事幫助我理解了這個問題:
rsync
預設情況下不尊重硬連結。經驗教訓:rsync
使用switch執行--hard-links
,也可能使用--sparse
switch 來有效地處理較小的文件。du
預設情況下不包括硬連結文件的大小。**經驗教訓:**執行du -l
switch 以計算所有文件的大小,包括。那些硬連結。與顯示的大小類似ls
。如果不知道這兩個方面,我就不知道我的文件是否正確同步。