我们正在研究新的 AWS 功能弹性文件系统 (EFS)。警告之一是不支持 Windows Server EC2 实例(https://docs.aws.amazon.com/efs/latest/ug/gs-step-one-create-ec2-resources.html)这似乎是与 EFS 使用 NFS v4.1 的事实有关,而 Windows 服务器将不支持这一点。
但是,官方 Windows Server 2012 R2 文档指出它将支持 NFS 服务器/客户端 v4.1 ( https://technet.microsoft.com/en-us/library/jj574143(v=ws.11).aspx )
如果是这种情况,则 Windows Server 2012 R2可以挂载 EFS v4.1 目标,并且不支持 Windows 的提及是没有根据的。目前还不清楚,如果有人能明确回答,那将不胜感激。
我只在服务器和客户端上运行 nfs4。我不确定最近更改了什么,但我无法再挂载以前能够挂载的导出文件系统。我刚刚将客户端计算机从 Fedora 31 升级到 32...但我发誓升级后 nfs 仍然可以立即工作。
在客户端我做:
# mount /foo
mount.nfs4: Protocol not supported
Run Code Online (Sandbox Code Playgroud)
尚未/etc/fstab更改。处尚未安装任何内容/foo。mount.nfs4我手动发出相同的结果。
在客户端使用wireshark,我可以看到绝对没有任何内容发送到nfs服务器(或从同一服务器接收)。使用 tcpdump,从客户端重新启动之前到尝试挂载之后,我在服务器端看不到任何内容。所以我猜这是一个客户端问题?
我在日志中看不到任何内容。我找不到任何东西来结束客户端安装的日志记录级别。
谁能告诉我如何发现客户正在做什么(或没有做什么)?
按照要求...
dmesg提及 nfs|NFS:
[ 7.987799] systemd[1]: Starting Preprocess NFS configuration convertion...
[ 7.993220] systemd[1]: nfs-convert.service: Succeeded.
[ 7.993342] systemd[1]: Finished Preprocess NFS configuration convertion.
[ 12.484481] RPC: Registered tcp NFSv4.1 backchannel transport module.
Run Code Online (Sandbox Code Playgroud)
在fstab客户端:
foo:/ /foo nfs4 noauto,sec=sys,proto=tcp,clientaddr=xx.xx.xx.xx,port=1001 0 0
Run Code Online (Sandbox Code Playgroud)
客户端有多个IP。服务器希望掩盖它提供 nfs 的事实。为了使它更容易,它只支持 nfs4。netstat服务器上的FWIW给出(为了清晰起见进行了编辑):
Prot R-Q S-Q Local …Run Code Online (Sandbox Code Playgroud) 我在使用某些软件时遇到问题,该软件只能挂载 NFSv3 和 NFSv4 共享 - 它无法挂载 NFSv4.1 或 NFSv4.2。
由于我无权访问服务器本身,因此我无法确定正在使用的 NFS 的确切版本。
我知道 rpcinfo 命令:
rpcinfo -p server
Run Code Online (Sandbox Code Playgroud)
打印出共享的版本,如下所示:
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
7507 1 tcp 7507
100024 1 udp 20049 status
100024 1 tcp 20049 status
100003 3 tcp 2049 nfs
100005 1 tcp 20048 mountd
100005 …Run Code Online (Sandbox Code Playgroud) 服务器 CentOS 6.5 和 Selinux 允许
我的 NFS 服务器在 /etc/exports 中共享
/home/unixmen/ 10.0.0.0/24 (rw,sync,no_root_squash)
Run Code Online (Sandbox Code Playgroud)
客户端运行在另一台 CentOS 6.5 主机上,可以正常挂载。
当我尝试使用 autofs 进行自动挂载时,没有任何效果,谷歌搜索这个问题以找出根本原因,但没有成功。
我想知道我是否在做一些基本的错误..
请参阅 autofs 配置
~]$ cat /etc/auto.master
#/net -hosts
#+auto.master
/misc /etc/auto.misc
Run Code Online (Sandbox Code Playgroud)
和
~]$ cat /etc/auto.misc
unixmen -fstype=nfs 10.0.0.14:/home/unixmen
Run Code Online (Sandbox Code Playgroud)
我确实更改了日志级别以在 /etc/sysconfig/autofs 中进行调试,重新启动 autofs 和日志后说
Jun 27 17:20:00 ganeshh automount[12322]: mounted indirect on /misc with timeout 300, freq 75 seconds
Run Code Online (Sandbox Code Playgroud)
不确定这是否与安装问题有关
最近,我在日志中获取了这些数据
Jun 27 18:11:49 ganeshh automount[12322]: expire_proc: exp_proc = 3063937904 path /misc
Jun 27 18:11:49 ganeshh automount[12322]: expire_cleanup: got …Run Code Online (Sandbox Code Playgroud) 我的网络中有 4-5 台 Ubuntu 14.04 服务器,我想/home在它们之间共享一个公共目录。我已经设置了 nfs 服务器,并且可以在各种客户端上安装目录。但是我的问题是用户 ID。
示例:nfs服务器上的用户是 UID 1003,但在 nfs客户端上,同一用户是 UID 1002,在另一个 nfs 客户端上是 1005。
在解决这个冲突时,我有哪些选择?我在寻找选项方面进行了相当广泛的谷歌搜索,但找不到明确的答案。我是否可以将用户从一个 UID 映射到另一个,或者我是否可以手动更改所有框的 UID?
这是我的当前 /etc/exports
home 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
我有 nfs 挂载到远程机器上的目录。当远程机器宕机或断线时,任何在nfs(如:ls,或open file)上的命令都卡住了。
如果 nfs 目录不可用,我希望它在几秒钟内失败。
我该怎么做?
在/etc/fstab我看到
<remote-host-ip>:/path/to/origin /shared/point nfs defaults 0 0
Run Code Online (Sandbox Code Playgroud)
当我运行时,mount我看到:
<remote-host-ip>:/path/to/origin on /shared/point type nfs4 (rw,relatime,vers=4.1, rsize=1048576,wsize=1048576,namelen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=<my-ip>,local_loc=none,addr=<remote-ip>)
Run Code Online (Sandbox Code Playgroud) 我有两台 RHEL 7 机器。
我已经安装了 nginx 和 php-fpm 并设置了 nfs 安装。我可以毫无问题地读/写 nfs 挂载,并且我有另一个能够对其进行读写的应用程序服务器 (Apache Geronimo)。
当我安装 nginx 时,它会设置一个我在 NFS 文件服务器上创建的 nginx 用户,该用户具有相同的 uid 和 gid。
我可以使用 nginx 用户列出 nfs 客户端挂载上的文件。但是,当我尝试使用 nfs 中的 nginx 提供静态 html 或动态 php 文件时,出现权限错误:
*5 stat() "/usr/depot/repository/test.php" failed (13: Permission denied)
*5 open() "/usr/depot/repository/test.html" failed (13: Permission denied)
Run Code Online (Sandbox Code Playgroud)
此外,我在 /usr/depot/testing 下创建了具有相同权限的文件夹(只是不是 nfs),并且效果很好。
这是客户端上的安装信息。
xxx.xxx.xxx.xxx:/mnt/repository on /usr/depot/repository type nfs4 (rw,nosuid,nodev,noexec,relatime,vers=4.0,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=xxx.xxx.xxx.xxx,local_lock=none,addr=xxx.xxx.xxx.xxx)
Run Code Online (Sandbox Code Playgroud)
我看不出这个设置有什么问题,所以我不知道为什么 nginx 无法从 nfs 共享中读取文件。
更新
好的,我刚刚禁用了 SELinux 重启并修复了它。现在的问题是如何配置 SELinux 以便 nginx 可以访问远程服务器。
如何使用/etc/export.d/导出文件系统?
我正在尝试通过 nfs 导出 sge 单元的配置。但是,导出似乎不起作用。
# cat /etc/exports.d/sge-example.com
/opt/sge/example.com 192.0.2.0/24(ro)
# exportfs -rv
exportfs: No file systems exported!
# strace exportfs -rv 2>&1
execve("/usr/sbin/exportfs", ["exportfs", "-rv"], [/* 27 vars */]) = 0
brk(NULL) = 0x55d9bfde2000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb67e9e0000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=28419, ...}) = 0
mmap(NULL, 28419, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fb67e9d9000
close(3) = 0
open("/lib64/libwrap.so.0", O_RDONLY|O_CLOEXEC) = …Run Code Online (Sandbox Code Playgroud) 我一直在 NFSv4 中尝试用户/组 ID 映射(翻译)。我想要实现的是基于名称的 ID 转换,它独立于服务器和客户端上的实际 UID/GID。
许多指南和文章提到,要使 ID 映射正常工作,您必须在客户端模块和服务器模块中将nfs4_disable_idmapping参数设置为0(又名 N) 。但是,我没有找到任何有关此参数的具体用途的信息或文档。nfsnfsd
作为实验,我配置了 NFSv4 服务器和客户端(使用sec=krb5),并故意将这些参数保留为其默认值(禁用映射)。我可以验证服务器上是否禁用了映射:
$ cat /sys/module/nfsd/parameters/nfs4_disable_idmapping
Y
Run Code Online (Sandbox Code Playgroud)
并在客户端上:
$ cat /sys/module/nfs/parameters/nfs4_disable_idmapping
Y
Run Code Online (Sandbox Code Playgroud)
我在服务器上创建了用户bob(uid=1002)and ,在客户端上创建了用户and 。正如您所看到的,UID 不匹配,但是用户仍然映射正确。用户在服务器上创建的文件被视为由服务器拥有,反之亦然。sam(uid=1001)bob(uid=1003)sam(uid=1004)bobbob
此外,如果我查看客户端上的日志:
nfsidmap[1874]: key: 0x322c739a type: uid value: bob@home.lan timeout 600
nfsidmap[1874]: nfs4_name_to_uid: calling nsswitch->name_to_uid
nfsidmap[1874]: nss_getpwnam: name 'bob@home.lan' domain 'home.lan': resulting localname 'bob'
nfsidmap[1874]: nfs4_name_to_uid: nsswitch->name_to_uid returned 0
nfsidmap[1874]: nfs4_name_to_uid: final return value is 0
Run Code Online (Sandbox Code Playgroud)
并在服务器上: …
我正在研究创建 PB 存储阵列的不同方法。一种看起来很有趣的选项是 pNFS;但是,我无法找到有关如何设置它的详细信息。
如何在 CentOS 6.6 服务器上设置 pNFS?如何指定哪些服务器充当元数据服务器,哪些充当数据服务器?
当前使用 NFS4 idmapping。如果我手动将 NFS 服务器上的文件“ /sys/module/nfsd/parameters/nfs4_disable_idmapping”更新为“ N ”并刷新缓存,UID 和 GID 将正确显示在 NFS 客户端上。问题是在重新启动时似乎将此文件更改回“ Y ”
解决方案“尝试在服务器上强制使用数字 ID:echo "options nfs nfs4_disable_idmapping=1" > /etc/modprobe.d/nfs.conf 并重新启动 NFS 服务器。 ”似乎没有帮助。我什至试过 nfs4_disable_idmapping=0
我们的业务应用程序在两个节点(节点 1 和节点 2)上运行 Docker Swarm 部署。
应用程序需要一个卷来存储持久数据。由于尚不清楚容器部署在哪里(节点 1 或节点 2),并且应用程序的两个容器可能应该在两个节点上运行,因此我们需要一个解决方案来为所有节点提供共享卷。
为了共享卷,我们使用以下 /etc/exports 文件在第三个节点 3 上设置 NFS 服务器:
/srv *(rw,sync,anonuid=1000,anongid=1000,all_squash,subtree_check,crossmnt,fsid=root)
Run Code Online (Sandbox Code Playgroud)
(我使用 anonuid/gid 为导出中的每个文件显式设置 node3 系统中已知用户的用户信息。 all_squash 用于确保所有访问用户的所有文件权限都重写给该本地用户)
在我们的 docker-compose.yml 中,我们使用以下设置来包含卷:
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=node3.example.com,rw,nolock,soft
Run Code Online (Sandbox Code Playgroud)
我们现在遇到了一个问题,容器只是不想启动,错误消息是:
failed to copy file info for /var/lib/docker/volumes/MY_CONTAINER_nfs-data/_data: failed to chown /var/lib/docker/volumes/MY_CONTAINER_nfs-data/_data: lchown /var/lib/docker/volumes/MY_CONTAINER_nfs-data/_data: operation not permitted
Run Code Online (Sandbox Code Playgroud)
经过一番挖掘后,我发现问题在于 Node3 服务器上导出的 NFS 目录上的初始空文件夹。一旦我放入一个空文件,节点 1 和节点 2 中的容器启动就完全正常。
有人对此有解释吗?