三、【NFS服务器】虚拟机nfs服务器搭建
一、NFS服务器简介
1、什么是NFS?
- NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
- NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
- NFS一般用来存储共享视频,图片等静态数据。
2、nfs挂载原理
如上图示:
当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:df –h。
既然NFS是通过网络来进行服务器端和客户端之间的数据传输,那么两者之间要传输数据就要有想对应的网络端口,NFS服务器到底使用哪个端口来进行数据传输呢?基本上NFS这个服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口;既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?这时就需要通过远程过程调用(Remote Procedure Call,RPC)协议来实现了!
二、挂载过程
现在我需要挂载nfs服务器去实现主机和开发板之间共享文件。
1、安装软件包
sudo apt-get update
sudo apt-get install nfs-common nfs-kernel-server
2、配置服务器
打开/etc/export文件去配置服务器
- /opt/nfs:要共享的目录
- * :允许所有的网段访问
- rw :指客户端拥有读写权限,还是有一个ro选项,代表只读。
- sync:指同步写入资料到内存和硬盘中,与之相反的选项是async.
- no_subtree_check: 不检测子目录,提高性能。
- root_squash:如果客户端使用root访问目录,会被当做匿名用户(也就是说,权限比较小,比较安全)。
- no_root_squash:客户使用root访问共享目录时,还是拥有root权限,极不安全。
- all_squash:无论客户端使用什么用户访问共享目录都会被当作匿名用户。
3、重启服务器及查看服务器状态
sudo /etc/init.d/nfs-kernel-server restart --重启nfs服务器
sudo /etc/init.d/nfs-kernel-server status --查看nfs是否开启
netstat -a | grep nfs --或用这个查看nfs是否开启
4、创建共享目录
刚才在/etc/exports文件中我们配置了/opt/nfs目录为共享目录,那我们在opt下创建nfs目录,并修改目录权限。此时我们服务器就安装配置完成了。
5、开发板端挂载虚拟机的nfs共享目录。
挂载之前我们要保证开发板和主机之间时可以ping通的,然后再进行挂载。
开发板挂载命令:
mount -t nfs -o nolock 虚拟机IP:/opt/nfs share --其中share是开发板上新建的共享目录
6、挂载成功后我们在虚拟机的/opt/nfs下创建一个test文件
此时我们开发板的目录下也会出现这个新建的test文件,如此就实现了虚拟机和主板的文件共享。