什么是NFS? NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。 通过nfs,我们可以实现不同设备下文件的访问。(尤其是跨设备拷贝大型文件的时候) 注:通过nfs还能实现从uboot直接读取远程文件系统 搭建好了NFS服务器以后,其他的设备就可以通过网络对服务器的nfs进行挂载并访问。 NFS的安装与配置 安装 sudo apt-get install nfs-kernel-server -y 增加配置 sudo vim /etc/exports 增加策略,每个策略一行 设定格式如下: 共享目录 主机名称或者IP(参数1, 参数2) 例如: /nfs *(rw,sync,no_root_squash) ------------------------------------------------------- /nfs :要共享的路径 * :*通配,表示所有网段都可以访问 sync :同步写入硬盘 no_root_squash :nfs客户端共享目录使用者权限 ------------------------------------------------------ 启动 service nfs-kernel-server restart (启动之前要确保对应的文件夹是存在的,否则会出现'Job for * canceled.') 停止 service nfs-kernel-server stop 查看是否启动 service nfs-kernel-server status 或者 netstat -a | grep nfs 或者 nfsstat 测试 #mkdir /mnt/nfs --在/mnt下创建nfs目录 #touch /nfs/nfstest --在/nfs目录下创建一个文件nfstest #mount -t nfs localhost:/nfs /mnt/nfs --将主机/nfs目录挂载到/mnt/nfs下 #ls /mnt/nfs/ --查看/mnt/nfs/目录下有nfstest文件 #umount /mnt/nfs/ --测试完后卸载掉 NFS的使用 客户端 mount -o nolock,tcp 服务器IP:/配置的共享路径 /映射到本机的路径 如: mount -o nolock,tcp 192.168.5.113:/nfs /nfs --将5.113中的/nfs挂载到本地的/nfs下 服务器(其实服务器已经包含了客户端) NFS的有关参数 刚刚所展示的NFS是简单的实现,其实它还有很多值得注意的地方,“参数”。 NFS的常用目录及常用命 /etc/exports NFS服务的主要配置文件 /usr/sbin/exportfs NFS服务的管理命令 /usr/sbin/showmount 客户端的查看命令 /var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值 /var/lib/nfs/xtab 记录曾经登录过的客户端信息 NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。 /etc/exports文件内容格式: <输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)] 这里的参数有两部分---服务端参数、客户端参数。 <输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)] a. 输出目录: 输出目录是指NFS系统中需要共享给客户机使用的目录; b. 客户端: 客户端是指网络中可以访问这个NFS输出目录的计算机 客户端常用的指定方式 指定ip地址的主机:192.168.0.200 指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0 指定域名的主机:david.bsmart.cn 指定域中的所有主机:*.bsmart.cn 所有主机:* c. 选项: 选项用来设置输出目录的访问权限、用户映射等。 NFS主要有3类选项: 访问权限选项 设置输出目录只读:ro 设置输出目录读写:rw 用户映射选项 all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody); no_all_squash:与all_squash取反(默认设置); root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置); no_root_squash:与rootsquash取反; anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx); anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx); 其它选项 secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置); insecure:允许客户端从大于1024的tcp/ip端口连接服务器; sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性; async:将数据先保存在内存缓冲区中,必要时才写入磁盘; wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置); no_wdelay:若有写操作则立即执行,应与sync配合使用; subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置); no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率; 客户端 先来看服务端在/etc/exports 括号中可以指定的参数:
常用配置示例如下:
客户端mount时的相关参数:
上面是 mount 自带的参数,除此之外,nfs 还支持指定以下参数:
注意事项: 如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下: exportfs [-aruv] -a :全部mount或者unmount /etc/exports中的内容 -r :重新mount /etc/exports中分享出来的目录 -u :umount 目录 -v :在 export 的时候,将详细的信息输出到屏幕上。 具体例子: [root @test root]# exportfs -rv (全部重新export一次!) exporting 192.168.0.100:/home/test exporting 192.168.0.*:/home/public exporting *.the9.com:/home/linux exporting *:/home/public exporting *:/tmp reexporting 192.168.0.100:/home/test to kernel 具体例子: [root @test root]#exportfs -au (全部都卸载了) [root @test root]# vi /etc/exports /home/soft 192.168.2.11(rw) [root@localhost init.d]# nfs start -bash: nfs: command not found [root@localhost init.d]# ./nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ] |
|