Linux

Rsync -avzHP 跟隨硬連結而不是將它們複製為硬連結

  • July 17, 2021

我使用 rsnapshot 來創建我的“工作”共享的每小時/每天/每週/每月備份。現在我正在嘗試使用 rsync 將整個備份目錄複製到外部驅動器上。

我在螢幕會話中使用了這個命令/參數(是的,rsync-exclude.txt 位於我執行命令的目錄中)

rsync -avzHP --exclude-from 'rsync-exclude.txt' /share/backup/ /share/eSATADisk1/backup/;

整個事情是在一台QNAP TS-439上執行的,內部驅動是一個格式化EXT4的單盤(無RAID),外部驅動是格式化EXT3。

發生的情況是:Rsync 跟踪每個硬連結並複制實際文件,而不是在外部驅動器上**重新創建更新的硬連結。**我沒有立即意識到這一點,因此外部驅動器最終被相同文件的 xxx 副本所破壞。

我想要實現的是:將 rsnapshot 生成的整個文件結構複製到外部驅動器,保留硬連結以節省空間。注意:這不一定必須使用 rsync 來完成。

感謝您的想法和時間。我會很感激你的幫助,很重要。

**更新:**我了解到,rsnapshot 沒有使用符號連結,它使用的是硬連結,所以我現在使用 -H 選項,它應該根據Rsnapshot 將硬連結結構保留到多個目的地(或保持硬連結結構),但它仍然不起作用……我在這裡錯過了什麼?

**更新 2:**我在這裡找到了關於此主題的另一個意見/聲明:rsync with –hard-links freezes Steven Monday 建議不要嘗試 rsync 包含硬連結的大文件結構,因為它會佔用大量記憶體,對於 rsync 來說是一項艱鉅的任務。所以可能一個更好的解決方案是製作我要備份的資料結構的 .img 。你怎麼看?

理論上,該rsync命令的-H(或--hard-links)選項將執行您想要完成的任務,簡而言之:創建一個保留原始硬連結結構的文件系統的副本。正如我在對另一個類似問題的回答中提到的,一旦你的源文件系統增長到超過硬連結複雜度的某個門檻值,這個選項注定會失敗。

該門檻值的精確位置可能取決於您的 RAM 和硬連結的總數(可能還有其他一些東西),但我發現嘗試精確定義它是沒有意義的。真正重要的是,在現實世界的情況下,門檻太容易跨越了,你不會知道你已經跨越了它,直到有一天你嘗試執行一個rsync -aH或一個cp -a掙扎並最終失敗的.

我的建議是:將您的重度硬連結文件系統複製為一個單元,而不是文件。也就是說,將整個文件系統分區複製為一個大 blob。有許多工具可以做到這一點,但最普遍的是dd.

使用庫存韌體,您的 QNAP NAS 應該dd內置,以及fdisk. 使用fdisk,在目標驅動器上創建一個至少與源分區一樣大的分區。然後,用於dd在新創建的目標分區上創建源分區的精確副本。

dd復製過程中,您必須確保源文件系統中沒有任何更改,以免最終在目標上得到損壞的副本。一種方法是umount在開始復製過程之前找到源;另一種方法是以只讀模式安裝源。

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