我是 WSL 新手,正在尝试使用它rsync
进行快照备份。一切似乎都按预期工作……除了rsync
拒绝复制某些文件,并指出存在权限错误send_files
。
因此,我尝试全局更改所有文件和文件夹的权限,使它们全部可读。但某些文件再次失败。然后,我查看了这些特定目录,发现了以下内容:
m17awl@M17A:/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib$ ls -lsa
total 48332
0 drwxrwxrwx 1 m17awl m17awl 512 Jan 21 2020 .
0 drwxrwxrwx 1 m17awl m17awl 512 Jan 21 2020 ..
52 ---------- 1 m17awl m17awl 51141 Jan 23 2020 LuceneIndexer_3-3.0.12.jar
4 ---------- 1 m17awl m17awl 3482 Jan 23 2020 animal-sniffer-annotations-1.14.jar
2020 ---------- 1 m17awl m17awl 2067867 Jan 23 2020 ant-1.9.13.jar
嗯...没有权限。好的,我尝试更改这些,似乎成功了:
m17awl@M17A:/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib$ sudo chmod -R +r .
[sudo] password for m17awl:
m17awl@M17A:/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib$ ls -lsa
total 48332
0 drwxrwxrwx 1 m17awl m17awl 512 Jan 21 2020 .
0 drwxrwxrwx 1 m17awl m17awl 512 Jan 21 2020 ..
52 -r-xr-xr-x 1 m17awl m17awl 51141 Jan 23 2020 LuceneIndexer_3-3.0.12.jar
4 -r-xr-xr-x 1 m17awl m17awl 3482 Jan 23 2020 animal-sniffer-annotations-1.14.jar
2020 -r-xr-xr-x 1 m17awl m17awl 2067867 Jan 23 2020 ant-1.9.13.jar
我rsync
再次运行...并得到相同的权限失败,包括此特定目录中的这些文件:
m17awl@M17A:/mnt/d/My Documents$ rsync --progress --update --recursive --times --link-dest=/mnt/f/Backups/rsync/My\ Documents/snapshot2021-02-21T203900/ /mnt/d/My\ Documents/ /mnt/f/Backups/rsync/My\ Documents/snapshot2021-02-22T071700/
sending incremental file list
...
rsync: send_files failed to open "/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/bin/LuceneIndexer_3": Permission denied (13)
rsync: send_files failed to open "/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib/LuceneIndexer_3-3.0.12.jar": Permission denied (13)
rsync: send_files failed to open "/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib/animal-sniffer-annotations-1.14.jar": Permission denied (13)
rsync: send_files failed to open "/mnt/d/My Documents/software projects/operative/LuceneIndexer_3/3.0.12/lib/ant-1.9.13.jar": Permission denied (13)
...当我回去再次查看目录时,我发现这些文件的权限已被“破坏”(即再次设置为----------
)。
有人知道这里发生了什么吗...有什么解决方案吗?
顺便说一句,问题似乎发生的源介质是内部 SSD,250 GB,格式化为 NTFS。目标介质 (/mnt/f) 是外部硬盘驱动器,旋转盘类型,750 GB,格式化为 NTFS。
答案1
感谢 Kamil Maciorowski 的评论和链接,我做了一些实验,似乎取得了成功:
1 - 根据这个答案,创建(或修改如果存在)文件 /etc/wsl.conf:
[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=11"
2 - 重启机器
3-根据需要设置您的权限,在我的情况下,读取源位置的权限
4 - rsync
注意:与上述链接答案相关的其他一些答案表明,WSL 下的任何 /mnt/... 位置(即 Windows 10 分区)都不能信任其保留权限。到目前为止,就我而言,这似乎是错误的。如前所述,我的源位置是格式化为 NTFS 的内部 SSD 驱动器,到目前为止似乎运行正常。
答案2
虽然很高兴听到您解决了这个用例的问题,但我仍然建议采用略有不同的解决方案。
在您的 中/etc/wsl.conf
,添加以下内容:
[automount]
options = "metadata,umask=22,fmask=11,uid=1000,gid=1000"
当然,将uid
和设置gid
为您的用户。从技术上讲,metadata
、fmask
和umask
选项对于设置来说甚至不是必需的uid/gid
。至少对于rsync
用例来说不是。不过,有它们还是不错的。
看这个 Github 问题/评论了解更多详情。摘要是“元数据”将允许 WSL 存储所创建文件的权限作者:WSL在 drvfs 驱动器上,但创建的文件通过 Windows仍将被分配给 root。因此,如果rsync
包含这些文件,仍然会存在权限问题。 uid/gid
另一方面,将把文件的 WSL 所有权分配给您的用户,无论它们是在 WSL 还是 Windows 中创建的。
您的答案中的和enabled
选项root
已被 WSL 默认设置为这些值,因此它们实际上根本没有必要。