我正在使用 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
同样的问题。我猜有两种方法。
- 关闭 QNAP-NAS 中的高级 ACL。转到控制面板 > 权限 > 共享文件夹 > 高级权限 > 取消选中 [] 启用高级文件夹权限
或者
按照如下方式添加
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 即可按预期工作。