被称为客户端/服务器文件系统的网络文件系统(NFS)是一个流行的,跨平台以及分布式文件系统协议,其用于在网络上导出本地文件系统,使得客户端通过网络与其它机器共享目录和文件并且与它们交互,就像它们被本地挂载一样。
在RHEL 8上,可支持的NFS版本是NFSv3和NFSv4,并且默认NFS版本是4.2,其特性支持访问控制列表(ACLs),服务端复制,松散文件,空间预留,带标签的NFS,布局增强以及更多。
在本文种,我们学习如何在基于RHEL 8的Linux发行版上按照和配置NFS服务器和NFS客户端。
我们测试环境:
NFS 服务器IP:192.168.50.128 AlmaLinux 8
NFS客户端IP: 192.168.50.150 RockyLinux 8
在AlamLinux上设置NFS服务器
1、首先在NFS服务器上按照所需软件包。软件包是nfs-utls,它为内核NFS服务器提供了一个守护程序和相关工具,诸如包含showmount命令。
在NFS服务器上运行以下命令按照这个软件包(如果你以非root用户管理系统,使用sudo)
[root@localhost blctrl]# dnf install nfs-utils
2、安装完成后,用systemctl命令启动nfs-server服务,使其在系统启动时自动启动,并且接着验证它的状态。
[root@localhost blctrl]# systemctl start nfs-server
[root@localhost blctrl]# systemctl enable nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
[root@localhost blctrl]# systemctl status nfs-server
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor p>
Active: active (exited) since Mon 2022-07-11 14:08:57 CST; 10s ago
Main PID: 173982 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 23504)
Memory: 0B
CGroup: /system.slice/nfs-server.service
Jul 11 14:08:57 localhost.localdomain systemd[1]: Starting NFS server and servic>
Jul 11 14:08:57 localhost.localdomain systemd[1]: Started NFS server and service>
lines 1-10/10 (END)...skipping...
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
Active: active (exited) since Mon 2022-07-11 14:08:57 CST; 10s ago
Main PID: 173982 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 23504)
Memory: 0B
CGroup: /system.slice/nfs-server.service
注意:运行一个NFS服务器或挂载NFS共享的其它服务,诸如nfsd, nfs-idmapd, rpcbind, rpc.mounted, lockd, rpc.statd, rpc.rquotad和rpc.idmapd将被自动启动。
NFS服务器的配置文件是:
- /etc/nfs.conf:NFS守护程序和工具的主配置文件
- /etc/nfsmount.conf:一个NFS挂载的配置文件。
3、接着,在NFS服务器上创建要导出或共享的文件系统。在这里,我们将创建四个文件系统,其中三个被来自三个部门的员工使用:人力资源、财务和市场共享文件,一个用于root用户备份。
[root@localhost blctrl]# mkdir -p /mnt/nfs_shares/{hr,finace,market}
[root@localhost blctrl]# mkdir -p /mnt/nfs_shares/backups
[root@localhost blctrl]# ls -l /mnt/nfs_shares/
total 0
drwxr-xr-x. 2 root root 6 Jul 11 15:53 backups
drwxr-xr-x. 2 root root 6 Jul 11 15:53 finace
drwxr-xr-x. 2 root root 6 Jul 11 15:53 hr
drwxr-xr-x. 2 root root 6 Jul 11 15:53 market
4、在NFS服务器/etc/exports配置文件中导出以上文件系统来确定对于NFS客户端可访问的本地物理文件系统。
[root@localhost blctrl]# cat /etc/exports
/mnt/nfs_share/hr 192.168.50.0/24(rw,sync)
/mnt/nfs_share/finance 192.168.50.0/24(rw,sync)
/mnt/nfs_share/market 192.168.50.0/24(rw,sync)
/mnt/nfs_share/backups 192.168.50.0/24(rw,sync,no_all_squash,root_squash)
这是exports选选项中的一些(更多信息和export选项阅读man exports)
- rw:允许在文件系统上读写。
- sync:高速NFS服务器在请求(默认使用)时写操作(写信息到磁盘)
- all_squash:映射来自客户端请求的所有UIDs和GIDs为匿名用户。
- no_all_squash:映射来自客户端请求的所有UID和GIDs为在NFS服务器上相同的UIDs和GIDs。
- root_squash:映射来自root用户或UID/GID 0的请求为匿名UID/GID。
5、要导出以上文件系统,用-a标记允许exportfs命令,表示导出或者取消导出所有目录,-r表示重新导出所有目录,与/etc/exports和在/etc/exports.d下的文件同步/var/lib/etab,而-v使能详细输出。
[root@localhost blctrl]# exportfs -arv
exporting 192.168.50.0/24:/mnt/nfs_shares/backups
exporting 192.168.50.0/24:/mnt/nfs_shares/market
exporting 192.168.50.0/24:/mnt/nfs_shares/finance
exporting 192.168.50.0/24:/mnt/nfs_shares/hr
6、要显示当前导出列表,运行以下命令。注意:exports表也应用了一些没有显式被定义的默认exports选项。
[root@localhost blctrl]# exportfs -s
/mnt/nfs_shares/hr 192.168.50.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw, secure,root_squash,no_all_squash)
/mnt/nfs_shares/finance 192.168.50.0/24(sync,wdelay,hide,no_subtree_check,sec=sy s,rw,secure,root_squash,no_all_squash)
/mnt/nfs_shares/market 192.168.50.0/24(sync,wdelay,hide,no_subtree_check,sec=sys ,rw,secure,root_squash,no_all_squash)
/mnt/nfs_shares/backups 192.168.50.0/24(sync,wdelay,hide,no_subtree_check,sec=sy s,rw,secure,root_squash,no_all_squash)
7、接下来,如果你运行了firewalld服务,你需要允许必要的NFS服务流量(mounted, nfs, rpc-bind)通过防火墙,接着重载防火墙规则来允许变化:
[root@localhost blctrl]# firewall-cmd --permanent --add-service=nfs
[root@localhost blctrl]# firewall-cmd --permanent --add-service=rpc-bind
[root@localhost blctrl]# firewall-cmd --permanent --add-service=mounted
[root@localhost blctrl]# firewall-cmd --reload
8、更改/mnt/nfs_shares/backups目录的所有者和所有组为nobody:nobody:
[root@localhost blctrl]# chown nobody:nobody -R /mnt/nfs_shares/backups
在客户系统上设置NFS客户端
1、现在在客户节点,在客户系统上安装必要的软件包来访问NFS共享。运行合适你发行版的命令:
基于RHEL的发行版上
[root@areadetector blctrl]# dnf install nfs-utils nfs4-acl-tools
在Ubuntu上:
blctrl@blctrl-KVM:~/Desktop$ sudo apt install nfs-common nfs4-acl-tools
2、运行showmount命令显式NFS服务器的信息。命令应该在客户端上输出导出的文件系统。
[root@areadetector blctrl]# showmount -e 192.168.50.128
Export list for 192.168.50.128:
/mnt/nfs_shares/backups 192.168.50.0/24
/mnt/nfs_shares/market 192.168.50.0/24
/mnt/nfs_shares/finance 192.168.50.0/24
/mnt/nfs_shares/hr 192.168.50.0/24
3、接着,为挂载远程NFS文件系统创建一个本地文件系统目录并且以nfs文件系统挂载它。
[root@areadetector blctrl]# mkdir -p /mnt/backups
[root@areadetector blctrl]# mount -t nfs 192.168.50.128:/mnt/nfs_shares/backups /mnt/backups
4、接着通过mount命令和过滤nfs确认已经挂载了远程文件系统:
[root@areadetector blctrl]# mount | grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
192.168.50.128:/mnt/nfs_shares/backups on /mnt/backups type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.50.150,local_lock=none,addr=192.168.50.128)
5、要在系统重启后,能够一直挂载,运行以下命令在/etc/fstab中增加合适的条目:
[root@areadetector blctrl]# echo "192.168.50.128:/mnt/nfs_shares/backups /mnt/backups nfs defaults 0 0" >>/etc/fstab
[root@areadetector blctrl]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Jan 1 00:32:29 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root / xfs defaults 0 0
UUID=2a91513c-5b4f-43fa-8703-342700a4d86a /boot xfs defaults 0 0
UUID=9170-5EA4 /boot/efi vfat umask=0077,shortname=winnt 0 2
/dev/mapper/rl-home /home xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
/dev/sda4 /home/blctrl xfs defaults 0 0
//192.168.50.128/public /mnt/smb_public cifs defaults 0 0
//192.168.50.128/private /mnt/smb_private cifs username=smbuser,password=xrdxrd 0 0
192.168.50.128:/mnt/nfs_shares/backups /mnt/backups nfs defaults 0 0
[root@areadetector blctrl]# mount -a
[root@areadetector blctrl]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 4.1G 59G 7% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/mapper/rl-root 330G 60G 271G 19% /
/dev/mapper/rl-home 595M 132M 463M 23% /home
/dev/sda2 1014M 186M 829M 19% /boot
/dev/sda4 596G 57G 539G 10% /home/blctrl
/dev/sda1 599M 5.7M 594M 1% /boot/efi
tmpfs 13G 60K 13G 1% /run/user/1000
//192.168.50.128/private 36G 6.8G 29G 20% /mnt/smb_private
//192.168.50.128/public 36G 6.8G 29G 20% /mnt/smb_public
192.168.50.128:/mnt/nfs_shares/backups 36G 6.8G 29G 20% /mnt/backups
6、最后,通过在服务器上创建文件并且在客户端中是否可以看到这个文件测试NFS是否运行正常:
服务器:
[root@localhost backups]# rm -rf client.txt
[root@localhost backups]# ls
[root@localhost backups]# touch server.txt
[root@localhost backups]# ls
server.txt
客户端:
[root@areadetector blctrl]# cd /mnt/backups/
[root@areadetector backups]# ls
server.txt
7、在客户端卸载远程文件系统:
[root@areadetector backups]# cd ..;umount /mnt/backups
[root@areadetector mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 4.1G 59G 7% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/mapper/rl-root 330G 60G 271G 19% /
/dev/mapper/rl-home 595M 132M 463M 23% /home
/dev/sda2 1014M 186M 829M 19% /boot
/dev/sda4 596G 57G 539G 10% /home/blctrl
/dev/sda1 599M 5.7M 594M 1% /boot/efi
tmpfs 13G 60K 13G 1% /run/user/1000
//192.168.50.128/private 36G 6.8G 29G 20% /mnt/smb_private
//192.168.50.128/public 36G 6.8G 29G 20% /mnt/smb_public
[root@areadetector mnt]# ls backups/