Linux之NFS网络文件系统

时间:2022-12-18 14:27:26

  NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络资源共享。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

1、好处

(1)节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。

(2)用户不需要在网络中的每台计算机上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。

(3)一些存储设备如软驱、CDROM和ZIP等都可以在网络上被别的机器使用。这可以减少整个网络上移动介质设备的数量。

2、组成

NFS体系至少有两个主要部分:一台NFS服务器和若干台客户机,如图所示

Linux之NFS网络文件系统

客户机可以通过TCP/IP网络远程访问存放在NFS上的数据。

NFS实现是通过RPC服务来实现的

Linux之NFS网络文件系统

实现过程:

(1)NFS RPC的主要功能是记录每个NFS功能所对应的端口号,并将信息传递给请求数据的NFS客户端,从而实现数据的传输。

(2)NFS服务启动时会随机取用数个端口,并主动向RPC服务注册取用的相关端口信息,RPC服务就知道每个端口对应的NFS功能了,然后RPC会用固定的端口(111)来监听NFS客户端的请求,将正确的NFS端口传给NFS的客户端

服务启动顺序:RPC--》NFS

3、服务器端安装,配置过程

(1)检查是否安装NFS RPC服务

[root@localhost ~]# rpm -qa nfs-utils rpcbind
[root@localhost
~]# yum install nfs-utils rpcbind -y
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base
| 3.7 kB 00:00
extras
| 3.4 kB 00:00
extras
/primary_db | 30 kB 00:00
updates
| 3.4 kB 00:00
Resolving Dependencies
--> Running transaction check
---> Package nfs-utils.x86_64 1:1.2.3-75.el6_9 will be installed
--> Processing Dependency: nfs-utils-lib >= 1.1.0-3 for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: libtirpc >= 0.2.1-11 for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: keyutils >= 1.4-4 for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: python-argparse for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: libgssglue.so.1(libgssapi_CITI_2)(64bit) for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: libgssglue for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: libevent for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: libtirpc.so.1()(64bit) for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: libnfsidmap.so.0()(64bit) for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: libgssglue.so.1()(64bit) for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
--> Processing Dependency: libevent-1.4.so.2()(64bit) for package: 1:nfs-utils-1.2.3-75.el6_9.x86_64
---> Package rpcbind.x86_64 0:0.2.0-13.el6_9.1 will be installed
--> Running transaction check
---> Package keyutils.x86_64 0:1.4-5.el6 will be installed
---> Package libevent.x86_64 0:1.4.13-4.el6 will be installed
---> Package libgssglue.x86_64 0:0.1-11.el6 will be installed
---> Package libtirpc.x86_64 0:0.2.1-13.el6_9 will be installed
---> Package nfs-utils-lib.x86_64 0:1.1.5-13.el6 will be installed
---> Package python-argparse.noarch 0:1.2.1-2.1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================
Package Arch Version Repository Size
==============================================================================
Installing:
nfs
-utils x86_64 1:1.2.3-75.el6_9 updates 336 k
rpcbind x86_64
0.2.0-13.el6_9.1 updates 51 k
Installing
for dependencies:
keyutils x86_64
1.4-5.el6 base 39 k
libevent x86_64
1.4.13-4.el6 base 66 k
libgssglue x86_64
0.1-11.el6 base 23 k
libtirpc x86_64
0.2.1-13.el6_9 updates 82 k
nfs
-utils-lib x86_64 1.1.5-13.el6 base 71 k
python
-argparse noarch 1.2.1-2.1.el6 base 48 k

Transaction Summary
==============================================================================
Install
8 Package(s)

