NFS的共享与挂载

一、NFS网络文件服务

1.1简介

       NFS(Network File System 网络文件服务) 文件系统(软件)文件的权限 NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。 通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源 NFS 也是 NAS 存储 设备必然支持的一种协议。

NFS 它是文件系统,是操作系统内核来管理的

[root@localhost ~]#ls /lib/modules/3.10.0-693.el7.x86_64/kernel/fs/
binfmt_misc.ko.xz  ceph    dlm    fat      gfs2   lockd          nfs_common  overlayfs  udf
btrfs              cifs    exofs  fscache  isofs  mbcache.ko.xz  nfsd        pstore     xfs
cachefiles         cramfs  ext4   fuse     jbd2   nfs            nls         squashfs

1.2NFS存储

       NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。(远端过程调用:自己没有这种功能,调用别人的功能) NFS 也是 NAS 存储 设备必然支持的一种协议 以完成远 程到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务, 前者用于 NFS 共享发布和访问,后者用于 RPC 支持。 手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs。

特点: 采用TCP/IP传输网络文件 安全性低 简单易操作 适合局域网环境

1.3NFS原理

NFS的共享与挂载_第1张图片

NFS优势:

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

1.4NFS软件介绍

软件包:nfs-utils(包括服务器端和客户端)

相关软件包:rpcbind(必须)

nfs端口号不固定 RPC端口号111

NFS服务主要进程:

  • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录

  • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理

  • rpc.lockd 非必要,管理文件锁,避免同时写出错

  • rpc.statd 非必要,检查文件一致性,可修复文件

日志:/var/lib/nfs/

区别:

ftp:装客户端、服务端、设置,比较复制

nfs:简单,高效

NFS的主包:

nfs-utils

rpcbind

主配置文件路径:

/etc/exports

文件格式:

共享目录 可以访问的主机地址 (权限)

/share *

systemctl start nfs

exportfs -v:显示本机服务端的共享目录

exportfs -r:重新加载配置文件

1.5NFS共享配置文件格式

/dir        主机1(opt1,opt2)          主机2(opt1,opt2)...
共享目录      共享给哪个主机

格式说明:

- 以#开始的行为注释
- 主机格式

anonymous:表示使用*通配所有客户端
单个主机: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

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

默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS 
7以前的版本为nfsnobody
no_root_squash 远程root映射成NFS服务器的root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用
/data/nfs1        *(rw,all_squash,anonuid=1002,anongid=1002)

共享规则:

#查看当前共享信息
exportfs -v


[root@localhost ~]#exportfs -r
#重新加载服务配置
exportfs: No options for /share *: suggest *(sync) to avoid warning

###客户机上如何查看共享
[root@localhost yum.repos.d]#showmount -e 192.168.91.100
#
Export list for 192.168.91.100:
/share *

[root@localhost yum.repos.d]#mount 192.168.91.100:/share   /mnt/nfs1/
#                                   对方地址      共享文件夹   挂载点
[root@localhost yum.repos.d]#df


[root@localhost data]#chmod 777 /data/ -R
[root@localhost data]#chmod 755 /data/ -R
#恢复权限
[root@localhost data]#setfacl -m u:nfsnobody:rwx  /data/nfs1
#只给 nfsnobody用户 权限
[root@localhost data]#setfacl -b  /data/nfs1
#删除acl 列表


[root@localhost nfs1]#ll
#变成nobody   由root_squash(压缩缩小)  决定
总用量 4
-rw-r--r--. 1 nfsnobody nfsnobody    0 3月  21 01:17 111.txt
-rwxrwxrwx. 1 root      root      2259 3月  21 01:12 passwd


#普通用户不压榨   由   no_all_squash决定

/share    *(rw,no_root_squash)

###用户  uid问题####

统一压榨成指定用户

二、NFS工具

2.1exportfs

用于管理NFS导出的文件系统

常见选项:

-v      #查看本机所有NFS共享
-r      #重读配置文件,并共享目录
-a     #输出本机所有共享
-au   #停止本机所有共享

2.2showmount

用于客户端查看服务端的共享目录

常见用法:

showmount -e hostname  

[root@centos7 ~]#showmount -e 10.0.0.8
Export list for 10.0.0.8:
/data/wordpress *

2.3mount.nfs

永久挂载:

NFS的共享与挂载_第2张图片

NFS的共享与挂载_第3张图片

客户端NFS挂载

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

fg #(默认)前台挂载
bg #后台挂载
hard #(默认)持续请求
soft   #非持续请求
intr   #和hard配合,请求可中断
rsize #和wsize 一次读和写数据最大字节数,rsize=32768
_netdev #无网络连接不挂载
vers    #指定版本,客户端centos8默认4.2 ,centos7默认4.1 centos6默认4.0

