WSL(Ubuntu 20.04)——权限不稳定

WSL(Ubuntu 20.04)——权限不稳定

我是 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为您的用户。从技术上讲,metadatafmaskumask选项对于设置来说甚至不是必需的uid/gid。至少对于rsync用例来说不是。不过,有它们还是不错的。

这个 Github 问题/评论了解更多详情。摘要是“元数据”将允许 WSL 存储所创建文件的权限作者:WSL在 drvfs 驱动器上,但创建的文件通过 Windows仍将被分配给 root。因此,如果rsync包含这些文件,仍然会存在权限问题。 uid/gid另一方面,将把文件的 WSL 所有权分配给您的用户,无论它们是在 WSL 还是 Windows 中创建的。

您的答案中的和enabled选项root已被 WSL 默认设置为这些值,因此它们实际上根本没有必要。

相关内容