Total download size:
716 k
Installed size:
2.0 M
Downloading Packages:
(
1/8): keyutils-1.4-5.el6.x86_64.rpm | 39 kB 00:00
(
2/8): libevent-1.4.13-4.el6.x86_64.rpm | 66 kB 00:00
(
3/8): libgssglue-0.1-11.el6.x86_64.rpm | 23 kB 00:00
(
4/8): libtirpc-0.2.1-13.el6_9.x86_64.rpm | 82 kB 00:00
(
5/8): nfs-utils-1.2.3-75.el6_9.x86_64.rpm | 336 kB 00:00
(
6/8): nfs-utils-lib-1.1.5-13.el6.x86_64.rpm | 71 kB 00:00
(
7/8): python-argparse-1.2.1-2.1.el6.noarch.rpm | 48 kB 00:00
(
8/8): rpcbind-0.2.0-13.el6_9.1.x86_64.rpm | 51 kB 00:00
------------------------------------------------------------------------------
Total
1.1 MB/s | 716 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : libgssglue
-0.1-11.el6.x86_64 1/8
Installing : libtirpc
-0.2.1-13.el6_9.x86_64 2/8
Installing : rpcbind
-0.2.0-13.el6_9.1.x86_64 3/8
Installing : python
-argparse-1.2.1-2.1.el6.noarch 4/8
Installing : libevent
-1.4.13-4.el6.x86_64 5/8
Installing : keyutils
-1.4-5.el6.x86_64 6/8
Installing : nfs
-utils-lib-1.1.5-13.el6.x86_64 7/8
Installing :
1:nfs-utils-1.2.3-75.el6_9.x86_64 8/8
Verifying : rpcbind
-0.2.0-13.el6_9.1.x86_64 1/8
Verifying : libtirpc
-0.2.1-13.el6_9.x86_64 2/8
Verifying : keyutils
-1.4-5.el6.x86_64 3/8
Verifying : libevent
-1.4.13-4.el6.x86_64 4/8
Verifying : nfs
-utils-lib-1.1.5-13.el6.x86_64 5/8
Verifying : libgssglue
-0.1-11.el6.x86_64 6/8
Verifying :
1:nfs-utils-1.2.3-75.el6_9.x86_64 7/8
Verifying : python
-argparse-1.2.1-2.1.el6.noarch 8/8

Installed:
nfs
-utils.x86_64 1:1.2.3-75.el6_9 rpcbind.x86_64 0:0.2.0-13.el6_9.1

Dependency Installed:
keyutils.x86_64
0:1.4-5.el6 libevent.x86_64 0:1.4.13-4.el6
libgssglue.x86_64
0:0.1-11.el6 libtirpc.x86_64 0:0.2.1-13.el6_9
nfs
-utils-lib.x86_64 0:1.1.5-13.el6 python-argparse.noarch 0:1.2.1-2.1.el6

Complete
!
[root@localhost
~]# rpm -qa nfs-utils rpcbind
rpcbind
-0.2.0-13.el6_9.1.x86_64
nfs
-utils-1.2.3-75.el6_9.x86_64

(2)安装完成后,启动相关服务

