Linux

使用 rsync 保留文件和文件夾權限

  • April 24, 2019

我使用以下命令維護我的電子郵件帳戶的備份:

sudo rsync -av --delete --progress -e "ssh -p pNumber" --rsync-path="/usr/bin/rsync" /vmail/ user@my_backup_server:/home/user/backups/vmail/

來源:大多數電子郵件文件夾歸使用者所有vmail

目標(備份伺服器):系統沒有名為vmail.

我的問題是,即使目標機器沒有名為的使用者,上述命令是否會保留文件和目錄權限vmail?即使兩台機器之間的使用者名不同(備份伺服器上缺少一些),是否可以將文件和權限完全從目標恢復到源。

複製的是rsync文件的數字使用者 ID,無論它是否存在於目標系統上。如果具有該 ID 的使用者不存在,ls等等將只顯示該數字而不是名稱。如果該使用者 id 屬於目標系統上的另一個使用者名,則該使用者現在將擁有該文件。

在這種情況下,備份和恢復將毫無問題地工作。

rsync 如何保留文件的所有權取決於兩件事:

  • 您是目的地的超級使用者(root)嗎?

否則,您無法使用您自己以外的其他使用者創建文件和目錄。

  • 您正在使用哪些選項標誌?

-a選項包括旨在保留所有權-o, --owner的 選項。-g, --group

在文件系統級別,使用者和組所有權分別儲存在 UID 中。GID 編號。當沒有從 UID/GID 到使用者名和組名的映射時,工具只會顯示這些數字。

同名的使用者和組在不同的系統上可以有不同的 UID/GID 號。

預設情況下,rsync 將嘗試通過使用者名來匹配所有權。組名。換句話說,當使用者vmail是源文件的所有者時,rsync 將使使用者vmail成為目標文件的所有者(即使他們有不同的 UID/GID 編號)。

這通常是非常有彈性的並且對人類來說是最可預測的,因為我們通常不會以 UID/GID 數字的形式查看所有權。

vmail當遠端目標上不存在匹配的使用者時,將發生備份方案。然後,Rsync 將保留實際的底層 UID/GID 編號,並且vmail源上使用者的 UID 編號將用於設置所有者。

當您反轉 rsync 方向並恢復備份時,這應該會保留正確的所有權。

man rsync:

  -o, --owner
         This  option  causes  rsync to set the owner of the destination file to be the same as the source file,
         but only if the receiving rsync is being run as the super-user (see also the --super  and  --fake-super
         options).   Without this option, the owner of new and/or transferred files are set to the invoking user
         on the receiving side.

         The preservation of ownership will associate matching names by default, but may fall back to using  the
         ID number in some circumstances (see also the --numeric-ids option for a full discussion).


  --numeric-ids
         With  this option rsync will transfer numeric group and user IDs rather than using user and group names
         and mapping them at both ends.

         By default rsync will use the username and groupname to determine what ownership  to  give  files.  The
         special  uid  0 and the special group 0 are never mapped via user/group names even if the --numeric-ids
         option is not specified.

         If a user or group has no name on the source system or it has no match on the destination system,  then
         the  numeric ID from the source system is used instead.  See also the comments on the "use chroot" set‐
         ting in the rsyncd.conf manpage for information on how the chroot setting affects  rsync’s  ability  to
         look up the names of the users and groups and what you can do about it.

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