作者:cherry_odd
转自:http://blog.csdn.net/cherry_odd/article/details/11093927
一.NFS概述
一台NFS服务器就如同一台文件服务器,只要将其文件系统共享出来,NFS客户端就可以将它挂载到本地系统中,从而可以像使用本地文件系统中到文件一样使用那些远程文件系统中到文件。NFS服务的主要任务是把本地的一个目录通过网络输出,其他计算机可以远程地挂接这个目录并且访问文件。NFS服务有自己到协议和端口号,但是在文件传输或者其他相关信息传递的时候,NFS则使用远程调用(RPC,Remote Procedure Call)协议。RPC负责管理端口号的对应与服务相关的工作。NFS本身的服务并没有提供文件传递的协议,它通过RPC的功能负责。因此还需要系统启动portmap服务。
当客户机内核向远程NFS服务器发送一个请求,等待服务器相应。NFS服务器一直处于等待状态,如果接受到客户请求,就处理请求并将结果返回客户机,称这个过程为“导出export”;客户机访问服务器导出目录的过程称为“安装mount”,或称为:挂接/导入。如下图所示:
/ShareA,/ShareB和/ShareC分别是三台Linux中的NFS共享目录,那么客户端要访问服务器上的共享目录,就可以使用mount命令将它们分别安装在本地Linux系统的/mntA,/mntB,/mntC目录下,这样用户在访问远程系统中的文件就像访问本地的文件一样。
这招用在PC机和开发板的交叉编译时非常方便,开发板可以在授权的情况下访问PC机中共享的文件夹。
二.NFS配置
1.安装NFS服务
#yum install nfs-utils*
#yum install portmap
2.使能NFS服务
# systemctl enable nfs-server.service
此时,终端会出现:ln -s '/lib/systemd/system/nfs-server.service' '/etc/systemd/system/multi-user.target.wants/nfs-server.service'
3.检查NFS服务是否被启用
# systemctl is-enabled nfs-server.service
此时,终端会显示:enabled
4.启动NFS服务
# systemctl start nfs-server.service
或者用service命令# service nfs-server restart,此时终端会出现:Redirecting to /bin/systemctl restart nfs-server.service
5.查看NFS服务状态
# systemctl status nfs-server.service
终端会显示:
nfs-server.service - NFS Server
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled)
Active: active (running) since Wed, 04 Sep 2013 16:28:09 -0400; 3h 51min ago
Main PID: 4332 (rpc.rquotad)
CGroup: name=systemd:/system/nfs-server.service
├ 4332 /usr/sbin/rpc.rquotad
└ 4347 /usr/sbin/rpc.mountd
6.使NFS服务随系统启动
若想让NFS服务随系统启动的同时立即启动,可以使用ntsysv命令,如下图所示:
找到netfs服务,用空格键在netfs处作标记“*”,“确定”即可。
7.配置文件/etc/exports
ro此文件用于NFS服务段,文件格式如下:
共享目录 主机名称1或IP1(参数1,参数2....) 主机名称2或IP2(参数k,参数k+1....)
“共享目录”是主机上要向外输出的一个目录路径
“主机名称1或IP1”是允许按照指定权限访问这个共享目录的远程主机
“参数”定义各种访问权限,如下所示:
rw :可读写的权限ro :只读的权限
no_root_squash :登入NFS主机,使用该共享目录时相当于该目录的拥有者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权限,这个参数『极不安全』,不建议使用
root_squash :登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份
all_squash :不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody
anonuid :可以自行设定这个UID的值,这个UID必需要存在于你的/etc/passwd当中
anongid :同anonuid,但是变成groupID就是了
sync :资料同步写入到内存与硬盘当中
async :资料会先暂存于内存当中,而非直接写入硬盘
insecure :允许从这台机器过来的非授权访问
实例:/home/cherry/下载 192.168.1.105(rw,sync,no_root_squash,no_all_squash)
8.测试
本地测试# showmount -e localhost
# mount192.168.1.105:/home/cherry/下载 /mnt(下划线的地方如果用localhost代替很可能会出错)
# cd /mnt
# ls
去挂载:# umount /mnt
客户端tiny210上测试
# mount -t nfs -o nolock 192.168.1.100:/opt/FriendlyARM/tiny210/linux /mnt(下划线的地方表示主机的ip)
二.mount不上的时候怎么办?
1.最容易犯的就是低级错误,检查在客户端的putty处输入的mount命令的目录路径是否和服务器上的真实路径以及和/etc/exports中的路径一致,特别注意大小写,不然就会出现如下低级错误:
2.重启nfs-server服务和rpcbind服务
# service nfs-server restart
# service rpcbind restart
3.检查服务器上要mount挂载的目录的权限是否是可读可写,不是的话用chmod指令
# chmod 777 /../...
4.每次开机后自动运行 rpcbind 和 nfs 服务:红帽及其 关联 发行版本早就用 rpcbind 代替 portmap了
# chkconfig nfs-server on
# chkconfig rpcbind on
5.防火墙关了否
用setup命令进入查看
6. /etc/exports文件中的格式是否正确
7.检查/etc/hosts.allow
8.检查系统log文件/var/log/messages
9.注意非常重要的一点,开发主机PC和tiny210应该是通过有线连接起来的。
10.问题nfs:server is not responding, still trying
http://blog.csdn.net/do2jiang/article/details/4950613
http://blog.csdn.net/ghostyu/article/details/7294543
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.100:/home/cherry/cherry_DataFile/executable_file_to_tiny210 /mnt