1. NFS搭建
    2. NFSNetwork File System
    3. 功能也就是能把远程网络的文件挂载到NFS Server上,在Server上看来,客户端的挂载的目录就像自己的子目录一样,可以对它操作。所以,对于嵌入式系统的调试是很方便的。
    4. NFS支持的功能很多,所以对应的端口号是不固定的,是随机分配的,但都是小于1024。那么客户机是怎么连接到NFS Server上去的呢?这里有一个RPC的东西来支持。
    5. RPC:(Remote Procedure Call Protocol
    6. 远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCPUDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
    7. RPCNFS搭建过程钟的功能就是在Server上分配端口号,可以让客户端能从远程连接上ServerRPC固定采用111端口监听。
    8. 所以整个NFS实现的过程就是:
    9. Client向服务器的RPCport 111)发出请求
    10. 服务器注册好端口,把端口信息传回客户端
    11. 客户端知道正确的端口后,可以连接NFS daemon
    12. NFS 安装:nfs-utils(主要NFS功能) portmap(RPC 端口分配)
    13. 可以先rpm -qa | grep xxx 查看下,若不存在则安装!
    14. vim /etc/exports # 在这里可以对客户端各种权限的设置
    15. /tmp *(rw,no_root_squash) # 允许任何IP挂载/tmp目录
    16. NFS 启动
    17. /etc/init.d/portmap start # portmap启动
    18. /etc/init.d/nfs start # nfs启动
    19. service nfs reload # 重新加载exports
    20. netstat -tunl | grep "111" # 查看portmap有没有启动
    21. chkconfig list | grep "nfs" # 查看nfs服务是否启动
    22. showmount -e localhost # 查看本地共享文件系统
    23. NFS文件挂载
    24. mount -t nfs 127.0.0.1:/tmp /mnt # 进入/mnt查看
    25. mount -t nfs 10.0.0.3:/tmp /data/img # 远程网络挂载
    26. /etc/exports 权限说明
    27. /tmp 192.168.100.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync)
    28. [分享目錄] [第一部主機(權限)] [可用主機名] [可用萬用字元]
    29. rw ro # 該目錄分享的權限是可讀寫 (read-write) 或唯讀 (read-only),但最終能不能讀寫,還是與檔案系統的 rwx及身份有關。
    30. sync async # sync 代表資料會同步寫入到記憶體與硬碟中,async 則代表資料會先暫存於記憶體當中,而非直接寫入硬碟!
    31. no_root_squash root_squash # 用戶端使用 NFS 檔案系統的帳號若為 root 時,系統該如何判斷這個帳號的身份?預設的情況下,用戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody,如此對伺服器的系統會較有保障。但如果你想要開放用戶端使用 root 身份來操作伺服器的檔案系統,那麼這裡就得要開 no_root_squash 才行!
    32. all_squash # 不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名使用者,通常也就是 nobody(nfsnobody) 啦!
    33. anonuid anongid # anon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名使用者的 UID 設定值,通常為 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在於你的 /etc/passwd 當中!anonuid 指的是 UID 而 anongid 則是群組的 GID 囉。
    34. /tmp *(rw,no_root_squash)
    35. /home/public 192.168.100.0/24(rw) *(ro)
    36. /home/test 192.168.100.10(rw)
    37. /home/linux *.centos.vbird(rw,all_squash,anonuid=45,anongid=45)
    38. # 依赖rpc服务通信 portmap 或 rpcbind
    39. yum install nfs-utils portmap # centos5安装
    40. yum install nfs-utils rpcbind # centos6安装
    41. vim /etc/exports # 配置文件
    42. /data/images 10.10.10.10(rw,sync,no_root_squash)
    43. service portmap restart # 重启centos5的nfs依赖的rpc服务
    44. service rpcbind restart # 重启centos6的nfs依赖的rpc服务
    45. service nfs restart # 重启nfs服务 确保依赖 portmap 或 rpcbind 服务已启动
    46. /etc/init.d/nfs reload # 重载NFS服务配置文件
    47. showmount -e # 服务端查看自己共享的服务
    48. showmount -a # 显示已经与客户端连接上的目录信息
    49. showmount -e 110.10.10.3 # 列出服务端可供使用的NFS共享 客户端测试能否访问nfs服务
    50. mount -t nfs 10.10.10.3:/data/images/ /data/img # 挂载nfs
    51. # 服务端的 portmap 或 rpcbind 被停止后,nfs仍然工作正常,但是umout财会提示: not found / mounted or server not reachable 重启服务器的portmap 或 rpcbind 也无济于事。 nfs也要跟着重启,否则nfs工作仍然是不正常的。会造成NFS客户端挂载不正常,df卡住和挂载目录无法访问。需要强制卸载后,重新挂载
    52. umount -f /data/img/ # 强制卸载挂载目录 如还不可以 umount -l /data/img/