Linux

使用 rsync 保留現有的目標符號連結

  • January 23, 2017

我正在使用rsync(1)來更新本地 debian 儲存庫。最近,我用來儲存它的磁碟開始空間不足,所以我決定使用符號連結來允許我將一些目錄移動到另一個類似大小的磁碟。

不幸的是,rsync 似乎正在刪除符號連結並重新填充幾乎已滿的磁碟。經過一番搜尋,我發現了--keep-dirlinksrsync 選項,這似乎是為解決我的問題而量身定制的。

只有它沒有。目標上的符號連結仍然被刪除。

這是我的 rsync 命令:

rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \
--delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \
$RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/

EXCLUDE 擴展以消除大量我不感興趣的架構,類似於--exclude binary-alpha/ --exclude disks-alpha .... 在 rsync 啟動之前,我的池目錄如下所示:

lrwxrwxrwx  1 root root   23 2014-09-22 13:58 contrib -> /u2/debian/pool/contrib
drwxrwxr-x 62 root root 4096 2012-04-09 03:02 main
lrwxrwxrwx  1 root root   24 2014-09-22 13:58 non-free -> /u2/debian/pool/non-free

一旦 rsync 啟動,我得到這個:

receiving incremental file list
deleting non-free
deleting contrib
./
contrib/
contrib/a/

依此類推,符號連結被替換為充滿文件的目錄。

其他一些 rsync 選項是否會干擾--keep-dirlinks?哪些不能合併?還是導致我的問題的選項順序?

--delete--delete-excluded選項會干擾您的計劃,因為它們注意到源上沒有符號連結,因此將其刪除。

這只發生在您告訴使用符號(原始碼後面的斜杠)rsync複製整個目錄時。source/ target如果您source/* target改為使用,shell 將擴展要複製的文件和目錄列表,這不會發生(但--dry-run先嘗試)。

但是,我建議不要使用這種脆弱的設置,而是在 LVM 的幫助下將兩個磁碟組合在一起,形成一個不需要這種詭計的大卷。

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