[root@localhost ~]# rpm -qa nfs-utils rpcbind
rpcbind
-0.2.0-13.el6_9.1.x86_64
nfs
-utils-1.2.3-75.el6_9.x86_64
[root@localhost
~]# /etc/init.d/rpcbind status
rpcbind is stopped
[root@localhost
~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
[root@localhost
~]# /etc/init.d/rpcbind status
rpcbind (pid
1958) is running...
[root@localhost
~]# /etc/init.d/nfs
anaconda
-ks.cfg .bashrc install.log.syslog
.bash_logout .cshrc .tcshrc
.bash_profile
install.log
[root@localhost
~]# /etc/init.d/nfs status
rpc.svcgssd is stopped
rpc.mountd is stopped
nfsd is stopped
[root@localhost
~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
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
[root@localhost
~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@localhost
~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
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
100005 1 udp 53776 mountd
100005 1 tcp 45705 mountd
100005 2 udp 59195 mountd
100005 2 tcp 37339 mountd
100005 3 udp 51079 mountd
100005 3 tcp 42701 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 55657 nlockmgr
100021 3 udp 55657 nlockmgr
100021 4 udp 55657 nlockmgr
100021 1 tcp 56873 nlockmgr
100021 3 tcp 56873 nlockmgr
100021 4 tcp 56873 nlockmgr

让RPC、NFS服务开机自启,在实际生产环境中都会将配置放在/etc/rc.local下面

[root@localhost ~]# vim /etc/rc.local 
[root@localhost
~]# cat /etc/rc.local
#
!/bin/sh
#
# This script will be executed
*after* all the other init scripts.
# You can put your own initialization stuff
in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/etc/init.d/rpcbind start
/etc/init.d/nfs start

(3)配置服务端NFS配置文件/etc/exports

[root@localhost ~]# cat /etc/exports 
##nfs server created by cairui at
2018-2-17
/home/cairui 192.168.181.128(rw)
[root@localhost
~]# /etc/init.d/nfs
anaconda
-ks.cfg .bashrc install.log.syslog
.bash_logout .cshrc .tcshrc
.bash_profile
install.log .viminfo
[root@localhost
~]# /etc/init.d/nfs reload
[root@localhost
~]# /etc/init.d/nfs restart
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS services: [ OK ]
Shutting down RPC idmapd: [ OK ]
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]

4、客户端配置

[root@localhost ~]# rpm -qa | grep nfs
nfs
-utils-lib-1.1.5-13.el6.x86_64
nfs
-utils-1.2.3-75.el6_9.x86_64
[root@localhost
~]# rpm -qa | grep rpc
rpcbind
-0.2.0-13.el6_9.1.x86_64
libtirpc
-0.2.1-13.el6_9.x86_64
[root@localhost
~]# /etc/init.d/rpcbind status
rpcbind is stopped
[root@localhost
~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
[root@localhost
~]# /etc/init.d/rpcbind status
rpcbind (pid
1463) is running...
[root@localhost
~]# /etc/init.d/nfs status
rpc.svcgssd is stopped
rpc.mountd is stopped
nfsd is stopped
[root@localhost
~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@localhost
~]# showmount -e 192.168.181.129
Export list
for 192.168.181.129:
/home/cairui 192.168.181.128
[root@localhost
~]# ping 192.168.181.129
PING
192.168.181.129 (192.168.181.129) 56(84) bytes of data.
64 bytes from 192.168.181.129: icmp_seq=1 ttl=64 time=0.348 ms
64 bytes from 192.168.181.129: icmp_seq=2 ttl=64 time=0.706 ms
64 bytes from 192.168.181.129: icmp_seq=3 ttl=64 time=0.512 ms
^C
--- 192.168.181.129 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2760ms
rtt min
/avg/max/mdev = 0.348/0.522/0.706/0.146 ms
[root@localhost
~]# iptables -F
[root@localhost
~]# showmount -e 192.168.181.129
Export list
for 192.168.181.129:
/home/cairui 192.168.181.128

客户端进行NFS挂载

[root@localhost ~]# mount -t nfs 192.168.181.129:/home/cairui /mnt
[root@localhost
~]# df -h
Filesystem Size Used Avail Use
% Mounted on
/dev/sda3 18G 1.4G 16G 9% /
tmpfs 491M
0 491M 0% /dev/shm
/dev/sda1 190M 30M 150M 17% /boot
192.168.181.129:/home/cairui
18G 809M 16G
5% /mnt

5、测试

服务端

[root@localhost ~]# cd /home/cairui/
[root@localhost cairui]#
touch 1.txt
[root@localhost cairui]#
ls -ll /home/cairui/
total
0
-rw-r--r--. 1 root root 0 Feb 17 17:15 1.txt
[root@localhost cairui]#
ls -ld /home/cairui/
drwx
------. 2 cairui cairui 4096 Feb 17 17:15 /home/cairui/
[root@localhost cairui]#
chmod 777 /home/cairui/
[root@localhost cairui]#
ls -ld /home/cairui/
drwxrwxrwx.
2 cairui cairui 4096 Feb 17 17:15 /home/cairui/

 [root@localhost cairui]# mkdir nfs

客户端

[root@localhost ~]# cd /mnt/
-bash: cd: /mnt/: Permission denied
[root@localhost
~]# ls -ll /mnt/
ls: cannot open directory /mnt/: Permission denied
[root@localhost
~]# cd /m
media
/ mnt/
[root@localhost
~]# cd /mnt/
[root@localhost mnt]#
ls
1.txt
[root@localhost mnt]#
ls
1.txt nfs
[root@localhost mnt]#

八.启动自动挂载nfs文件系统

格式:<server>:<remote/export>

      </local/directory> nfs <option> 0 0

#vim /etc/fstab

Linux之NFS网络文件系统

最后一行为后加的

保存退出,重启系统

或者修改

Linux之NFS网络文件系统