例子

mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
#临时挂载


[root@centos7 ~]#mkdir /mnt/nfs
[root@centos7 ~]#mount 10.0.0.8:/data/wordpress /mnt/nfs
[root@centos7 ~]#ls /mnt/nfs
index.html
[root@centos7 ~]#df -T /mnt/nfs
Filesystem               Type 1K-blocks   Used Available Use% Mounted on
10.0.0.8:/data/wordpress nfs4  52403200 398336  52004864   1% /mnt/nfs

永久挂载
vim /etc/fstab  
172.16.0.1:/public   /mnt/nfs   nfs   defaults,_netdev(无网络就不加载)  0  0

三、NFS共享

systemctl  stop  firewalld

setenforce  0

#关闭防火墙和核心防护

rpm   -q  nfs-utils

rpm  -q  rpcbind

#看一下这两个软件有没有安装

NFS的共享与挂载_第4张图片

systemctl   status   nfs

systemctl   status   rpcbind 

#看一下有没有开启

NFS的共享与挂载_第5张图片

mkdir     /share

mkdir    /data

#建两个文件夹

NFS的共享与挂载_第6张图片

vim    /etc/exports

#进入nfs的配置文件

NFS的共享与挂载_第7张图片

exportfs     -v

#显示本机服务端的共享目录

exportfs     -r

#重新加载配置文件

NFS的共享与挂载_第8张图片

showmount     -e  172.16.18.5

#用于客户端查看服务端的共享目录

NFS的共享与挂载_第9张图片

mount    172.16.18.5:/data    /mnt

#挂载

NFS的共享与挂载_第10张图片

试验一下,使用data是否等于使用mnt

NFS的共享与挂载_第11张图片

NFS的共享与挂载_第12张图片

试验一下,在客户端,能否查看,创建服务端的文件

NFS的共享与挂载_第13张图片

NFS的共享与挂载_第14张图片

vim     /etc/exports

#在服务端,在nfs配置文件里,给他们加上读写权限

NFS的共享与挂载_第15张图片

exportfs     -v

#显示本机服务端的共享目录

exportfs     -r

#重新加载配置文件

NFS的共享与挂载_第16张图片

解决权限变更后,为什么还是创建不了?

NFS的共享与挂载_第17张图片

NFS的共享与挂载_第18张图片

NFS的共享与挂载_第19张图片

创建文件的用户身份怎么不对? 

NFS的共享与挂载_第20张图片

NFS的共享与挂载_第21张图片

NFS的共享与挂载_第22张图片

NFS的共享与挂载_第23张图片

NFS的共享与挂载_第24张图片

为什么会出现,有的用户身份改变,有的不变呢?

NFS的共享与挂载_第25张图片

如果不想身份改变

NFS的共享与挂载_第26张图片

NFS的共享与挂载_第27张图片

NFS的共享与挂载_第28张图片

NFS的共享与挂载_第29张图片

注意:在客户端和服务端,uid一样的用户、名字不同,可能会导致文件打不开

四、启动httpd服务搭建网站,实验NFS挂载

注意:在做之前,先开启NFS共享

1.7-2服务器

systemctl   stop   firewalld

setenforce   0

#关闭防火墙和核心防护

yum   install   httpd    -y

#安装httpd服务

NFS的共享与挂载_第30张图片

cd    /var/www/html

#切到网页主文件夹下

echo    7-2  >  index.html

#在index.html中写入内容:7-2

cat    index.html

#查看一下内容

systemctl  start  httpd

#开启httpd服务

NFS的共享与挂载_第31张图片

NFS的共享与挂载_第32张图片

2.7-3服务器

systemctl   stop   firewalld

setenforce   0

#关闭防火墙和核心防护

yum   install   httpd    -y

#安装httpd服务

NFS的共享与挂载_第33张图片

systemctl  start  httpd

#开启httpd服务

cd    /var/www/html

#切到网页主文件夹下

vim    index.html

#在index.html中写入内容:7-2

NFS的共享与挂载_第34张图片

NFS的共享与挂载_第35张图片




 

systemctl   stop   firewalld

setenforce   0

#关闭防火墙和核心防护

vim   index.html

#在index.html中写入ky35

NFS的共享与挂载_第36张图片

mount  172.16.18.5:/data     /var/www/html

#在7-2服务器上挂载,地址为7-1的

NFS的共享与挂载_第37张图片

mount  172.16.18.5:/data     /var/www/html

