背景
使用 rsync 備份資料的「正確」方法是什麼?我之所以要求「正確」的方法是因為我過去使用rsync的經驗導致了權限、檔案/資料夾遮罩和時間戳相關的問題。因此,這個問題旨在了解如何使用 rsync 備份資料而不遇到任何權限、檔案/資料夾遮罩或時間戳相關問題,主要是在 Windows 系統上使用 rsync 時。
這個問題的另一個動機是確保我不會陷入我的困境上一期我無法存取外部磁碟機上透過 cygwin 使用 rsync 備份的任何檔案。這是一場噩夢,因為我實際上丟失了主電腦上的數據,並試圖從備份中恢復它。
以下是我在使用 rysnc 時遇到的類似問題:
- 無法存取外部磁碟機上使用 rsync 備份的任何文件Windows 上基於 Rsync 和 Cygwin 的備份出現權限被拒絕錯誤
- 無法保留時間戳https://unix.stackexchange.com/questions/61586/how-to-tell-rsync-to-preserve-time-stamp-on-files-when-source-tree-has-a-mounted
- rsync - mkstemp 失敗問題https://stackoverflow.com/questions/11039559/rsync-mkstemp-failed-permission-denied-13
我對 rsync 用法的理解是中等的,我參考了下面列出的指南。然而,我對 rsync 使用最大的困惑來自於權限、檔案/資料夾屏蔽、Posix 等。
要求/假設
- 我想在“備份”上下文中使用 rsync,而不是在“同步”上下文中使用。通常,提出與 rsync 相關問題的其他使用者可能會對「同步」資料感興趣,以確保他們在另一台 PC 上擁有同步的檔案工作副本。然而,我的目的不是“同步”,而只是“備份”,這樣如果我的電腦發生任何事情,我可以獲得最後的備份副本並恢復它。
- 需要備份的原始檔案可以存在於任何作業系統(例如:Windows、Ubuntu、MacOS)上,但主要存在於 Windows 上。
- 在 Windows 上,rsync 是透過 Windows Subsystem for Linux (WSL) 使用,而不是透過 cygwin
- 備份的目標可以是格式化為 NTFS、FAT32 或 exFAT 的外部磁碟機,也可以是網路磁碟機(例如:Samba 共用)。
- 這不是必需的,但可以使用 SSH 連接到目標
我目前的方法和問題
我在 Windows 10 上透過 Windows Subsystem for Linux (WSL) 使用 rsync。
範例1:不工作
rsync -avhP --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
此方法會導致檔案無法傳輸並出現以下錯誤:
rsync: chgrp "/mnt/my_usb_mount/ProjectA/src" failed: Operation not permitted (1)
和
rsync: mkstemp "/mnt/my_usb_mount/ProjectA/src/.mydata.json.6cfTCf" failed: Operation not permitted (1)
範例2:部分工作
rsync -avhP --no-p --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
或者
rsync -avhP --no-p --chmod=ugo=rwX --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
這種使用 rysnc 的方法會導致檔案被傳輸,但時間戳記(建立、修改、存取)均設定為傳輸時間。如果我再次執行 rsync 命令,所有檔案都將被偵測為已修改,並且由於時間戳記不正確而重新傳輸。此外,我還收到以下錯誤:
rsync: chgrp "/mnt/my_usb_mount/ProjectA/src" failed: Operation not permitted (1)
範例3:正確工作。
sudo rsync -avhP --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
這個方法工作得很好,但是,我不明白為什麼我必須使用sudo
?是因為我在 Windows 上透過 WSL 使用 rsync 嗎?sudo
如果我從 Linux PC(例如:Ubuntu)備份文件,我是否必須使用?
雖然範例 3 是一個可行的解決方案,但我仍然有很多問題:
- 我怎麼知道什麼時候
sudo
需要? - 我什麼時候使用
--no-p
或--chmod=ugo=rwX
- 如果我沒有權限使用怎麼辦
sudo
? - 如果我將文件備份到網路驅動器,它會起作用嗎?
- 如果我使用 SSH 怎麼辦?
- 當透過 WSL 從 Windows 使用 rsync 時,我是否會遇到奇怪的權限或檔案/資料夾遮罩問題?以前有過?
答案1
ntfs和fat不關心linux權限,你必須讓你的備份在ext4分割區上
或備份並壓縮成tar.gz,然後在linux系統檔案上解壓縮並恢復