1. nfs服务器准备
服务端准备工作:查看系统版本信息
cat /etc/redhat-release
CentOS release 6.8 (Final) #查看操作系统版本信息
[root@db1 ~]# uname -n
db1 #查看机器名
[root@db1 ~]# uname -r
2.6.32-642.el6.x86_64
[root@db1 ~]# uname -m #查看centos当前系统内核版本号
x86_64
1.1 服务器端ip:192.168.45.177
客户端ip:192.168.45.178
1.2 nfs软件
要部署nfs服务。必须安装下面两个软件包:
*nfs-utils :这个是服务主程序
*rpcbind :rpc主程序(cent5.x为portmap,cent 6.x为rpcbind)
NFS可以被视作一个RPC程序,在启动任何一个RPC之前,需要做好端口映射工作,这个映射工作就是由rpcbind()服务来完成的。因此,提供nfs之前必须启动 prcbind服务。
1.2.1 查询默认情况下cent6.8 NFS软件的安装情况
[root@db1 ~]# rpm -aq nfs-utils rpcbind
rpcbind-0.2.0-13.el6_9.1.x86_64
nfs-utils-1.2.3-75.el6_9.x86_64
提示:如果没有安装,不要紧,通过[root@db1 ~]# yum install nfs-utils -y 安装。同时也会把rpcbind装上。
1.2.2 查看rpcbind服务是否启动
[root@db1 ~]# /etc/init.d/rpcbind status
rpcbind is stopped
[root@db1 ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
[root@db1 ~]# /etc/init.d/rpcbind status
rpcbind (pid 18709) is running...
1.2.3查看nfs服务是否启动
[root@db1~]# /etc/init.d/nfs status
rpc.svcgssdis stopped
rpc.mountdis stopped
nfsdis stopped
rpc.rquotadis stopped
1.2.4 启动nfs服务并加入开机自启
[root@db1~]# /etc/init.d/nfs start
StartingNFS services: [ OK ]
StartingNFS quotas: [ OK ]
StartingNFS mountd: [ OK ]
StartingNFS daemon: [ OK ]
StartingRPC idmapd: [ OK ]
[root@db1~]# /etc/init.d/nfs status
rpc.svcgssdis stopped
rpc.mountd(pid 18832) is running...
说明:从NFS服务启动的提示,我们可以看出运行NFS默认需要启动的进程至少有:rpc.mountd,
rpc.rquotad,rpc.idmapd。
[root@db1 ~]# ps -ef|egrep "rpc|nfs" #查看指定过滤的进程
rpc 18709 1 0 11:44 ? 00:00:00 rpcbind
root 18811 2 0 11:47 ? 00:00:00 [rpciod/0]
root 18812 2 0 11:47 ? 00:00:00 [rpciod/1]
root 18813 2 0 11:47 ? 00:00:00 [rpciod/2]
root 18814 2 0 11:47 ? 00:00:00 [rpciod/3]
root 18815 2 0 11:47 ? 00:00:00 [rpciod/4]
root 18816 2 0 11:47 ? 00:00:00 [rpciod/5]
root 18817 2 0 11:47 ? 00:00:00 [rpciod/6]
root 18818 2 0 11:47 ? 00:00:00 [rpciod/7]
root 18827 1 0 11:47 ? 00:00:00 rpc.rquotad #磁盘配额
root 18832 1 0 11:47 ? 00:00:00 rpc.mountd #权限管理
root 18839 2 011:47 ? 00:00:00 [nfsd4]
root 18840 2 0 11:47 ? 00:00:00 [nfsd4_callbacks]
root 18841 2 0 11:47 ? 00:00:00 [nfsd]
root 18842 2 0 11:47 ? 00:00:00 [nfsd]
root 18843 2 0 11:47 ? 00:00:00 [nfsd]
root 18844 2 0 11:47 ? 00:00:00 [nfsd]
root 18845 2 0 11:47 ? 00:00:00 [nfsd]
root 18846 2 0 11:47 ? 00:00:00 [nfsd]
root 18847 2 0 11:47 ? 00:00:00 [nfsd]
root 18848 2 0 11:47 ? 00:00:00 [nfsd]
root 18879 1 0 11:47 ? 00:00:00 rpc.idmapd #rpc-服务
root 18969 18358 0 11:58 pts/1 00:00:00 egrep rpc|nfs
NFS服务的主要任务是进行文件系统的共享,文件系统的共享与权限有关。所以NFS服务启动时最少需要两个deamons,一个管理client端是否能够登入的问题,另一个管理client端能够取得的权限。如果还需要管理quota的话,NFS还要加载rpc.rquoad程序。
1.nfsd(prc.nfsd)
这个daemon的主要功能主要是管理client端能否登入主机,其中还包含登入者id的判别。
2.rpc.mountd
这个daemon的主要功能主要是管理nfs文件系统的权限管理。
1.3 配置nfs等服务开机启动
[root@db1~]# chkconfig nfs on
[root@db1~]# chkconfig rpcbind on
提示:在生产工作环境中一般放在/etc/rc.local 中开机自启服务。
[root@db1~]# vi /etc/rc.local
在里面添加:#nfsstart by ruien at 20180312
/etc/init.d/rpcbindstart
/etc/init.d/nfsstart
查看是否开机自启:
[root@db1~]# chkconfig --list nfs
nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@db1~]# chkconfig --list rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:of
1.3.1exports 文件格式 #nfs默认文件地址
NFS共享的目录 NFS客户端地址1(参1,参2....) 客户端地址2(参1,参2....)
其中各项参数的含义如下:
1. NFS共享的目录: 为NFS服务端要共享的实际目录,要用绝对路径(如/data/bbs)
2. NFS客户端地址: 为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的ip地
址、域名等。也可以是整个网段的地址
3. 参数集: 对授权的客户端的访问权限设置
生产环境常见配置实例:
常用格式说明 | 要共享的目录 客户端IP地址或IP段(参1,参2……) |
配置例一 | /data/bbs 10.0.0.0/24(rw,sync) →注意,深黄色部分没有空格 |
配置例二 | /home/ryan 10.0.0.0/24(rw,sync,all_squash,anonuid=2000, anongid=2000) →生产环境常用的一种配置,适用多客户端共享一个NFS目录 |
配置例三 | /home/ruien 10.0.0.15(ro) →只读共享 生产环境可能用于运维给开发提供某个正式服务器的查看数据的能力。 |
1.4
创建共享文件并授权:
mkdir /data/bbs –p
[root@db1 bbs]# chown -R nfsnobody.nfsnobody/data/bbs #给nobody授权
在/etc/export配置如下:
vi /etc/export
#shared bbs dir to 192.168.45.0/24
/data/bbs 192.168.45.0/24(rw,sync)
查看export下的修改的文件
[root@db1 bbs]# cat /etc/exports
#shared bbs dir to 192.168.45.0/24
/data/bbs 192.168.45.0/24(rw,sync)
1.5 NFS配置权限设置
NFS配置权限设置,即/etc/exports文件配置格式中小括号()里面的参数,详见表1.5
参数名称 | 参数用途 |
rw | Read-write,表示可读写权限。 |
ro | Read-only,表示只读权限。 |
sync | 请求或写入数据时,数据同步写入到NFS Server的硬盘后才会返回。 |
async | 请求或写入数据时,先还回请求,再将数据写入到内存缓存和硬盘中,此 参数可以提升NFS性能,但是会降低数据的安全性。因此,一般情况下,建议不用。 |
no_root_squash | 访问NFS server 共享目录的用户是root的话,它对该共享目录具有root权限。这个配置原本为无盘客户端准备的。用户应避免使用! |
all_squash | 压缩所有用户为来宾 |
no_all_squash | 不压缩所有用户为来宾 |
subtree | 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置 |
no_subtree | 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率 |
secure | 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置) |
insecure | 允许客户端从大于1024的tcp/ip端口连接服务器 |
anonuid=uid/anongid=gid | (压缩来宾为指定的用户/压缩来宾为指定的用户组) 有了这个参数我们配置起来就很方便了,这是让我们改变默认的来宾用户。默认的来宾用户是nfsnobody 我们可以通过cat /etc/passwd来找到这个nfsnobody用户。 |
表 1.5
2.客户端准备
2.1检查是否启动rpcbind服务 #客户端只需要启动rpcbind服务(cent6.x是rpcbind,5.x是rpcmaps)
[root@db1 ~]# /etc/init.d/rpcbind status
rpcbind is stopped
[root@db1 ~]# /etc/init.d/rpcbind start
开启rpcbind服务开机自启:
[root@db222 ~]# chkconfig rpcbind on
[root@db222 ~]# chkconfig --list rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
查看挂载点
[root@db222 ~]# showmount -e 192.168.45.177
Export list for 192.168.45.177:
/data/bbs 192.168.45.0/24
挂载共享
[root@db222 ~]# mount -t nfs192.168.45.177:/data/bbs /mnt
查看磁盘
[root@db222 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 2.6T 771M 2.5T 1% /
tmpfs 48G 0 48G 0% /dev/shm
/dev/sda1 190M 35M 146M 20% /boot
192.168.45.177:/data/bbs 50G 2.0G 45G 5% /mnt →表示成功
测试读写数据:
创建文件:touch a.txt
mount -t nfs 192.168.45.177:/data/bbs /mnt