我在用:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal
$ mate-about --version
MATE Desktop Environment 1.24.0
...作为 NFS 客户端。
我在服务器上有一个 nfs4 共享;我/etc/fstab
在客户端上的输入如下:
172.16.0.5:/mydata /media/user/mydata_nfs nfs4 nosuid,nodev,nofail,x-gvfs-show,rw,relatime,user,noauto,uhelper=udisks2 0 0
我已经手动创建了/media/user/mydata_nfs
,它在启动时具有以下权限:
$ ls -la /media/user/
total 20
drwxr-x---+ 5 root root 4096 Jul 25 15:56 .
drwxr-xr-x 3 root root 4096 Jul 19 18:43 ..
...
drwxr-xr-x 2 user user 4096 Jul 25 12:11 mydata_nfs
上述 fstab 条目允许在启动时不挂载共享,因此我必须手动单击“文件资源管理器”GUI(此处caja
)才能执行此操作;但是,一旦挂载了共享,所有权(和时间戳)就会发生变化:
$ ls -la /media/user/
total 20
drwxr-x---+ 5 root root 4096 Jul 25 15:56 .
drwxr-xr-x 3 root root 4096 Jul 19 18:43 ..
...
drwxrwxrwx 6 root root 4096 Jul 29 06:15 mydata_nfs
在 NFS 服务器上,no_root_squash
已启用;据我了解,在这种情况下,客户端用户的 UID/GID 会传播到服务器,并且由于服务器上我的user
uid:gid 也为 1000:1000(与客户端一样),所以这对我来说很好(当我从客户端的命令行在共享内创建文件等时,所有权user
保留在共享上) - 除了客户端上的挂载点由 root 拥有(这给我带来了问题:安装的一些程序snap
甚至不会将共享列为目录)。
另外 - 即使使用上述 fstab 行(需要我手动挂载),当我尝试从 GUI 卸载时,也无法卸载,并且会出现一个对话框:
Unable to unmount mydata_nfs
Error finding object for block device 0:56
所以,我想要的是:
- NFS 共享将在启动时自动挂载 -
user
拥有共享 - 允许用户从 GUI 卸载共享
这是可能的吗 - 并且正确的 fstab 行是什么?
请注意,uid
fstab 选项(否则会对 ntfs 执行这种映射)在这里不起作用 - syslog 将会抱怨:
Jul 29 07:03:49 mypc mount[1148]: mount.nfs4: an incorrect mount option was specified
Jul 29 07:03:49 mypc kernel: [ 17.179641] nfs4: Unknown parameter 'uid'
Jul 29 07:03:49 mypc systemd[1]: media-user-mydata_nfs.mount: Mount process exited, code=exited, status=32/n/a
Jul 29 07:03:49 mypc systemd[1]: media-user-mydata_nfs.mount: Failed with result 'exit-code'.
Jul 29 07:03:49 mypc systemd[1]: Failed to mount /media/user/mydata_nfs.
对于 NFS 来说也是allow_other
未知参数。
答案1
好的,更进一步,这是我尝试过的:
/media/user/mydata_nfs
在手动挂载(从caja
GUI)并显示为 root 所有(如 OP 中所述)之后,我执行以下操作:
sudo chown user:user /media/user/mydata_nfs
... 确实,这确实改变了所有权 - 我最初以为这只是暂时的(仅适用于当前会话)。由于我无法从 GUI 卸载,因此我重新启动了,然后在下次启动时caja
再次手动(从 GUI)挂载了分区。我很惊讶地看到这被记住了,所以现在在列表中我有:
$ ls -la /media/user/
total 20
drwxr-x---+ 5 root root 4096 Jul 25 15:56 .
drwxr-xr-x 3 root root 4096 Jul 19 18:43 ..
...
drwxrwxrwx 6 user user 4096 Jul 29 08:05 mydata_nfs
因此由于某种原因,已挂载 NFS 分区的所有权变化仍然存在 - 这很好,因为它适合我的用例。
noauto
然后,我只需从条目中删除/etc/fstab
- 现在我已经在启动时安装了分区,并user
显示为所有者 - 这正是我想要的。
但事实证明,这还不足以安装并snap
使用软件 - 正如Snap 应用程序看不到来自其他分区的文件:
Snap 通常受到限制。默认情况下,Snap 只能访问其自己的可写区域,但它们可以通过接口获得权限。有两个接口提供超出默认权限的文件访问能力:接口
home
和removable-media
接口。...
因此,在这种情况下对我有用的是使用 bind 进行安装,正如该帖子所回答的那样:
$ mkdir ~/mydata_nfs
$ sudo mount --bind /media/user/mydata_nfs ~/mydata_nfs
...然后指向snap
软件读取/写入文件~/mydata_nfs
。
这解决了我的大部分问题,除了从 GUI 卸载 NFS 共享 - 所以如果有人知道怎么做的话,我仍然很乐意得到答案......