#在7-3服务器上挂载

NFS的共享与挂载_第38张图片

NFS的共享与挂载_第39张图片

NFS的共享与挂载_第40张图片

五、工作环境

5.1误将 rpm 软件删除

[root@localhost ~]#type rpm
#是一个外部命令
rpm 是 /usr/bin/rpm

[root@localhost ~]#rpm -e rpm
#依赖性会组织
错误:依赖检测失败:
    rpm = 4.11.3-25.el7 被 (已安裝) rpm-libs-4.11.3-25.el7.x86_64 需要
    rpm 被 (已安裝) color-filesystem-1-13.el7.noarch 需要
    rpm = 4.11.3-25.el7 被 (已安裝) rpm-python-4.11.3-25.el7.x86_64 需要
    rpm >= 0:4.11.3-22 被 (已安裝) yum-3.4.3-154.el7.centos.noarch 需要
    rpm >= 4.1.1 被 (已安裝) createrepo-0.9.9-28.el7.noarch 需要
    rpm 被 (已安裝) policycoreutils-2.5-17.1.el7.x86_64 需要
    rpm 被 (已安裝) cmake-2.8.12.2-2.el7.x86_64 需要

[root@localhost ~]#rpm -e rpm --nodeps 
#忽略依赖关系
[root@localhost ~]#yum install rpm -y
#yum 也是 使用rpm  无法安装了
error: Unable to open /usr/lib/rpm/rpmrc for reading: No such file or directory.
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:


进入救援模式
1 继续

NFS的共享与挂载_第41张图片

5.2自行打包后建立元数据

mount /dev/sr0 /mnt/
cp  /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm 
mkdir test
mv tree-1.6.0-10.el7.x86_64.rpm  test/
cd test
mkdir packages
mv tree-1.6.0-10.el7.x86_64.rpm packages/
createrepo -v test
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak/

vim tree.repo
[tree]
name=tree
baseurl=file:///data/test
gpgcheck=0

yum clean all
yum makecache
yum install tree -y

5.3epel源本地

没有外网  又想使用这个epel源      

[root@localhost ~]#yum install epel-release
#安装epel源    生成epel仓库文件
[root@localhost ~]# reposync -r epel -p /root/
#下载同步epel源  根据epel仓库文件去找目录

[root@localhost ~]# yum -y install createrepo
#安装建立元数据命令
[root@localhost ~]# createrepo -v /root/epel
#建立元数据    软件目录  依赖关系  
[root@localhost ~]# ls
anaconda-ks.cfg  epel
[root@localhost ~]# cd epel/
[root@localhost epel]# ls
#查看元数据


ftp
http


mkisofs -r -o  /root/xxx.iso /data/centos7/epel 
制作成镜像

5.4离线安装软件

root@localhost yum.repos.d]#yum install nginx
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 nginx.x86_64.1.1.20.1-9.el7 将被 安装
--> 正在处理依赖关系 nginx-filesystem = 1:1.20.1-9.el7,它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 nginx-filesystem,它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libssl.so.1.1(OPENSSL_1_1_1)(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libssl.so.1.1(OPENSSL_1_1_0)(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libcrypto.so.1.1(OPENSSL_1_1_0)(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libssl.so.1.1()(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在处理依赖关系 libcrypto.so.1.1()(64bit),它被软件包 1:nginx-1.20.1-9.el7.x86_64 需要
--> 正在检查事务
---> 软件包 nginx-filesystem.noarch.1.1.20.1-9.el7 将被 安装
---> 软件包 openssl11-libs.x86_64.1.1.1.1k-2.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

==========================================================================================================
 Package                       架构                版本                           源                 大小
==========================================================================================================
正在安装:
 nginx                         x86_64              1:1.20.1-9.el7                 epel              587 k
为依赖而安装:
 nginx-filesystem              noarch              1:1.20.1-9.el7                 epel               24 k
 openssl11-libs                x86_64              1:1.1.1k-2.el7                 epel              1.5 M

事务概要
==========================================================================================================
安装  1 软件包 (+2 依赖软件包)

总下载量:2.1 M
安装大小:5.2 M
Is this ok [y/d/N]: 


[root@localhost yum.repos.d]# yum install nginx --downloadonly --downloaddir=/data/
[root@localhost http]#yum install nginx --downloadonly --downloaddir=/nginx/
--downloadonly  #只下载相关包默认至某一目录
--downloaddir=绝对目录路径  #下载到某一目录  

真实  内网外网不可能互通     

rpm   
包依赖?
rpm  

你可能感兴趣的:(服务器,网络,linux,运维,ssh,php)