Rsync

rsync –link-dest 無法使用符號連結按預期工作

  • March 1, 2019

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(兩者都為 2 slinkhlink如果有效的話)。另外,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”)

引用自:https://unix.stackexchange.com/questions/290420