ubuntu NFS

NFS(Network File System, 网络文件系统)可以通过网络将分享不同主机(不同的OS)的目录——可以通过NFS挂载远程主机的目录, 访问该目录就像访问本地目录一样!

一般而言, 使用nfs能够方便地使各unix-like系统之间实现共享. 但如果需要在unix-like和windows系统之间共享, 就得使用samba了!

NFS运行在SUN的RPC(Remote Procedure Call, 远程过程调用)基础上, RPC定义了一种与系统无关的方法来实现进程间通信. 由此, NFS server也可以看作是RPC server.

正因为NFS是一个RPC服务程序, 所以在使用它之前, 先要映射好端口——通过portmap设定. 比如: 某个NFS client发起NFS服务请求时, 它需要先得到一个端口(port). 所以它先通过portmap得到port number. (不仅NFS, 所有的RPC服务程序启动之前, 都需要设定好portmap)

在启动RPC服务(比如NFS)之前, 需要启动portmap服务!(关于nfs和portmap是否存在于当前系统, 看后面的"NFS安装"部分.

与NFS相关的几个文件, 命令

1、/etc/exports

对NFS卷的访问是由exports来批准, 它枚举了若干有权访问NFS服务器上文件系统的主机名.

2、/sbin/exportfs

维护NFS的资源共享. 可以通过它重新设定 /etc/exports 的共享目录, 卸载NFS Server共享的目录或者重新共享等.

3、/usr/sbin/showmount

用在 NFS Server 端,而 showmount 则主要用在 Client 端. showmount 可以用來查看 NFS 共享的目录资源.

4、/var/lib/nfs/xtab

NFS的记录文档: 通过它可以查看有哪些Client 连接到NFS主机的记录.

下面这几个并不直接负责NFS, 实际上它们负责所有的RPC

5、/etc/default/portmap

实际上, portmap负责映射所有的RPC服务端口, 它的内容非常非常之简单(后面详述)

6、/etc/hosts.deny

设定拒绝portmap服务的主机

7、/etc/hosts.allow

设定允许portmap服务的主机

安装NFS

Debian/Ubuntu上默认是没有安装NFS服务器的,首先要安装NFS服务程序:

$ sudo apt-get install nfs-kernel-server

(安装nfs-kernel-server时,apt会自动安装nfs-common和portmap)

这样,宿主机就相当于NFS Server。

同样地,目标系统作为NFS的客户端,需要安装NFS客户端程序。如果是Debian/Ubuntu系统,则需要安装nfs-common。

$ sudo apt-get install nfs-commmon

nfs-common和nfs-kernel-server都依赖于portmap!

配置NFS

由于NFS是一个RPC server程序. 而portmap是用来挂你RPC的端口号映射的. 所以先要配置portmap.

配置portmap

方法1: 编辑/etc/default/portmap, 将 -i 127.0.0.1 去掉.

方法2: $ sudo dpkg-reconfigure portmap , 对Should portmap be bound to the loopback address? 选N.

配置/etc/hosts.deny

(禁止任何host(主机)能和你的NFS服务器进行NFS连接),加入:

### NFS DAEMONS

portmap:ALL

lockd:ALL

mountd:ALL

rquotad:ALL

statd:ALL

配置/etc/hosts.allow

允许那些你想要的主机和你的NFS服务器建立连接。下列步骤将允许任何IP地址以192.168.2开头的主机(连接到NFS服务器上),也可以指定特定的IP地址。参看man页 hosts_access(5), hosts_options(5)。加入:

### NFS DAEMONS

portmap: 192.168.2.

lockd: 192.168.2.

rquotad: 192.168.2.

mountd: 192.168.2.

statd: 192.168.2.

/etc/hosts.deny 和 /etc/hosts.allow 设置对portmap的访问. 采用这两个配置文件有点类似"mask"的意思. 现在/etc/hosts.deny中禁止所有用户对portmap的访问. 再在/etc/hosts.allow 中允许某些用户对portmap的访问.

运行 $ sudo /etc/init.d/portmap restart 重启portmap daemon.

配置/etc/exports

NFS挂载目录及权限由/etc/exports文件定义

比如我要将将我的home目录中的/home/zp/share目录让192.168.2.*的IP共享, 则在该文件末尾添加下列语句:

/home/zp/share 192.168.2.*(rw,sync,no_root_squash)

或者:/home/zp/share 192.168.2.0/24(rw,sync,no_root_squash)

192.168.2.* 网段内的NFS客户端能够共享NFS服务器/home/zp/share目录内容.且有读,写权限, 并且该用户进入/home/zp/share目录后的身份为root

最好加上sync, 否则 $ sudo exportfs -r 时会给出警告, sync是NFS的默认选项.

运行 $ showmount -e 查看NFS server的export list.

若更改了/etc/exports, 运行 $ sudo exportfs -r 更新

运行 $ sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务

/etc/exports实际上就是nfs服务器的核心配置文件了. 鸟哥的Linux私房菜列举了一些exports文件的写法.

测试NFS

可以尝试一下挂载本地磁盘(假设本地主机IP地址为:192.128.2.1,将/home/zp/share挂载到/mnt)

$ sudo mount 192.168.2.1:/home/zp/share /mnt

运行 $ df 看看结果

$ sudo umount /mnt

注意被拷贝文件的读/写权限!

另外, 可以使用一定的参数:

使用加参数的办法:mount -o nolock,rsize=1024,wsize=1024,timeo=15 192.168.2.130:/tmp/ /tmp/

[

可以尝试一下挂载本地磁盘(假设本地主机IP地址为:59.64.195.97,将/home/warmbupt/arm/nfs 挂载到/mnt)
$ sudo mount 59.64.195.97:/home/warmbupt/arm/nfs /mnt
运行 $ df 看看结果
$ sudo umount /mnt
如果 出现 permission deny:
试一试 :sudo mount -o nolock -t nfs 59.64.195.97:/home/warmbupt/arm/nfs /mnt搞定。

]

[

讲解安装Ubuntu nfs配置系统

http://os.51cto.com 2010-01-07 15:29 佚名 CSDN 我要评论(

  • 摘要:Ubuntu上默认是没有安装Ubuntu nfs服务器的,因此我们首先安装Ubuntu nfs服务器端:$sudo apt-get install nfs-kernel-server。
  • 标签:Ubuntu nfs

对大家推荐很好使用的nfs服务系统之前,像让大家对Ubuntu nfs服务系统有所了解,然后对Ubuntu nfs服务系统全面讲解介绍,希望对大家有用配置Ubuntu nfs服务器,可见Ubuntu隶属于linux阵营。顺便问一句楼主既然没有文档何必一定要学ubuntu,还是学有文档的比较方便。

在Ubuntu下安装、配置Ubuntu nfs服务的步骤如下:

1、安装Ubuntu nfs
Ubuntu上默认是没有安装Ubuntu nfs服务器的,因此我们首先安装Ubuntu nfs服务器端:$sudo apt-get install nfs-kernel-server
在一些文档中,提出还需要使用apt-get来手动安装nfs的客户端nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动为我们把它们安装好。

2、配置/etc/exports
Ubuntu nfs允许挂载的目录及权限在文件/etc/exports中进行了定义。
例如,我们要将根目录下的rootfs目录共享出来,那么我们需要在/etc/exports文件末尾添加如下一行:/rootfs *(rw,sync,no_root_squash)
其中:/rootfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squash是Ubuntu nfs客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限。

其它Ubuntu nfs常用的参数有:
ro 只读访问
rw 读写访问sync 所有数据在请求时写入共享
async nfs在写入数据前可以响应请求
secure nfs通过1024以下的安全TCP/IP端口发送
insecure nfs通过1024以上的端口发送
wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置。
hide 在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID

3、Ubuntu nfs重启服务
$sudo /etc/init.d/portmap restart
$sudo /etc/init.d/nfs-kernel-server restart

4、测试Ubuntu nfs
此时可以运行以下命令来显示一下共享出来的目录:
$showmount -e
或者可以使用以下命令把它挂载在本地磁盘上,例如将/rootfs挂载到/mnt下:
$ sudo mount -t nfs localhost:/rootfs /mnt
可以运行df命令查看是否挂载成功。查看后可以使用以下命令卸载:
$ sudo umount /mnt

]

[

解决mount.nfs:access denied by server while mounting

ifconfig 得到 ubuntu资料
INET ADDR 192.168.0.4
BCAST 192.168.0.255
MASK 255.255.255.0
一 安装NFS
$ sudo apt-get install nfs-kernel-server
$ sudo apt-get install nfs-common
二 配置NFS
1 $ sudo dpkg-reconfigure portmap , 对Should portmap be bound to the loopback address? 选N
2 $ sudo /etc/default/portmap 末行清除 "-i 127.0.0.1"
三 配置hosts.deny
$ sudo vi /etc/hosts.deny
文本末添加
### NFS DAEMONS
portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL
四 配置hosts.allow
$ sudo vi /etc/hosts.allow
文本末加入
### NFS DAEMONS
portmap: 192.168.0.
lockd: 192.168.0.
rquotad: 192.168.0.
mountd: 192.168.0.
statd: 192.168.0.
$ sudo /etc/init.d/portmap restart 重启portmap daemon.
显示如下
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart portmap
portmap start/running, process XXXX
五 配置/etc/exports
$ sudo vi /etc/exports
文本末添加
/home/work *(rw,sync,no_root_squash)
chmod 777 -R /home/work
$ sudo showmount -e
显示 clnt-create : RPC : Program not registered
$ sudo exportfs -r 更新
$ sudo showmount 192.168.0.4 -e
显示
Export list for 192.168.0.4:
/home/work *
六 启用
$ sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
显示如下
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon... [ OK ]
* Exporting directories for NFS kernel daemon...
exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/home/work".
Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x

* Starting NFS kernel daemon [ OK ]
挂载
mount -t nfs 192.168.0.4:/home/work /nfsmnt
mount -t nfs 192.168.0.4:/home/work /nfsmnt -o nolock

]

[

ubuntu测试本机nfs出错:mount.nfs:access denied by server while mounting

2009-03-03 11:54

相信出现这种错误的应该有一些人吧,没关系,一会就帮你搞定。
首先运行:sudo vim /etc/exports
在其文本后添加
/home/work 192.168.1.*(rw,sync,no_root_squash)
然后保存退出。
/home/work就表示共享目录,当然,你可以随便换成自己喜欢的目录,192.168.1.*,前面三位是你主机的ip地址(怎么获得本机的ip地址?ifconfig命令就可以了)
rw:读/写权限,只读权限的参数为ro;
sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。 no_root_squash:NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。
下面蓝色的文字,可略过去!
起用保护机制
上面设置了只要在192.168.1.*这个网段的所有IP地址用户都可以访问共享目录,但我只想让一个IP地址访问,比如192.168.1.101(把刚才192.168.1.*直接换成192.168.1.101不行么?应该可以吧,没试过),那么就可以这样设置了。
可以通过设定/etc/hosts.deny和/etc/hosts.allow文件来限制网络服务的存取权限。
***/etc/hosts.deny***
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
***/etc/hosts.allow***
portmap:192.168.1.101
lockd:192.168.1.101
mountd:192.168.1.101
rquotad:192.168.1.101
statd:192.168.1.101
同时使用这两个文件就会使得只有ip为192.168.1.101的机器使用NFS服务。你的target board的ip地址设定为192.168.1.101,这样就可以了。
蓝色文字可略过。
接着执行如下命令:
启动端口映射: #sudo /etc/rc.d/init.d/portmap start(如果说找不到,就执行 #sudo /etc/init.d/portmap start) 如果这一步不成功,最后也连接不上了。
启动NFS 服务: #sudo /etc/rc.d/init.d/nfs start(又找不到,执行 #sudo /etc/init.d/nfs start或#sudo /etc/init.d/nfs-kernel-server start )
这两项执行成功 的话,就会显示[ok]
最后执行:#sudo mount –t nfs 192.168.1.101:/home/work /mnt
这里面的192.168.1.101是你自己主机的ip地址,也可以用127.0.0.1来代替自己的主机ip地址,同样可以连接上。/home/work就是刚才在etc/exports里添加的路径。
如果在这一步又出错了,呵呵,重新#sudo vim /etc/exports,将“ 192.168.1.* ”换成“*”,就这一个星星哦!
执行:# ls /mnt
恭喜你,mnt下是不是有了/home/work里的内容了。
如果上面操作做好了,还是不行,我觉得你应该重启一下机子试一下了!

]

原文地址:https://www.cnblogs.com/wang-le/p/3278979.html