Rsync
rsync –link-dest 無法使用符號連結按預期工作
我
rsync
用來備份我的一些文件:
rsync -aEN --delete --link-dest="$CURR/" "$SOURCE/" "$NEW/"
該
--link-dest
選項適用於大多數文件,但不適用於符號連結。當我為舊備份編寫清理腳本時,我注意到未更改的符號連結不是硬連結,而是複制。
現在我想知道:
有沒有辦法使
rsync
硬連結不變的符號連結也不變?如果不是:這是故意的還是 rsync 中的錯誤?
我在 Mac OS 10.11 上使用 rsync 版本 3.1.1。
編輯:
這似乎是 Mac OS X 中的一個問題。由於某種原因,HFS+ 似乎不支持到符號連結的硬連結。
macOS (HFS+) 上的文件系統不支持符號連結的硬連結:
$ touch file $ ls -l file -rw-r--r-- 1 kk staff 0 Jun 17 18:35 file $ ln -s file slink $ ls -l file slink -rw-r--r-- 1 kk staff 0 Jun 17 18:35 file lrwxr-xr-x 1 kk staff 4 Jun 17 18:36 slink -> file
以下內容通常會創建指向符號連結的硬連結,甚至
ln
在 macOS 的手冊中記錄了這樣做(編輯:不,不是,除非您安裝了 GNU coreutils 並閱讀了錯誤的手冊,doh!):$ ln -P slink hlink $ ls -l file slink hlink -rw-r--r-- 1 kk staff 0 Jun 17 18:35 file lrwxr-xr-x 1 kk staff 4 Jun 17 18:38 hlink -> file lrwxr-xr-x 1 kk staff 4 Jun 17 18:36 slink -> file
您可以通過 ref 計數 (1) 看到沒有為其創建新名稱
slink
(兩者都為 2slink
,hlink
如果有效的話)。另外,stat
告訴我們這hlink
是一個帶有 1 個 inode 連結(不是 2 個)的符號連結:$ stat hlink File: 'hlink' -> 'file' Size: 4 Blocks: 8 IO Block: 4096 symbolic link Device: 1000004h/16777220d Inode: 83828644 Links: 1 Access: (0755/lrwxr-xr-x) Uid: ( 501/ kk) Gid: ( 20/ staff) Access: 2016-06-17 18:38:18.000000000 +0200 Modify: 2016-06-17 18:38:18.000000000 +0200 Change: 2016-06-17 18:38:18.000000000 +0200 Birth: 2016-06-17 18:38:18.000000000 +0200
編輯:由於我使用 GNU coreutils 被抓到,這裡再次
/bin/ln
在 macOS 上進行測試:$ touch file $ /bin/ln -s file slink $ /bin/ln slink hlink # there is no option corresponding to GNU's -P $ ls -l file slink hlink -rw-r--r-- 2 kk staff 0 Jun 17 18:59 file -rw-r--r-- 2 kk staff 0 Jun 17 18:59 hlink lrwxr-xr-x 1 kk staff 4 Jun 17 18:59 slink -> file
硬連結指向
file
而不是指向slink
。在例如 Linux 和 OpenBSD(我使用的其他作業系統)上,可以這樣做,這會導致
$ ls -l file slink hlink -rw-rw-r-- 1 kk kk 0 Jun 17 18:35 file lrwxrwxrwx 2 kk kk 4 Jun 17 18:43 hlink -> file lrwxrwxrwx 2 kk kk 4 Jun 17 18:43 slink -> file
(注意“2”)