建立 NFS 服务器,使用客户端成功访问
# 搭建环境
server 为服务端, node1 为客户端
( 客户端是通过 服务端克隆出来的机子,并改了 IP 和 主机名)
IP 都显示出,并且双方能够 Ping 通
这样准备环境就搭好了。
服务端 :
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# yum install nfs-utils -y
[root@server ~]# yum install rpcbind -y
客户端 :
[root@node1 ~]# setenforce 0
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# yum install nfs-utils -y
[root@node1 ~]# yum install rpcbind -y
# 可以看到的是, 我们给客户端 也安装了 nfs-utils 这个主程序, 虽然我们并不是给客
户端组建文件共享,但是,会利用到 里面的命令,有些命令也是依赖于 这个软件包的。
所以,我们就给 客户端 也安装了 NFS 主程序。
[root@server ~]# mkdir /nfsfile
[root@server ~]# chmod -Rf 777 /nfsfile
[root@server ~]# echo 'welcome to NFS' > /nfsfile/readme
# 我们在 服务端 建立共享文件目录 ( /nfsfile ),将来用于共享给客户端。
# 我们给 /nfsfile 设置了权限, 可以看到权限设置成了 777,我们给足了权限。
我们前面不是讲了, NFS 不是有权限嘛 ( 叫什么 ro, rw 啥的),我们当时也特意
强调过,不管你 NFS 的权限是啥,最终都得取决于 这个 共享文件本身的权限, 也即
是 我们在此创建的 /nfsfile 这个目录的权限,我们给足了,给成了 777 ,这样也是为
了待会儿做实验以对比。
我们设置权限的时候 还加了 参数 R ,代表递归,就是这个 /nfsfile 目录下如果还有级
别,那么相对应的权限也和 /nfsfile 保持一致 ;
参数 f 就代表 文件 ,就指的是 /nfsfile 。
# 我们给 /nfsfile 目录里也弄点东西, 这样实验也好体现出来。 写了一句话,写到了该
目录下的一个文件中。
[root@server ~]# vim /etc/exports
/nfsfile 192.168.229.128/24(rw,sync,all_squash)
可以看到的是,上示在主配置文件中 我们写入的内容就是完全基于前面我们所说的
NFS 主配置文件里的共享参数
共享目录 ( /nfsfile )
允许谁访问( IP 为 :192.168.229.128 的主机访问 ,注意 掩码 别忘了写)
共享权限参数( rw,sync,all_squash)
* 这个主配置文件可能没有,我们就直接 Vim 就行 ( 这不就顺便建立了 )
[root@server ~]# systemctl start rpcbind
[root@server ~]# systemctl start nfs-server
[root@server ~]# systemctl enable rpcbind # 加入开机启动
[root@server ~]# systemctl enable nfs-server # 注意 NFS 的服务名为 nfs-server
注 : 若启动 rpcbind 时报错,可以先停止服务再重新启动
[root@server ~]# systemctl stop rpcbind
[root@server ~]# systemctl start rpcbind
至此,前四步,针对 服务端的操作就进行完了 ~!!
[root@node1 ~]# mkdir /nfsfile_khd
客户端不是要挂载远程目录嘛,所以你客户端本地是不是也得有个目录
所以,创建一个目录 。
& showmount 格式 : showmount -参数 服务器端IP 地址
参数 | 作用 |
-e | 显示 NFS 服务器端的共享列表 |
-a | 显示 本机 挂载的文件资源信息 |
-v | 显示 版本号 |
[root@node1 ~]# showmount -e 192.168.229.130 ( IP 为服务器端的地址 )
Export list for 192.168.229.130: # 显示 共享的列表来自于哪台主机
/nfsfile 192.168.229.128/24 # 显示 列表信息共享的目录名是啥,以及 允许的IP 是谁
===>>>
执行完 showmount 命令后,便显示上示所显两行 内容
进行挂载 :
[root@node1 ~]# mount -t nfs 192.168.229.130:/nfsfile /nfsfile_khd
按照 NFS 文件系统进行挂载, 挂载 192.168.229.130 这台机子下的 /nfsfile , 挂载到本地
目录 /nfsfile_khd 下。
[root@node1 ~]# cd /nfsfile_khd/
[root@node1 nfsfile_khd]# ls
readme
[root@node1 nfsfile_khd]# more readme
welcome to NFS
# 在客户端挂载成功之后,我们进行了测试,测试的机理就是 ,既然挂载成功了,
那么, 就应该能够访问到 192.168.229.130( 即服务器端 ) 的 /nfsfile 里的内容。
显然,上示代码就呈现出 我们可以访问到 readme , 并显示出其内容 。
[root@server nfsfile]# ls
readme
[root@node1 nfsfile_khd]# touch t1.txt
[root@node1 nfsfile_khd]# ls
readme t1.txt
[root@server nfsfile]# ls
readme t1.txt
我们还可以再进行一种测试 :
# 上示 , 首先 ,我们在服务端,显示了共享目录的文件内容,显示 只有 readme 这一个文件
然后,我们定位到了 客户端, 在客户端的 本地挂载目录 ( 即 nfsfile_khd ) 里 新建了
t1.txt, 再罗列下 显示了 readme , t1.txt 两个文件。
而,此时,我们在定位到 服务端 ,显示共享目录的文件,此时便多了一个文件,多的这个
文件是什么 ??
就是 ,我们在 客户端 /nfsfile_khd 里新建的文件 。
我们在 客户端,新建了一个文件, 同时,服务端 也就多了一个文件,本质上就是,新建到
服务端的共享目录里了,说白就是通过客户端( 本地 )的挂载目录( nfsfile_khd )来访问
远程( 服务端 ) 的目录; 再定位回到 服务端,就可以看见 共享目录里多了一个文件,这
其实,换句话讲也是 把文件上传了~!!!!
所以说, NFS 比较有特征的就是 感受不到 上传下载,无论有多远,共享目录都能像是在
本地的目录里操作一样。
注意 :
我们再定位下 客户端,将客户端重启下
===>>>
[root@node1 ~]# reboot
客户端重启完后,再连接上。
由于我们重启了,所以,我们还需要再进行一下 预处理的操作
===>>>
[root@node1 ~]# setenforce 0
[root@node1 ~]# systemctl stop firewalld
然后,我们再访问下本地的目录, 访问下 /nfsfile_khd ,看看这里有什么变化
===>>>
[root@node1 ~]# cd /nfsfile_khd
[root@node1 nfsfile_khd]# ls
[root@node1 nfsfile_khd]#
咦~!!! 什么情况 ???
/nfsfile_khd 里怎么没有 之前 共享文件( readme ) 呢 ??
就是说我们从 本地的( 客户端 ) 挂载目录( /nfsfile_khd ) 怎么访问不到 远程(服务
端)的共享目录( /nfsfile/readme ) 了 ~!!!!
以及 我们在客户端 挂载目录里 创建的 t1.txt 都没有了 ~!!!
===>>>
举这个例子,主要也是想强调下 , 之前讲过的 挂载 ~!!!!
这就牵扯到我们之前讲到的, 挂载 的知识了~!1
===>>>
就是,只要是通过 临时挂载, 那么只要伴随着 系统重启,会自动卸载,所
以,要想重启不影响,那就得 进行 永久挂载,而不是 临时挂载了~!!!
我们再按着 挂载的流程 再来一遍,看看有什么发现
===>>>
[root@node1 nfsfile_khd]# mount -t nfs 192.168.229.130:/nfsfile /nfsfile_khd
[root@node1 nfsfile_khd]# ls
[root@node1 nfsfile_khd]# cd ..
[root@node1 /]# cd nfsfile_khd/
[root@node1 nfsfile_khd]# ls
readme t1.txt
可以看到,我们再次进行了 mount 挂载( 临时挂载 ) 的操作;
但是,注意 :
我们临时挂载完之后, 使用 ls 命令,却发现什么都没显示,都没列出 ~!!
这时,我们就得,使用下 cd .. 命令,退到上一级,然后再进来, 再使用 ls 命令 看看
此时,就列出 我们想要见到的文件了 ( readme, t1.txt )
这时,你应该是要有个疑问的 ,
咦, 怎么,我这两个文件( readme, t1.txt ) 又出现了,不是说,临时挂载,重启之后
就没了嘛, 怎么我再使用临时挂载,这两个文件又有了 ·????
不是说,得使用 永久挂载嘛, 为啥,我就仅仅只是进行了 临时挂载,就又有了 ~?!
===>>>
其实,问题的根本是在,回想下,当时,只是在 客户端实现了 重启,那服务端呢
服务端,并没有执行什么其它的操作
===>>>
[root@server nfsfile]# ls
readme t1.txt
因此,你在服务端 使用 ls ,就会发现, 那两个( readme, t1.txt ) 是都在的
所以,当客户端重启后,在客户端的挂载目录是看不到文件的,而再次使用临时挂
载又会有了文件, 这和 服务端 那边是有关系的~!!!
现在,我们在来说这个 系统重启之后,实现永久挂载的问题
===>>>
[root@node1 nfsfile_khd]# vim /etc/fstab
进入 /etc/fstab 文件后, 定位最后一行,添加内容
内容 :
& 挂载谁( 192.168.229.130 ), 冒号 , 谁里面的 /nfsfile 文件
服务端的 IP 地址 和 共享文件的路径
& 段与段之间的间隔用 Tab 不用 空格。
& 挂载到本地(客户端)的什么位置 ( /nfsfile_khd )
& 指明文件系统 ( NFS )
& defaults ( 注意末尾有 s )
& 0 0
而后,保存退出。
这样,我们实现的永久挂载的操作就执行完了,为了确保起见,我们可以再执行下
===>>>
[root@node1 nfsfile_khd]# mount -a
就是把没挂载都再确认挂载上 。
检测下 :
重启
[root@node1 nfsfile_khd]# reboot
进入挂载目录查看文件
[root@node1 ~]# cd /nfsfile_khd/
[root@node1 nfsfile_khd]# ls
readme t1.txt
显然,客户端重启之后,再进入挂载目录,就能看到 共享文件 还是在的。
这就说明,我们永久挂载实现成功,并且, 客户端就算系统重启,也不再对共享目录
产生影响,客户端依旧可以正常访问~!!!!!