背景
使用 rsync 备份数据的“正确”方法是什么?我之所以问“正确”方法,是因为我过去使用 rsync 的经历导致了权限、文件/文件夹掩码和时间戳相关的问题。因此,这个问题旨在了解如何使用 rsync 备份数据而不遇到任何权限、文件/文件夹掩码或时间戳相关问题,主要是在 Windows 系统上使用 rsync 时。
这个问题的另一个动机是确保我不会陷入我的上一期我无法访问通过 cygwin 使用 rsync 备份的外部驱动器上的任何文件。这真是一场噩梦,因为我的主 PC 上的数据实际上已经丢失,并且正在尝试从备份中恢复。
以下是我在使用 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 上拥有同步的文件的工作副本。然而,我的目的不是“同步”,而只是“备份”,这样如果我的 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
这种方法效果很好,但是我不明白为什么我必须使用?是不是因为我通过 WSL 在 Windows 上使用 rsync?如果我从 Linux PC(例如:Ubuntu)备份文件,sudo
是否必须使用?sudo
虽然示例 3 是一个可行的解决方案,但我仍然有很多问题:
- 我怎么知道什么时候
sudo
需要? - 何时使用
--no-p
或--chmod=ugo=rwX
- 如果我没有使用权限该怎么办
sudo
? - 如果我将文件备份到网络驱动器,它会起作用吗?
- 如果我使用 SSH 怎么办?
- 当我通过 WSL 在 Windows 上使用 rsync 时,我是否会遇到奇怪的权限或文件/文件夹掩码问题?以前有?
答案1
Ntfs 和 fat 不关心 linux 权限,你必须在 ext4 分区上进行备份
或者备份并压缩为tar.gz然后在linux系统文件上解压并恢复