网络文件共享服务(三)——NFS共享服务

网络文件共享服务(二)

NFS工作原理

网络文件共享服务(三)——NFS共享服务_第1张图片

NFS:Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现RPC采用C/S模式,客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

网络文件共享服务(三)——NFS共享服务_第2张图片

NFS优势:节省本地存储空间,将常用的数据,如:/home目录,存放在NFS服务器上且可以通过网络访问,本地终端将可减少自身存储空间的使用。

NFS软件介绍

软件包:nfs-utils

相关软件包:rpcbind(必须),tcp_wrappers

Kernel支持:nfs.ko

端口:2049(nfsd), 其它端口由portmap(111)分配
说明:CentOS 6 开始portmap进程由rpcbind代替

NFS服务主要进程:
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
rpc.lockd 非必要,管理文件锁,避免同时写出错
rpc.statd 非必要,检查文件一致性,可修复文件

日志:/var/lib/nfs/

NFS配置文件:

/etc/exports
/etc/exports.d/*.exports

NFS共享配置文件格式

/dir    主机1(opt1,opt2)    主机2(opt1,opt2)...     #把文件夹给主机1 主机2 ...使用

格式说明:
#开始为注释
主机格式:

单个主机:ipv4,ipv6,FQDN
IP networks:两种掩码格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
wildcards:主机名通配,例如*.magedu.com,IP不可以
netgroups:NIS域的主机组,@group_name
anonymous:表示使用*通配所有客户端

每个条目指定目录导出到的哪些主机,及相关的权限和选项

默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,性能高
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,早期版本是4294967294 (nfsnobody)
no_root_squash 远程root映射成root用户,对root权限不压榨
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合
all_squash使用
[root@centos8 ~]#mkdir /data/share1
[root@centos8 ~]#mkdir /data/share2
[root@centos8 ~]#touch /data/share1/share1.txt
[root@centos8 ~]#touch /data/share2/share2.txt
[root@centos8 ~]#vim /etc/exports
[root@centos8 ~]#cat /etc/exports
/data/share1/ *
[root@centos8 ~]#vim /etc/exports.d/test.exports
[root@centos8 ~]#cat /etc/exports.d/test.exports 
/data/share2 *
[root@centos8 ~]#exportfs -v
[root@centos8 ~]#exportfs -r
exportfs: No options for /data/share1/ *: suggest *(sync) to avoid warning
exportfs: No options for /data/share2 *: suggest *(sync) to avoid warning
[root@centos8 ~]#exportfs -v
/data/share1  	<world>(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
/data/share2  	<world>(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

客户端查看共享资源

[root@centos7 ~]#showmount -e 192.168.32.8
Export list for 192.168.32.8:
/data/share2 *             #能看到文件真实路径不安全,通常在局域网用,企业内部用。不怎么用于公共网络
/data/share1 *
[root@centos7 ~]#

客户端可以挂载到本机访问

[root@centos7 ~]#mkdir /mnt/nfs1

[root@centos7 ~]#mount 192.168.32.8:/data/share1 /mnt/nfs1
[root@centos7 ~]#df
Filesystem                1K-blocks    Used Available Use% Mounted on
/dev/sda2                 104806400 1575828 103230572   2% /
devtmpfs                     920776       0    920776   0% /dev
tmpfs                        931624       0    931624   0% /dev/shm
tmpfs                        931624    9808    921816   2% /run
tmpfs                        931624       0    931624   0% /sys/fs/cgroup
/dev/sda5                  52403200   33060  52370140   1% /data
/dev/sda1                   1038336  140228    898108  14% /boot
tmpfs                        186328       0    186328   0% /run/user/0
192.168.32.8:/data/share1  52403200  398592  52004608   1% /mnt/nfs1
[root@centos7 ~]#ls /mnt/nfs1/
share1.txt
[root@centos7 ~]#

**只要是远程都需要映射到本机的系统账号。**这里映射成了nobody。用ID相等来映射。
如果没有映射的账户,则映射相同的ID号。

范例:NFS配置示例

vim /etc/exports
/myshare server.example.com
/myshare *.example.com
/myshare server?.example.com
/myshare server[0-20].example.com
/myshare 172.25.11.10
/myshare 172.25.0.0/16
/myshare 2000:472:18:b51:c32:a21
/myshare 2000:472:18:b51::/64
/myshare *.example.com 172.25.0.0/16
/myshare desktop.example.com(ro)
/myshare desktop.example.com(ro) server[0-20].example.com(rw)
/myshare diskless.example.com(rw,no_root_squash)
[root@centos8 ~]#vim /etc/exports.d/test.exports
/data/share2 * 192.168.32.0/24(ro) 192.168.32.7(rw)
#对一个网段设置为只读,对单个主机ip设置为可读可写

NFS工具

rpcinfo

查看端口列表:

[root@centos8 ~]#rpcinfo -p

rpcinfo 工具可以查看RPC相关信息
查看注册在指定主机的RPC程序

rpcinfo -p hostname

查看RPC注册程序

rpcinfo –s hostname

范例:rpcinfo

[root@centos8 ~]#rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper            #端口号为111
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  48676  status
    100024    1   tcp  40143  status
    100005    1   udp  20048  mountd

[root@centos8 ~]#rpcinfo -s       #注册中心注册的信息 服务端口 
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
    100024  1         tcp6,udp6,tcp,udp                status      29
    100005  3,2,1     tcp6,udp6,tcp,udp                mountd      superuser
    100003  4,3       tcp6,tcp                         nfs         superuser
    100227  3         tcp6,tcp                         nfs_acl     superuser
    100021  4,3,1     tcp6,udp6,tcp,udp                nlockmgr    superuser

exportfs

exportfs:可用于管理NFS导出的文件系统
常见选项:
–v 查看本机所有NFS共享
–r 重读配置文件,并共享目录
–a 输出本机所有共享 恢复所有的暂停的共享
–au 停止本机所有共享

showmount

常见用法

showmount -e hostname

mount.nfs

客户端NFS挂载

vim /etc/fatab

NFS相关的挂载选项:man 5 nfs

fg (默认)前台挂载 (default)
bg 后台挂载
hard(默认)持续请求 不断的持续挂载
soft 非持续请求 挂不上过一会再挂
intr 和hard配合,请求可中断 ctrl+c 可以终端
rsize和wsize 一次读和写数据最大字节数,rsize=32768
_netdev 无网络不挂载

提示:基于安全考虑,建议使用nosuid,nodev,noexec挂载选项
范例:临时挂载NFS共享
挂载的时候依赖rpcbind服务端口(111)。重启的时候会自动起来。
没有启动rpcbind服务端口,showmount -e hostip 远程看不到,从而也不知道远程主机中的挂载点的信息

[root@centos8 ~]#systemctl status rpcbind
● rpcbind.service - RPC Bind
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-12-18 17:16:10 CST; 1h 42min ago
     Docs: man:rpcbind(8)
 Main PID: 5965 (rpcbind)
    Tasks: 1 (limit: 12402)
   Memory: 1.7M
   CGroup: /system.slice/rpcbind.service
           └─5965 /usr/bin/rpcbind -w -f

Dec 18 17:16:10 MYSQL systemd[1]: Starting RPC Bind...
Dec 18 17:16:10 MYSQL systemd[1]: Started RPC Bind.

mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/

范例:开机挂载 永久挂载

vim /etc/fstab

172.16.0.1:/public /mnt/nfs nfs defaults,_netdev 0 0
vim /etc/fstab 

网络文件共享服务(三)——NFS共享服务_第3张图片
注意后面的 _netdev 。这个意思是如果没有网络的就默认不会挂载,直接跳过去不挂载。什么时候有网络什么时候挂载。

自动挂载

可使用 autofs 服务按需要挂载外围设备,NFS共享等,并在空闲5分钟后后自动卸载。
用的时候自动挂载,不用的时候不挂载。更加节约资源。

[root@centos7 ~]#systemctl status autofs
● autofs.service - Automounts filesystems on demand
   Loaded: loaded (/usr/lib/systemd/system/autofs.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-12-07 19:31:37 CST; 1 weeks 3 days ago
 Main PID: 6397 (automount)
   CGroup: /system.slice/autofs.service
           └─6397 /usr/sbin/automount --systemd-service --dont-check-daemon

Dec 07 19:31:36 centos7mini systemd[1]: Starting Automounts filesystems on demand...
Dec 07 19:31:37 centos7mini systemd[1]: Started Automounts filesystems on demand.
[root@centos7 ~]#

[root@centos7 ~]#cd /net/192.168.32.8/
[root@centos7 192.168.32.8]#ll
total 0
dr-xr-xr-x 4 root root 0 Dec 18 19:16 data
[root@centos7 192.168.32.8]#
[root@centos7 192.168.32.8]#cd
[root@centos7 ~]#cd /misc/cd          #也是基于自动挂载
[root@centos7 cd]#ls
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
[root@centos7 cd]#
[root@centos7 ~]#cd /net/
[root@centos7 net]#cd 192.168.32.8
[root@centos7 192.168.32.8]#ls
data
[root@centos7 192.168.32.8]#cd data/
[root@centos7 data]#ls
share1  share2
[root@centos7 data]#cd share2
[root@centos7 share2]#ls
share2.txt
[root@centos7 share2]#df
Filesystem                1K-blocks     Used Available Use% Mounted on
/dev/sda2                 104806400  1575784 103230616   2% /
devtmpfs                     920776        0    920776   0% /dev
tmpfs                        931624        0    931624   0% /dev/shm
tmpfs                        931624     9808    921816   2% /run
tmpfs                        931624        0    931624   0% /sys/fs/cgroup
/dev/sda5                  52403200    33060  52370140   1% /data
/dev/sda1                   1038336   140228    898108  14% /boot
tmpfs                        186328        0    186328   0% /run/user/0
192.168.32.8:/data/share1  52403200   398592  52004608   1% /mnt/nfs1
/dev/sr0                   10491772 10491772         0 100% /misc/cd
192.168.32.8:/data/share2  52403200   398592  52004608   1% /net/192.168.32.8/data/share2

只要访问对应的文件夹就会自动挂载。只能看到父目录。不能看到全目录。

相关包和文件

软件包:autofs
服务文件:/usr/lib/systemd/system/autofs.service

配置文件:/etc/auto.master

配置文件格式

参看帮助:man 5 autofs
所有导出到网络中的NFS启用特殊匹配 -host 至 “browse”

范例:/net目录可以自动挂载NFS共享

cat /etc/auto.master
/net -hosts
cd /net/192.168.8.100/

自动挂载资源有两种格式:

相对路径法:将mount point 路径分成 dirname 和 basename 分别配置,可能会影响现有的目录结构
缺点:父目录里面的数据内容会被隐藏,数据都是在子文件中才能访问,会被子文件覆盖。
绝对路径法:直接匹配全部绝对路径名称,不会影响本地目录结构

相对路径法

  1. /etc/auto.master 格式
挂载点的dirname   指定目录的配置文件路径
  1. 指定目录的配置文件格式
挂载点的basename 挂载选项 选项设备

范例:相对路径法

[root@centos8 ~]#vim /etc/auto.master
/misc /etc/auto.misc     #/misc为dirname   /etc/auto.misc为basename
[root@centos8 ~]#vim /etc/auto.misc
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom  #cd为basename的具体名称 挂载选项  选项设备
[root@centos7 ~]#cat /etc/auto.master |grep -Ev "^#|^$"
/misc	/etc/auto.misc      #/etc/auto.misc为子配置文件
/net	-hosts        #自动把网络中共享文件挂载到/net文件夹中,可以直接访问
+dir:/etc/auto.master.d
+auto.master
[root@centos7 ~]#
[root@centos7 ~]#cat /etc/auto.misc |grep -Ev "^#|^$"   #打开对应的子配置文件
cd		-fstype=iso9660,ro,nosuid,nodev  :/dev/cdrom   #cd为basename的具体名称 挂载选项  选项设备
[root@centos7 ~]#

范例:相对路径法为支持通配符

vim /etc/auto.master
/misc /etc/auto.misc
vim /etc/auto.misc

#表示/misc下面的子目录和nfs共享/export目录的子目录同名
* server:/export/&      

范例:实现centos8中share1中的共享文件挂载到centos7中/misc/nfs1中
这里由于dirname为misc已经存在,所以直接配置basename nfs1即可

[root@centos7 ~]#showmount -e 192.168.32.8  #查看远程主机共享文件
Export list for 192.168.32.8:
/data/share2 *
/data/share1 *
[root@centos7 ~]#

[root@centos7 ~]#vim /etc/auto.misc 
[root@centos7 ~]#cat /etc/auto.misc |grep -Ev "^#|^$"
cd		-fstype=iso9660,ro,nosuid,nodev	:/dev/cdrom
nfs1            -fstype=nfs		192.168.32.8:/data/share1

[root@centos7 ~]#ls /misc   #最先查看/misc文件,暂时一个文件也没有
[root@centos7 ~]#ls /misc/nfs1  #访问一下
share1.txt
[root@centos7 ~]#df
Filesystem                1K-blocks    Used Available Use% Mounted on
/dev/sda2                 104806400 1575816 103230584   2% /
devtmpfs                     920776       0    920776   0% /dev
tmpfs                        931624       0    931624   0% /dev/shm
tmpfs                        931624    9808    921816   2% /run
tmpfs                        931624       0    931624   0% /sys/fs/cgroup
/dev/sda5                  52403200   33060  52370140   1% /data
/dev/sda1                   1038336  140228    898108  14% /boot
tmpfs                        186328       0    186328   0% /run/user/0
192.168.32.8:/data/share1  52403200  398592  52004608   1% /mnt/nfs1
[root@centos7 ~]#
[root@centos7 ~]#ls /misc  #再一次访问,已经自动挂载了
nfs1-
[root@centos7 ~]#

范例:实现把centos8中的共享文件/data/share2挂载到centos7中的 /data/d1/d2/d3

[root@centos7 ~]#vim /etc/auto.master      #修改autofs的主配置文件,在后面追加下面内容
/data/d1/d2      /etc/auto.d2              #  /etc/auto.d2这个名称无所谓,对应子配置文件即可
#dirname文件会自动生成
[root@centos7 ~]#vim /etc/auto.d2         #对应主配置文件中的子配置文件名称
[root@centos7 ~]#cat /etc/auto.d2

d3     -fstype=nfs         192.168.32.8:/data/share2  

[root@centos7 ~]#systemctl restart autofs      #重启对应服务
[root@centos7 ~]#
[root@centos7 ~]#cd /data/d1/d2/
[root@centos7 d2]#cd
[root@centos7 ~]#ls /data/d1/d2/
[root@centos7 ~]#cd /data/d1/d2/d3
[root@centos7 d3]#ls
share2.txt
[root@centos7 d3]#df
Filesystem                1K-blocks    Used Available Use% Mounted on
/dev/sda2                 104806400 1575980 103230420   2% /
devtmpfs                     920776       0    920776   0% /dev
tmpfs                        931624       0    931624   0% /dev/shm
tmpfs                        931624    9808    921816   2% /run
tmpfs                        931624       0    931624   0% /sys/fs/cgroup
/dev/sda5                  52403200   33092  52370108   1% /data
/dev/sda1                   1038336  140228    898108  14% /boot
tmpfs                        186328       0    186328   0% /run/user/0
192.168.32.8:/data/share1  52403200  398592  52004608   1% /mnt/nfs1
192.168.32.8:/data/share2  52403200  398592  52004608   1% /data/d1/d2/d3
[root@centos7 d3]#

绝对路径法

把namedir和basename放在一起。

  1. /etc/auto.master 格式
/-       指定配置文件路径
  1. 指定配置文件格式
绝对路径       挂载选项        选项设备

范例:绝对路径法

vim /etc/auto.master:
/-   /etc/auto.direct
vim /etc/auto.direct:
/foo -fstype=nfs server1:/export/foo
/user/local/ -fstype=nfs,vers=3 server1:/usr/local
/mnt/cdrom -fstype=iso9660 :/dev/cdrom

范例:

[root@centos7 ~]#vim /etc/auto.master

[root@centos7 ~]#cat /etc/auto.master |grep -Ev "^#|^$"
/-      /etc/auto.d2   #这个表示在 /etc/auto.d2 中需要写完整路径

[root@centos7 ~]#vim /etc/auto.d2 
[root@centos7 ~]#cat /etc/auto.d2

/data/d1/d2/d3     -fstype=nfs         192.168.32.8:/data/share2   #写上完整的路径/data/d1/d2/d3
[root@centos7 ~]#
[root@centos7 ~]#systemctl restart autofs
[root@centos7 ~]#df
Filesystem                1K-blocks    Used Available Use% Mounted on
/dev/sda2                 104806400 1576036 103230364   2% /
devtmpfs                     920776       0    920776   0% /dev
tmpfs                        931624       0    931624   0% /dev/shm
tmpfs                        931624    9808    921816   2% /run
tmpfs                        931624       0    931624   0% /sys/fs/cgroup
/dev/sda5                  52403200   33092  52370108   1% /data
/dev/sda1                   1038336  140228    898108  14% /boot
tmpfs                        186328       0    186328   0% /run/user/0
192.168.32.8:/data/share1  52403200  398592  52004608   1% /mnt/nfs1
[root@centos7 ~]#ls /data/d1/d2/d3/       #访问
share2.txt
[root@centos7 ~]#df
Filesystem                1K-blocks    Used Available Use% Mounted on
/dev/sda2                 104806400 1576016 103230384   2% /
devtmpfs                     920776       0    920776   0% /dev
tmpfs                        931624       0    931624   0% /dev/shm
tmpfs                        931624    9808    921816   2% /run
tmpfs                        931624       0    931624   0% /sys/fs/cgroup
/dev/sda5                  52403200   33092  52370108   1% /data
/dev/sda1                   1038336  140228    898108  14% /boot
tmpfs                        186328       0    186328   0% /run/user/0
192.168.32.8:/data/share1  52403200  398592  52004608   1% /mnt/nfs1
192.168.32.8:/data/share2  52403200  398592  52004608   1% /data/d1/d2/d3 #自动挂载
[root@centos7 ~]#

如果要取消自动挂载的挂载,需要停了服务之后才能取消挂载
优点:自动挂载,省资源。

实战案例

目标
将NFS的共享目录,通过autofs 发布出来,做为远程主机用户的家目录

环境准备
三台主机
一台主机 nfs server,IP:192.168.8.100
另两台当 nfs client,IP:192.168.8.101和192.168.8.102

步骤

#NFS服务器创建用户和相应的家目录,将用户wang的家目录共享
useradd -d /data/wang wang
vim /etc/exports.d/test.exports
/data/wang *(rw,anonuid=1000,anongid=1000,all_sqush)

#在第一台NFS客户端主机192.168.8.101上实现相对路径法的autofs
vim /etc/auto.master
/home      /etc/homeauto

vim /etc/homeauto
*    -fstype=nfs,vers=3   192.168.8.100:/data/wang/&
#注意:home目录下其它用户家目录无法访问

#在第二台NFS客户端主机192.168.8.102上实现绝对路径法的autofs
vim /etc/auto.master
/-  /etc/homeauto
vim  /etc/homeauto
/home/wang  -fstype=nfs,vers=3  192.168.8.102:/data/wang

你可能感兴趣的:(NFS共享服务,NFS工具,NFS服务自动挂载)