1. 前言
本文主要是介绍如果在Linux系统上安装和配置nfs服务器,包括服务端和客户端的配置。
我们知道如果Linux与Windows共享文件,可以在Linux服务器上安装和配置samba,samba兼容微软的CIFS协议。除了Windows的标准外,其他操作系统也有不同的标准。NFS协议最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.2版本 ,更新迭代比较慢。
NFS 是 Network File System 的缩写,即网络文件系统。功能是让客户端通过网络访问不同主机上磁盘里的数据,主要用在类Unix系统上实现文件共享的一种方法。 本例演示 CentOS 7下安装和配置NFS服务器的基本步骤,并使用CentOS6作为客户端连接和访问NFS服务器上的数据。
服务器环境说明
CentOS 7(Minimal Install)
[root@zcwyou ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
客户端环境说明:
[root@centos6 ~]# cat /etc/centos-release
CentOS release 6.10 (Final)
服务端 IP:172.16.87.139/24
客户端 IP:172.16.87.137/24
根据官网说明,CentOS 7.4 以后,支持 NFS v4.2 不需要 rpcbind 了,但是如果客户端只支持 NFS v3 则需要 rpcbind 这个服务。
2. linux 搭建nfs服务端
2.1 安装nfs套件
[root@zcwyou ~]# yum install nfs-utils
nfs-utils依赖rpcbind ,一并自动安装上。
2.2 设置nfs服务端开机自启
[root@zcwyou ~]# systemctl enable rpcbind
[root@zcwyou ~]# systemctl enable nfs
2.3 启动 NFS 服务
[root@zcwyou ~]# systemctl start rpcbind
[root@zcwyou ~]# systemctl start nfs
防火墙需要打开 rpc-bind 和 nfs 的服务
[root@zcwyou ~]# firewall-cmd --zone=public --permanent --add-service=rpc-bind
success
[root@zcwyou ~]# firewall-cmd --zone=public --permanent --add-service=mountd
success
[root@zcwyou ~]# firewall-cmd --zone=public --permanent --add-service=nfs
success
[root@zcwyou ~]# firewall-cmd --reload
success
2.4 配置nfs共享目录
服务启动之后,我们需要在服务端配置一个共享目录
[root@zcwyou ~]# mkdir /var/nfs
[root@zcwyou ~]# chmod 755 /var/nfs
配置相应的配置文件
[root@zcwyou ~]# vi /etc/exports
添加如下配置
/var/nfs 172.16.87.0/24(rw,sync,no_root_squash,no_all_squash)
配置文件说明:
/var/nfs 为共享目录
172.16.87.0/24 限制客户端的IP可以为一个网段,一个IP,也可以是域名,域名支持通配符 如: *.com,如果是不限制IP,则使用星号表示允许所有IP连接
rw:read-write,表示目录可读写
ro:read-only,表示目录只读
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的UID值
anongid:匿名用户的GID值。备注:其中anonuid=1000,anongid=1000,为此目录用户web的ID号,达到连接NFS用户权限一致。
defaults 使用默认的选项。默认选项为rw、suid、dev、exec、auto nouser与async。
atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
noatime 每次存取时不更新inode的存取时间。
dev 可读文件系统上的字符或块设备,取消选项为nodev。
nodev 不读文件系统上的字符或块设备。
exec 可执行二进制文件,取消选项为noexec。
noexec 无法执行二进制文件。
auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
noauto 无法使用auto加载。
suid 启动set-user-identifier设置用户ID与set-group-identifer设置组ID设置位,取消选项为nosuid。
nosuid 关闭set-user-identifier设置用户ID与set-group-identifer设置组ID设置位。
user 普通用户可以执行加载操作。
nouser 普通用户无法执行加载操作,默认设置。
remount 重新加载设备。通常用于改变设备的设置状态。
rsize 读取数据缓冲大小,默认设置1024。–影响性能
wsize 写入数据缓冲大小,默认设置1024。
fg 以前台形式执行挂载操作,默认设置。在挂载失败时会影响正常操作响应。
bg 以后台形式执行挂载操作。
hard 硬式挂载,默认设置。如果与服务器通讯失败,让试图访问它的操作被阻塞,直到服务器恢复为止。
soft 软式挂载。服务器通讯失败,让试图访问它的操作失败,返回一条出错消息。这项功能对于避免进程挂在无关紧要的安装操作上来说非常有用。
retrans=n 指定在以软方式安装的文件系统上,在返回一条出错消息之前重复发出请求的次数。
nointr 不允许用户中断,默认设置。
intr 允许用户中断被阻塞的操作并且让它们返回一条出错消息。
timeo=n 设置请求的超时时间以十分之一秒为单位。
tcp 传输默认使用udp,可能出现不稳定,使用proto=tcp更改传输协议。客户端参考mountproto=netid
2.5 重启服务重载nfs配置
[root@zcwyou ~]# systemctl restart nfs
检查本地的共享目录
[root@zcwyou ~]# showmount -e localhost
Export list for localhost:
/var/nfs: 172.16.87.0/24
到此为止,服务器已经配置好了。
3. linux作为客户端挂载nfs共享目录
使用linux作为nfs客户端
3.1 客户端安装nfs套件
[root@centos6 ~]# yum install nfs-utils -y
3.2 客户端设置nsf服务
设置 rpcbind 服务的开机启动
设置NFS服务开机自动启动
CentOS7
[root@centos7 ~]# systemctl enable rpcbind
CentOS6
[root@centos6 ~]# chkconfig rpcbind --level 345 on
开启NFS服务
CentOS 7:
[root@centos7 ~]# systemctl start rpcbind
CentOS 6:
[root@centos6 ~]# service rpcbind start
正在启动 rpcbind: [确定]
客户端不需要打开防火墙,因为客户端时发出请求方,网络能连接到服务端即可。
客户端也不需要开启 NFS 服务,因为不共享目录。
3.3 客户端访问NFS
先查服务端的共享目录
[root@centos6 ~]# showmount -e 172.16.87.139
Export list for 172.16.87.139:
/var/nfs: 172.16.87.0/24
在客户端创建本地目录挂载点
[root@centos6 ~]# mkdir /var/mount_nfs/
挂载
[root@centos6 ~]# mount -t nfs 172.16.87.139:/var/nfs /var/mount_nfs
挂载之后,可以使用 mount 命令查看一下
[root@centos6 ~]# mount
/dev/mapper/vg_centos6-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
172.16.87.139:/var/nfs on /var/mount_nfs type nfs (rw,vers=4,addr=172.16.87.139,clientaddr=172.16.87.137)
这说明已经挂载成功了。
3.4 测试 NFS
[root@centos6 ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_centos6-lv_root
ext4 19G 1.5G 17G 9% /
tmpfs tmpfs 505M 0 505M 0% /dev/shm
/dev/sda1 ext4 500M 90M 380M 20% /boot
172.16.87.139:/var/nfs
nfs 19G 4.5G 14G 25% /var/mount_nfs
看到已经挂载了nfs
测试一下,在客户端向nfs共享目录创建一个文件
[root@centos6 ~]# cd /var/mount_nfs
[root@centos6 ~]# touch 123.txt
切换到nfs服务器上
[root@zcwyou ~]# cd /var/nfs
[root@zcwyou ~]# ll
3.5 nfs客户端实现自动挂载
修改/etc/fstab
[root@zcwyou ~]# vi /etc/fstab
在结尾添加类似如下配置
172.16.87.139:/var/nfs /var/mount_nfs nfs defaults 0 0
查看挂载情况
[root@zcwyou ~]# mount
/dev/mapper/vg_centos6-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
172.16.87.139:/var/nfs on /var/mount_nfs type nfs (rw,vers=4,addr=172.16.87.139,clientaddr=172.16.87.137)
4. windows挂载nfs
Win7自带的NFS客户端可以在“控制面板”->“程序”->“WIndows 功能”找到->nfs-安装。
由于自带的客户端功能少,缺少用户名映射,功能,所以必然会遇到权限的问题。所以需要自行配置权限问题
获取nfs server 用户web的gid和uid,并记录uid和gid,当前为:1000
打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default,添加两个REG_DWORD值,填上uid和gid(10进制)完成后重启电脑
注册表导出是如下格式 :
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default]
“AnonymousGid”=dword:000003e8
“AnonymousUid”=dword:000003e8
挂载到Z盘
mount -o anon mtype=soft lang=ansi \192.168.0.63\home\data\ Z:\
事项:一定要用软装载模式(mtype=soft),防止资源管理器停止响应,不能用utf-8
5. 结论
NFS一般用于Linux与Linux之间,一般用于集群之间共享存储,是一个非常常用的工具和服务,系统运维工程师必须掌握。
评论前必须登录!
注册