Debian下NFS安装及配置
2008-11-29 20:47:02
分类: 系统运维
本文主要用以简单快速的实现NFS的安装和配置。 (这里有关于NFS比较详细的介绍。 http://www./2004/10-9/195838.html ) NFS(Network File System, 网络文件系统)可以通过网络将分享不同主机(不同的OS)的目录——可以通过NFS挂载远程主机的目录, 访问该目录就像访问本地目录一样! 1。安装: $sudo aptitab instab nfs-kenrnel-server (nfs-common -NFS support files common to client and server, 会自动安装) (nfs-common和nfs-kernel-server都依赖于portmap,portmap会自动安装) 这样服务端安装完毕。 (客户端可安装nfs-client,) 2.配置: 首先配置portmap: $sudo vi /etc/hosts.allow 加入: ### NFS DAEMONS portmap: 192.168.0. lockd: 192.168.0. u家bitscn.net rquotad: 192.168.0. mountd: 192.168.0. statd: 192.168.0. (同样可配置/etc/hosts.deny 把上述全部相应的改为 :All ,这样可实现允许+禁止的有效定制) $sudo vi /etc/default/portmap 将 -i 127.0.0.1 注释掉。 $sudo /etc/init.d/portmap restart 重启portmap daemon. 然后配置NFS: $sudo vi /etc/exports (NFS挂载目录及权限由/etc/exports文件定义,NFS核心配置文件!) 示例: /home/xxx/myShare 192.168.0.*(rw,sync,no_root_squash) (若更改了/etc/exports, 运行 $sudo exportfs -r 更新) $sudo /etc/init.d/nfs-kernel-server restart (可以到/var/log/messages里面查看是否正确激活) $sudo showmount -e 查看NFS server的export list. 3. 测试NFS $sudo mount 192.168.0.123:/home/alyan/share /mnt/nfs_test 运行 $ df 看看结果 $sudo umount /mnt/nfs_test 4.NFS客户端的设定 #mount -t nfs hostname(orIP):/directory /mountpoint 搞定,就这么简单。 嵌入式linux内核应该支持NFS客户端: 内核设置时,选择如下: File system--> Network File Systems--> 选中NFS System support和Provide NFSvs client support,然后保存退出,重新编译内 核,将生成的zImage重新下载到target board。 1.2.2 在target board的linux shell下,执行下列命令来进行NFS共享目录的挂载。 #mkdir /mnt/nfs #mount -o nolock -t nfs severip:/home/lqm /mnt/nfs #ls /mnt/nfs 由于非常多嵌入式设备的根文件系统中不带portmap,所以一般都使用-o nolock参数,即 不使用NFS文件锁,这样就能避免使用portmap。如果顺利,在/mnt/nfs下,就能看到linu x server的共享目录下的内容了,而且两个目录内的修改是同步的。 nfs: -o nolock选项! ----------------------------------------------------------------------- 附1: NFS运行在SUN的RPC(Remote Procedure Call, 远程过程调用)基础上, RPC定义了一种与系统无关的方法来实现进程间通信。 由此, NFS server也可以看作是RPC server. 正因为NFS是一个RPC服务程序, 所以在使用它之前, 先要映射好端口——通过portmap设定。 比如: 某个NFS client发起NFS服务请求时, 它需要先得到一个端口(port)。 所以它先通过portmap得到port number. (不仅NFS, 所有的RPC服务程序启动之前, 都需要设定好portmap) nfs能够方便地使各unix-like系统之间实现共享。 但如果需要在unix-like和windows系统之间共享,使用samba. 附2: exportfs的用法 如果我们修改了/etc/exports后,并不需要重启nfs服务,只要用exportfs重新扫描一次/etc/exports,并且重新加载即可 语法: exportfs [-aruv] -a: 全部挂载(或卸载) /etc/exports档案内的设定 -r: 重新挂载/etc/exports里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容 -u:卸载某一目录 -v:在export的时候,将分享的目录显示到荧屏上. 例子 #exportfs -rv //重新export一次 #exportfs -au //全部卸载 showmount命令 语法: showmount [-ae] hostname -a: 显示目前主机与client所连上来的使用目录的状态 -e: 显示hostname的/etc/exports里面共享的目录 查看激活的portnumber #netstat -utln nfs 自己所开启的 port ,就是那个 2049 的 port 。就是 NFS 主要产生的 port NFS server 在前面我们就提过了,他是 RPC server 的一种,而 NFS 由于提供了多个 program ( 例如 rpc.mountd, rpc.rquotad, rpc.nfsd... ) ,因此就需要激活多个 port 了!而且这些 port 是『随机产生的』,也就是那个 port number 不会是固定的!每次 restart nfs 都会得到不一样的 port number 呢!那么 Client 端怎么知道要连接上那个 port 来呼叫需要的 program 呢?呵呵!那就是 sunrpc ( port 111 ) 那个 portmap 服务所产生的 port number 的功用啦!Client 会先连接到 sunrpc 那个 port 去知道应该到那个 port 去呼叫所需要的程序!所以, rpc.xxxx 等之类的 daemon 自然就不需要有固定的 port number ! 附3 可能出问题的地方: 1.权限的设定不符合 2.忘记了激活portmap,此时会报错: mount: RPC: Port mapper failure - RPC: Unable to receive 或者 mount: RPC: Program not registered 那么,启动portmap,并且重新启动nfs #service portmap start #service nfs restart 3.被防火墙搞掉 重新设置防火墙,包括iptables与TCP_Wrappers,因为激活了portmap,所以port 111必须提供出去.因此在iptables rules中,要增加: iptables -A INPUT -p TCP --dport 111 -j ACCEPT iptables -A INPUT -p UDP --dport 111 -j ACCEPT 如果还不行,那就是TCP_Wrappers的问题,检查/etc/hosts.deny,如果有一行是: ALL: ALL: deny 那就必须在/etc/hosts.allow中增加: portmap: ALL: allow 如果我们的NFS针对内部网络开发,对于外部网络只对学术网络开发(140.0.0.0/8),可以: iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT 还可以使用TCP_Wrappers,在/etc/hosts.allow里面规定连上 NFS 主机的主机 IP 与名称,例如 #vi /.etc/hosts.allow portmap: 192.168.0.0/255.255.255.0 :allow portmap: 140.113.23.23 :allow portmap: .sdu.edu.cn :allow RPC Server的相关命令 rpcinfo #rpcinfo -p hostname(orIP) 要注意的问题: 需 要注意的是,由于 NFS 使用的这个 RPC 在 client 端连上主机时,那么你的主机想要关机,那可就会成为『不可能的任务』!我还不知道正确的原因是什么,但是,如果你的 Server 上面还有 Client 在联机,那么你要关机,可能得要等到数个钟头才能够正常的关机成功!嗄!真的假的!不相信吗?不然您自个儿试试看! ^_^!所以啰,建议您的 NFS Server 想要关机之前,能更先『关掉 portmap 与 nfs 』这两个东西!如果无法正确的将这两个 daemons 关掉,那么先以 netstat -utlp 找出 PID ,然后以 kill 将他关掉先!这样才有办法正常的关机成功喔!这个请特别特别的注意呢! 在TurboLinux8.0 for AMD64 (kernel 2.4.21-4smp),mount NFS时候报错为: portmap: server localhost not responding, timed out 解决办法: mount -t nfs -o nolock node1:/public /public 即增加-o nolock参数,原因: Unfsd doesn't support NLM locking, and it's causing the lockd daemon to be started (which again requires the portmapper to be installed etc.) |
|