QNAP-NAS / NFS 共享上的 git clone 不起作用

QNAP-NAS / NFS 共享上的 git clone 不起作用

我正在使用 QNAP NAS 作为我的 Ubuntu 主目录的存储服务器。一切似乎都运行良好,到目前为止,我没有遇到任何文件权限问题。 mount 的输出行是:

192.168.0.200:/homes/myuser on /home/myuser type nfs (rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.200,mountvers=3,mountport=30000,mountproto=udp,local_lock=none,addr=192.168.0.200)

但是,当我尝试将 git 存储库克隆到我的主目录时,我收到以下输出和错误消息:

myuser@ubuntu ~/test % git clone -v https://github.com/robbyrussell/oh-my-zsh.git
Cloning into 'oh-my-zsh'...
POST git-upload-pack (140 bytes)
remote: Counting objects: 17463, done.
fatal: Unable to create temporary file '/home/myuser/test/oh-my-zsh/.git/objects/pack/tmp_pack_XXXXXX': Permission denied
fatal: index-pack failed

运行命令后,目录 test 甚至不包含名为 的子目录oh-my-zsh。它仍然是空的。

目录的 getfacl/home/myuser/test/显示以下输出:

 myuser@ubuntu ~/test % getfacl .
# file: .
# owner: myuser
# group: mygroup
 user::rwx
 user:nobody:---
 user: myuser:rwx
 group::rwx
 mask::rwx
 other::---
 default:user::rwx
 default:user:nobody:---
 default:user: myuser:rwx
 default:group::rwx
 default:mask::rwx
 default:other::---

因此实际上应该没有权限问题,因为 myuser 拥有目录的所有权限。那么我是否遗漏了与权限相关的内容?或者这是一个与 NFS 相关的问题,我该如何解决?

答案1

同样的问题。我猜有两种方法。

  1. 关闭 QNAP-NAS 中的高级 ACL。转到控制面板 > 权限 > 共享文件夹 > 高级权限 > 取消选中 [] 启用高级文件夹权限

或者

  1. 按照如下方式添加noacl选项/etc/fstab。选项可能因您的偏好而异。

    192.168.0.200:/homes/myuser /home/myuser nfs defaults,_netdev,noacl 1 2

我选择了后者并且成功了。

编辑:如果您想继续使用高级 ACL,请确保 NFSv4 在您的 NAS 上处于活动状态。NFSv4 支持 ACL,但 NFSv3 可能不行。

编辑:我不推荐第一种方法。我试过了,结果却是一场噩梦。所有权限都被覆盖,文件夹 777,文件 666。所以你应该保留 NAS 选项,只更改客户端的 NFS 配置。

答案2

我在 QNAP 的 nfs 挂载上使用 git 时也遇到了类似的问题。不过我收到了不同的错误消息:

Cloning into 'tileserver-gl'...
remote: Counting objects: 2179, done.
remote: Compressing objects: 100% (813/813), done.
remote: Total 2179 (delta 1357), reused 2179 (delta 1357)
Receiving objects: 100% (2179/2179), 3.04 MiB | 22.72 MiB/s, done.
fatal: premature end of pack file, 83 bytes missing
warning: die() called many times. Recursion error or racy threaded death!
fatal: premature end of pack file, 81 bytes missing
fatal: index-pack failed

修复方法与 aximov 的答案不同。解决方案是将sync选项添加到中的挂载选项中/etc/fstab

添加该内容后,git clone 即可按预期工作。

相关内容