我将 FreeBSD ( test.local
) 框配置为 NFS 服务器。我正在尝试从我的 mac ( hhmm.local
)挂载它的 NFS 共享
/nfs hhmm.local
Run Code Online (Sandbox Code Playgroud)
/nfs
有777
权限。
我从 mac 上检查它正在工作,
hhmm:~ Eonil$ showmount -e test.local
Exports list on test.local:
/nfs test.local
hhmm:~ Eonil$
Run Code Online (Sandbox Code Playgroud)
但是当我尝试安装它时,
hhmm:~ Eonil$ mount_nfs test.local:/nfs ~/nfs
mount_nfs: can't access /nfs: Permission denied
hhmm:~ Eonil$
Run Code Online (Sandbox Code Playgroud)
哇。我无法弄清楚为什么这不起作用。我该怎么办?
我在远程驱动器上有大量数据(几 GB),通过 nfs 透明安装。我想将这些文件复制到它们已经驻留的子目录中,因此所有内容都保留在同一个物理磁盘上。出于这个原因,我想防止不必要的网络往返。
这似乎是cp files* subdir
一件天真的事情,将所有数据读入内存,然后将其写回。真的吗?是否有一个特殊的命令可以完全在磁盘物理连接的服务器上进行实际复制?
我在安装 NFS 共享时遇到了无法解决的问题,这让我发疯。情况是这样的:
涉及三台机器:
主机A:mandrake,IP 192.168.1.4,NFS服务器
主机B:athlon64,IP 192.168.1.64,NFS客户端
主机C:lap-fzs-2,IP 192.168.1.27,NFS客户端
主机 A 有一个 NFS 服务器运行,它导出一个由主机 B 挂载的目录。这工作完美,并且已经工作了很长时间。没问题。现在主机 C 出现了。Ubuntu 12.04 LTS,现代系统。我尝试从主机 A 挂载相同的共享,但收到权限被拒绝错误:
root@lap-fzs-2:~# mount -t nfs mandrake:/data /data -onfsvers=2
mount.nfs: access denied by server while mounting mandrake:/data
Run Code Online (Sandbox Code Playgroud)
它在主机 A 和 B 之间工作的事实应该证明 NFS 导出本身正在工作。这是我可以提供的信息,使我认为它应该起作用。也许有人看到了我不知道的东西,并知道为什么这会在新主机 C 上失败。
服务器出口:
[root@mandrake /root]# cat /etc/exports
/suse 192.168.1.0/16(ro,no_root_squash)
/data 192.168.1.0/24(rw)
#/data3 192.168.2.0/24(rw)
#/data 192.168.2.0/16(rw,all_squash,anonuid=500,anongid=500)
#/data3 192.168.2.0/16(rw,all_squash,anonuid=500,anongid=500)
[root@mandrake /root]# exportfs
/suse 192.168.1.0/16
/data 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)
端口映射器正在运行,导出是已知的,并由主机 B“athlon64”装载。
[root@mandrake /root]# showmount -e
Export list for mandrake:
/data …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Windows 7 NFS 客户端访问 Fedora FC 11 NFS 服务器。Windows NFS 客户端向 NFS 服务器提供的身份只能在 AD 中设置,或者如果运行在 Windows Server 2003 R2 上运行的特殊身份服务器。
有没有办法从独立的 Windows 客户端机器设置身份?
好的。在谷歌搜索了几个小时后,我找不到我需要的东西。通过命令行在 Windows 7 中挂载 Ubuntu NFS 共享后,它说它连续挂载。我知道它是成功的,因为我可以(在 cmd 中)cd
到我选择的驱动器号(在本例中为 W),然后dir
就好了。列出应有的所有文件。
问题出现在资源管理器中。出于某种原因,它不会显示新的驱动器号(再次,W),也不会显示在磁盘管理中。
关于需要改变什么的任何建议?
NFS 共享已挂载到/vol/mynfs
Linux 客户端。它不显示任何文件夹,ls
并且 bash 完成也不起作用/vol/mynfs
。但是在更改到子目录后,所有文件都可见。
$ ls /vol/mynfs
total 0
$ cd /vol/mynfs/test
$ ls # shows all files as expected now.
Run Code Online (Sandbox Code Playgroud)
为什么文件首先不可见,如何使它们始终可见?
我们目前在小型办公室中使用 NFSv4 进行文件共享。
不幸的是,网络不是很稳定,如果网络消失,它似乎对 Ubuntu 客户端产生巨大影响:整个系统冻结 - 我认为这是由于 nfs 挂载。
那么在网络上提供文件的替代方法是什么?
我习惯了 Samba,但这似乎不对,因为只涉及 Linux。
安全不是网络中的问题。
作为文件损坏的常见原因,文档经常引用“NFS 没有正确实现文件级锁定”或类似的原因,例如,对于 SQLite:
如何损坏 SQLite 数据库文件,第 2.1 段
2.1 具有损坏或丢失锁实现的文件系统
SQLite 依赖于底层文件系统来进行锁定,正如文档所说的那样。但是一些文件系统在其锁定逻辑中包含错误,因此锁定并不总是像宣传的那样工作。这对于网络文件系统和 NFS 尤其如此。如果在锁定原语包含错误的文件系统上使用 SQLite,并且如果两个或多个线程或进程尝试同时访问同一个数据库,则可能会导致数据库损坏。
这 - 或类似的东西 - 十多年来经常被提及,通常在混合 Windows/Unix 环境中。但是,我从未发现任何迹象表明哪些网络文件系统(或客户端/服务器组合)实际上处于危险之中。
我可以告诉我的客户什么?
我有一个 C++ 应用程序测试,它在 NFS 挂载目录中创建了 10,000 个文件,但我的测试最近失败了一次,因为一个文件在该目录中与所有其他 10,000 个文件以相同的名称出现了两次。这可以在安装了 NFS 目录的 Linux Centos v4 或 v5 上看到,但不能在磁盘所在的主机上看到。
怎么可能在同一个目录中有两个同名的文件?
[centos4x32 destination] ls -al ./testfile03373
-rwx------ 1 user root 3373 Sep 3 03:23 ./testfile03373*
[centos4x32 destination] ls -al ./testfile03373*
-rwx------ 1 user root 3373 Sep 3 03:23 ./testfile03373*
-rwx------ 1 user root 3373 Sep 3 03:23 ./testfile03373*
[centos4x32 destination] ls -al *testfile03373
-rwx------ 1 user root 3373 Sep 3 03:23 testfile03373*
-rwx------ 1 user root 3373 Sep 3 03:23 testfile03373*
[centos4x32 destination] …
Run Code Online (Sandbox Code Playgroud) 我有一个成熟的 Linux 服务器 (Ubuntu 12.04) 和一个新的 Synology NAS,但无法在挂载点上获得正确的 NFS 用户权限。
服务器还从另一台 Ubuntu 服务器安装 NFS 导出没有问题,但该 NFS 服务器和客户端上的 UID 是相同的(范围从 1001 到 1015)。对于 Synology,UID 从 1024 开始。
以下行来自/etc/fstab
Synology 和其他示例显示如何配置安装。
nas:/volume1/Video /mnt/nas/Video nfs nouser,rsize=8192,wsize=8192,atime,auto,rw,dev,exec,suid 0 0
Run Code Online (Sandbox Code Playgroud)
我配置idmapd.conf
如下:
[General]
Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
Domain = SYNOLOGY
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
[Static]
homenas@SYNOLOGY = homenas
Run Code Online (Sandbox Code Playgroud)
此时,当我挂载文件夹时,一切看起来都是正确的,直到我创建了一个文件。该文件归nobody.nogroup 所有,但我仍然可以对其进行更改。
$ id
uid=1002(homenas) gid=1002(homenas) groups=1002(homenas) …
Run Code Online (Sandbox Code Playgroud)