一、yum仓库简介
1.1 yum简介
yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间 为什么会有依赖关系的发生 因为linux本身就是以系统简洁为自身优势,所以在安装操作系统的时候并没有将所有的库文件以及编译软件包进行安装,所以在linux操作系统上进行软件安装的时候会出现软件包依赖的情况。yum由仓库和客户端组成,也就是整个yum由两部分组成,所以yum可以存放在两台服务器上。也可以存放在一台服务器上。可以有官方来提供服务,也可以由第三方来提供,比如国内的阿里云,搜狐云,还有一些非盈利组织比如学校等。官方的源一般在国外,下载速度肯定有限,手动更改成国内的云可以大幅提升下载速度。
YUM 的前身是 YUP(Yellow dog Updater,Yellow dog Linux 的软件更新器),最初由 TSS 公司(Terra Soft Solutions,INC.)使用 Python 语言开发而成,后来由杜克大学(Duck University)的 Linux 开发队伍进行改进,命名为 YUM(Yellow dog Updater,Modified)。 要成功使用 YUM 机制来更新系统和软件,需要有一个包含各种 rpm 安装包文件及其依 赖软件的软件仓库(repository),提供软件仓库的服务器也称为“源”服务器。在客户机中只 要正确指定软件仓库的地址等信息,就可以通过对应的“源”服务器来安装或更新软件。
1.2yum 实现过程
要有安装包
安装包:
1.光驱里自带 挂载提供软件包
2.网络下载
先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动下载repodata中的元数据,查询远数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。
yum需要依赖于环境,依赖于服务端和客户端,允许跨网络
服务器:
-
RPM包 (Packages文件夹中)
-
元数据(repodata文件夹:目录(软件的目录),软件的依赖关系,软件的位置)
客户端的配置文件中
baseurl=地址 一定要写到到 这两个文件夹 repodata packages 的上级目录
最终形成两个文件夹Packages (包文件夹一般取名packages)和 repodata(元数据文件夹)
仓库类型:
-
光盘的仓库基本仓库 比较常用的
-
epel扩展仓库 比较新
1.3如何实现安装服务
yum原理:
1.客户端 根据配置文件 找到 服务端
2.客户端将元信息下载到本地(元信息:安装包位置,以及安装的依赖关系。)
3.根据元信息 去下载 对应的安装包 到本地 ,然后安装。
4.安装完成后 再删除(需要时间) 安装包。
元信息是一个文件 ,里面记录了安装包位置,依赖关系。
二、 yum配置文件及命令
2.1 yum配置文件
2.1.1 主配置文件
位置:/etc/yum.conf //主配置文件
[root@localhost]# /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever //yum下载的RPM包的缓存目录 $basearch代表硬件架构 $releasever系统版本比如7
keepcache=0 //是否保存缓存 0代表不保存,1代表保存
debuglevel=2 //调试级别了解即可
logfile=/var/log/yum.log // 日志文件位置
exactarch=1 //是否允许不同版本的rpm安装
obsoletes=1 //update 的一个参数是否可以允许旧版本的运行
gpgcheck=1 //验证秘钥
plugins=1 //是否允许插件1代表可以
installonly_limit=5 //保存几个内核 5代表5个
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号,如:8,7,6
$arch: CPU架构,如:aarch64, i586, i686,x86_64等
$basearch:系统基础平台;i386, x86_64
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量
2.1.2 仓库设置文件
位置:/etc/yum.repos.d/*.repo //yum仓库文件位置
例子里是默认的yum仓库 是centos官方的yum源,需要联网才可以使用
[root@localhost ~]#ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
2.1.3 日志文件
位置:/var/log/yum.log //日志文件
[root@localhost ~]#cat /var/log/yum.log
Jan 16 14:09:50 Installed: epel-release-7-11.noarch
Jan 16 14:10:17 Installed: 1:nginx-filesystem-1.20.1-10.el7.noarch
Jan 16 14:10:18 Installed: 1:openssl11-libs-1.1.1k-6.el7.x86_64
Jan 16 14:10:18 Installed: 1:nginx-1.20.1-10.el7.x86_64
2.2 yum命令详解
命令 | 不加关键字 | 加入关键词、软件包、软件包组 |
---|---|---|
yum list | 显示所有可用包 | 单个的可安装包 |
yum info | 显示所有可用包的信息 | 单个具体的信息 |
yum search | \ | 模糊查找所有的相关信息 |
yum provides | \ | 精确查找 |
yum grouplist | 显示所有可用包组 | 显示具体的包组 |
yum groupinfo | 显示所有的包组具体信息 | 显示具体的包组的具体信息 |
yum install | \ | 安装具体软件包 |
yum groupinstall | \ | 安装具体软件包组 |
yum update | 所有软件升级 | 具体软件升级 |
命令 | 不加关键字 | 加入关键词、软件包、软件包组 |
---|---|---|
yum group update | 所有包组升级 | 具体包组升级 |
yum remove | \ | 卸载具体软件 |
yum groupremove | \ | 卸载具体包组软件 |
yum history | 查看当前yum操作历史 | \ |
yum history undo | 加入序号卸载序号里安装的软件 | \ |
yum history redo | 加入序号重新执行序号里的操作 | \ |
2.2.1查询
1. yum list [软件名]
显示可用的安装包,如不加软件名是显示所有的可用包,由于软件过多不做例子。
[root@localhost ~]# yum list httpd
[root@localhost ~]# yum list *httpd*
#包含httpd 的软件包
2. yum info [软件名]
显示安装包详细信息,详情如下
[root@localhost ~]#yum info httpd
#(如不加软件名是显示所有包的详细信息)
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* epel: ftp.riken.jp
* extras: mirrors.nju.edu.cn
* updates: mirrors.ustc.edu.cn
可安装的软件包
名称 :httpd
架构 :x86_64
版本 :2.4.6
发布 :99.el7.centos.1
大小 :2.7 M
源 :updates/7/x86_64
简介 : Apache HTTP Server
网址 :http://httpd.apache.org/
协议 : ASL 2.0
描述 : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
3. yum search <关键词>
根据关键字查找软件安装包,相当于你只知道这个包里的某个关键字会全部给你匹配出来
[root@localhost ~]#yum search ftp
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* epel: ftp.riken.jp
* extras: mirrors.nju.edu.cn
* updates: mirrors.ustc.edu.cn
============================= N/S matched: ftp ==============================
curlftpfs.x86_64 : CurlFtpFS is a filesystem for accessing FTP hosts based on
: FUSE and libcurl
edg-gridftp-client.x86_64 : Command line clients to GridFTP libraries
ftp.x86_64 : The standard UNIX FTP (File Transfer Protocol) client
ftplib.x86_64 : Library of FTP routines
ftplib-devel.x86_64 : Development files for ftplib
剩下的省略
4. yum provides <关键词>
你知道某个 命令 却不知道具体的包可以用此命令查找
[root@localhost Packages]#rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm
错误:依赖检测失败:
httpd-tools = 2.4.6-67.el7.centos 被 httpd-2.4.6-67.el7.centos.x86_64 需要
[root@localhost Packages]#yum provides httpd-tools
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
* base: mirrors.tuna.tsinghua.edu.cn
* extras: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.ustc.edu.cn
httpd-tools-2.4.6-95.el7.centos.x86_64 : Tools for use with the Apache HTTP Server
源 :base
[root@localhost ftp]#ll /etc/mime.types
-rw-r--r--. 1 root root 51787 5月 15 2013 /etc/mime.types
[root@localhost ftp]#yum provides mime.types
#不写路径查找不到
No matches found
[root@localhost ftp]#yum provides */mime.types
#加上通配符
[root@localhost ~]#yum whatprovides ftp
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
ftp-0.17-67.el7.x86_64 : The standard UNIX FTP (File Transfer
: Protocol) client
源 :abc
5. yum grouplist [包组名]
安装包组的查询 不加包组名 就是显示所有(此处例子由于安装了中文环境,无法显示英文包组名称无法直接复制中文使用,建议直接安装英文操作系统)
[root@localhost ~]# yum grouplist
已加载插件:fastestmirror, langpacks
没有安装组信息文件
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
可用的环境分组:
最小安装
基础设施服务器
计算节点
文件及打印服务器
基本网页服务器
虚拟化主机
带 GUI 的服务器
GNOME 桌面
KDE Plasma Workspaces
开发及生成工作站
可用组:
传统 UNIX 兼容性
兼容性程序库
图形管理工具
安全性工具
开发工具
控制台互联网工具
智能卡支持
科学记数法支持
系统管理
系统管理工具
完成
6. yum groupinfo <包组名>
不加包组名显示全部
[root@localhost ~]# yum groupinfo "GNOME Desktop"
已加载插件:fastestmirror, langpacks
没有安装组信息文件
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
环境分组:GNOME 桌面
环境 ID:gnome-desktop-environment
描述:GNOME 是一个非常直观且用户友好的桌面环境。
必备组:
+base
+core
+desktop-debugging
+dial-up
+directory-client
+fonts
+gnome-desktop
+guest-agents
+guest-desktop-agents
+input-methods
+internet-browser
+java-platform
+multimedia
+network-file-system-client
+networkmanager-submodules
+print-client
+x11
可选组:
+backup-client
+gnome-apps
+internet-applications
+legacy-x
+office-suite
+remote-desktop-clients
+smart-card
2.2.2 yum安装升级
1. yum install [软件名]
安装软件包,如例子yum install安装http服务
[root@localhost ~]# yum install httpd
2. yum groupinstall <包组名>
包组安装同yum install 不做过多叙述(包组过多省略结果)
[root@localhost ~]# yum group install gnome desktop -y
#########安装图形化##########################
#如无法使用请先升级
yum -y upgrade
#再安装
yum -y groups install "GNOME Desktop"
3. yum update
更新包组,可以单个也可以全部 后面加具体包组名称就是单个更新,不加就是全部更新。
但是首先你要有更新的包组库否则也无法更新。
[root@localhost yum.repos.d]# yum upgrade
4. yum groupupdate
组包更新和单个安装包更新差不多此处不举例子赘述。
例子中没有更新的包组所以无法安装。
[root@localhost yum.repos.d]# yum groupupdate
已加载插件:fastestmirror, langpacks
没有安装组信息文件
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* epel: mirror.sjtu.edu.cn
Maybe run: yum groups mark install (see man yum)
指定组中没有可安装或升级的软件包
2.2.3 软件卸载
1.yum remove <软件名>
卸载已安装的软件必须加软件名
[root@localhost yum.repos.d]# yum remove
已加载插件:fastestmirror, langpacks
错误:需要为 remove 指定软件包列表
[root@localhost yum.repos.d]# yum remove httpd
tools 的版本要和你的 主软件的版本 相匹配
httpd-2.4.6-97.el7.centos.4.x86_64.rpm
httpd-tools-2.4.6-97.el7.centos.4.x86_64.rpm
一个版本高 ,一个版本低也不行。
用 rpm 安装一个软件后卸载不干净,yum 就装不上。
2. yum groupremove <包组名>
同软件包卸载不做赘述
3. yum history
查看历史的使用记录
[root@localhost yum.repos.d]# yum history
已加载插件:fastestmirror, langpacks
ID | 登录用户 | 日期和时间 | 操作 | 变更数
-------------------------------------------------------------------------------
5 | root <root> | 2021-06-24 00:02 | Erase | 1
4 | root <root> | 2021-06-23 11:03 | Install | 1
3 | root <root> | 2021-06-23 11:03 | Install | 1
2 | root <root> | 2021-06-23 11:03 | Install | 5
1 | 系统 <空> | 2021-06-15 22:40 | Install | 1318
history list
选择ID 1,2,3,4,5
可以使用yum history undo 4 进行卸载,这样对比remove好处是可以将所有的依赖都删除
例子中将 4卸载
[root@localhost yum.repos.d]# yum history undo 4
如果你不知道 第四次 你具体安装了什么可以用:
[root@localhost yum.repos.d]# yum history info 4
#查看第四次具体安装了什么
再次使用yum history 查看多了一条6 记录是卸载记录
[root@localhost yum.repos.d]# yum history
已加载插件:fastestmirror, langpacks
ID | 登录用户 | 日期和时间 | 操作 | 变更数
-------------------------------------------------------------------------------
6 | root <root> | 2021-06-24 00:11 | Erase | 1
5 | root <root> | 2021-06-24 00:02 | Erase | 1
4 | root <root> | 2021-06-23 11:03 | Install | 1
3 | root <root> | 2021-06-23 11:03 | Install | 1
2 | root <root> | 2021-06-23 11:03 | Install | 5
1 | 系统 <空> | 2021-06-15 22:40 | Install | 1318
history list
如果后悔 卸载 可以使用两种方式
yum history redo 4 (重新安装一遍)
yum history undo 6 (反悔卸载等于重新安装一遍)
三、 搭建仓库的方式
本地yum仓库 没有网络的情况下使用光盘。
软件仓库的提供方式 FTP服务:ftp://ip地址/站点里路径
HTTP服务:http://域名或者ip地址/站点里的路径
本地目录:file://绝对路径 (file:///mnt 此处第三个/为根目录)
3.1 搭建本地yum仓库
1.首先将光驱中的镜像文件进行挂载(先将虚拟机的光盘载入)
[root@localhost ~]# mount /dev/sr0 /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# df -Th //查看下挂载
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 37G 7.5G 30G 21% /
devtmpfs devtmpfs 977M 0 977M 0% /dev
tmpfs tmpfs 993M 0 993M 0% /dev/shm
tmpfs tmpfs 993M 9.1M 984M 1% /run
tmpfs tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 161M 854M 16% /boot
tmpfs tmpfs 199M 4.0K 199M 1% /run/user/42
tmpfs tmpfs 199M 52K 199M 1% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt
2. 切换到 yum.repo.d 目录 将自带的仓库移走,多个开启仓库文件可能会造成冲突无法使用
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv *.repo bak/
[root@localhost yum.repos.d]# ls
bak
3.新建yum仓库文件
[root@localhost yum.repos.d]# vim abc.repo
[abc]
name=abc
baseurl=file:///mnt
enabled=1
gpgcheck=0
#gpgkey=file:etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 //若gpgcheck=1
:wq
yum clean all
yum makecache
4. yum list 检查仓库 无报错信息即可正常使用。
#/data/目录如果不存在,会自动创建
[root@localhost ]#yum -y install --downloadonly --downloaddir=/data/bind bind
# 只下载 指定下载目录(如不存在会新建) 软件名
3.2 使用ftp http搭建yum仓库
通过ftp服务搭建 内网yum仓库服务器
服务端:
systemctl stop firewalld
setenforce 0
yum install vsftpd -y
systemctl start vsftpd
mkdir /var/ftp/centos7
mount /dev/sr0 /var/ftp/centos7
客户端
systemctl stop firewalld
seteforce 0
cd /etc/yum.repos.d
mkdir bak
mv *.repo bak
vim ftp.repo
[ftp]
name=ftp
baseurl=ftp://192.168.91.100/centos7
gpgcheck=0
:wq
1.服务端安装vsftp服务
[root@localhost ~]# yum install vsftpd.x86_64 -y
2.服务端切换到 ftp目录下新建一个centos7目录
[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
pub
[root@localhost ftp]# mkdir centos7 other
[root@localhost ftp]# ls
other centos7 pub
3.服务端将光驱里的文件包全部拷到centos7里面(此处我已经先将光驱挂载到 了mnt目录下了如有问题参见本地仓库搭建)
[root@localhost ftp]# cp -rf /mnt/* centos7/ & //&代表后台运行应为文件较大
[root@localhost ftp]# cd centos7/
[root@localhost centos7]# ls //已将安装包文件拷入
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@localhost ~]# cd /var/ftp/other
[root@localhost other]# createrepo -g /media/cdrom/repodata/repomd.xml ./
#建立数据库文件
4.服务端开启相关服务,关闭防火墙和selinux
[root@localhost repodata]# systemctl stop firewalld.service
[root@localhost repodata]# setenforce 0
[root@localhost repodata]# systemctl start vsftpd
5.客户端安装ftp 服务并启动关闭防火墙和selinux
[root@localhost yum.repos.d]# yum install ftp
[root@localhost repodata]# systemctl stop firewalld.service
[root@localhost repodata]# setenforce 0
[root@localhost yum.repos.d]# systemctl start ftp
6.测试ftp服务是否正常
[root@localhost yum.repos.d]# ftp 192.168.91.100
Connected to 192.168.100.100 (192.168.100.100).
220 (vsFTPd 3.0.2)
Name (192.168.100.100:root): ftp //默认匿名
331 Please specify the password. //输入密码为空直接回车
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls //查看下是否正常
227 Entering Passive Mode (192,168,100,100,205,112).
150 Here comes the directory listing.
drwxr-xr-x 8 0 0 220 Jun 23 09:14 centos7
drwxr-xr-x 3 0 0 22 Jun 23 09:35 other
drwxr-xr-x 2 0 0 6 Aug 03 2017 pub
226 Directory send OK.
7.编写yum仓库文件
[root@localhost yum.repos.d]# vim centos7.repo
[centos7]
name=centos7
baseurl=ftp://192.168.91.100/centos7
enabled=1
gpgcheck=0
[other]
name=other
baseurl=ftp://192.168.91.100/other
enabled=1
gpgcheck=0
8.测试是否yum可以正常使用
[root@localhost yum.repos.d]# yum install dhcp
2. 通过httpd 协议搭建内网yum仓库服务器
服务端:
systemctl stop firewalld
seteforce 0
yum install httpd -y
systemctl stop nginx
systemctl start httpd
cd /var/www/html
mkdir centos7
mount /dev/sr0 /var/www/html/centos7
客户端
systemctl stop firewalld
seteforce 0
cd /etc/yum.repos.d
mkdir bak
mv *.repo bak
vim http.repo
[http]
name=http
baseurl=http://192.168.91.100/centos7
gpgcheck=0
3.3 搭建阿里云仓库 (http方式外网环境)
国外云仓库比较慢,可以使用阿里云仓库代替
1.切换到 yum.repo.d 目录 将自带的仓库移走
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv *.repo bak/
[root@localhost yum.repos.d]# ls
bak
CentOS系统的yum源
#阿里云
https://mirrors.aliyun.com/centos/$releasever/
#腾讯云
https://mirrors.cloud.tencent.com/centos/$releasever/
#华为云
https://repo.huaweicloud.com/centos/$releasever/
#清华大学
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/
EPEL的yum源
#阿里云
https://mirrors.aliyun.com/epel/$releasever/x86_64
#腾讯云
https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
#华为云
https://mirrors.huaweicloud.com/epel/$releasever/x86_64
#清华大学
https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
#更新源
http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
https://mirrors.huaweicloud.com/epel/$releasever/x86_64
https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
2. 新建aliyun仓库
[ali]
name=aliyun
#baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/ //开启哪个都可以正常使用,这边主要解释变量的作用
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/ //变量参见主配置文件2.1小节
gpgcheck=0
[epel] //epel源仓库
name=epel
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
gpgcheck=0
[update] //更新包仓库
name=update
baseurl=https://mirrors.aliyun.com/centos/7/updates/x86_64/
gpgcheck=0
#小火车
[root@centos7 ~]#yum -y install epel-release
[root@centos7 ~]#yum -y install sl
[root@centos7 ~]#sl -a
#牛
[root@localhost ~]#yum install -y install cowsay
[root@localhost ~]#cowsay hello
四、 存储和NFS共享
存储类型
存储类型分为三种
-
直连式存储:Direct-Attached Storage,简称DAS
-
网络附加存储:Network-Attached Storage,简称NAS
-
存储区域网络:Storage Area Network,简称SAN
DAS:存储和主机是直连的,家用电脑,服务和硬盘直连,存储和主机在一台机器上
SAN:有一定距离,主机核存储设备距离先对较远 ,只提供空间不提供文件系统,管理等其他软件服务,只相当于多了一块硬盘
NAS:存储在远程,文件系统也在远程,这块空间,你可以直接访问上面的文件,你只能看到文件,文件共享NFS FTP 等都是NAS
三种存储架构的应用场景
-
DAS虽然比较古老了,但是还是很适用于那些数据量不大,对磁盘访问速度要求较高的中小企业
-
NAS多适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低
-
SAN则适用于大型应用或数据库系统,缺点是成本高、较为复杂
SAN和NAS的文件系统区别:
区别:
客户端应用程序是否具有对存储空间的管理权限
SAN:
只给用户划分空间,用户自己来管理这个区域。例如指定文件系统的类型等。
NAS:
文件系统在NSA存储上面,只给用户分配空间,用户不具备对空间的管理权限。用户的通过引用程序直接通过网络就可以访问到上面的文件
1.NFS简介
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
NAS存储:
NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。(远端过程调用:自己没有这种功能,调用别人的功能) NFS 也是 NAS 存储 设备必然支持的一种协议 以完成远 程到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务, 前者用于 NFS 共享发布和访问,后者用于 RPC 支持。 手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs。
特点: 采用TCP/IP传输网络文件 安全性低 简单易操作 适合局域网环境
1.1NFS原理
因为NFS是基于网络传输数据的,所以必有传输端口,NFS常用的端口为2049;
但是文件系统十分复杂,NFS有很多功能,每个不同的功能都需要不同的程序来完成,
而每个程序都需要启动端口传输数据,这些端口都是随机产生并且小于1024的;
那么问题来了,既然是随机产生的端口,客户端该如何得知呢?
便引入了RPC服务
RPC(remote procedure call):远程过程调用。RPC最主要的功能就是指定每个NFS功能所对应的端口,并返回给客户端,使客户端可以连接到正确的端口上。
梳理工作原理如下:
1.RPC要先于NFS启动,NFS启动后就会随机产生一些端口,并向RPC去注册这些端口,RPC便将这些端口和所对应的功能记录下来;RPC对外的端口都是111。
2.当NFS客户端需要连接到服务器上时,先启动客户端的RPC服务,客户端的RPC向服务端的RPC111端口索要功能对应的端口号;索要到端口号后,便连接NFS服务器所对应的端口,随后传输数据。
3.此后的数据传输便不再经过RPC,只在客户端和服务器之间传输。
NFS优势:节省本地存储空间,将常用的数据如:/home 目录,存放在NFS服务器上且可以通过网络访问,将减少本地磁盘的使用率。
1.2、NFS软件介绍
软件包:nfs-utils(包括服务器端和客户端)
相关软件包:rpcbind(必须)
nfs端口号不固定
RPC端口号111
NFS服务主要进程:
-
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
-
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
-
rpc.lockd 非必要,管理文件锁,避免同时写出错
-
rpc.statd 非必要,检查文件一致性,可修复文件
日志:/var/lib/nfs/
NFS配置文件:
/etc/exports
/etc/exports.d/*.exports
1.3 NFS工具
1.3.1exportfs
exportfs:可用于管理NFS导出的文件系统
常见选项:
-v #查看本机所有NFS共享
-r #重读配置文件,并共享目录
-a #输出本机所有共享
-au #停止本机所有共享
1.3.2 showmount
常见用法:
showmount -e hostname
[root@centos7 ~]#showmount -e 10.0.0.8
Export list for 10.0.0.8:
/data/wordpress *
1.3.3 mount.nfs
客户端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
1.4 NFS共享配置文件格式
/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...
共享目录 共享给哪个主机(权限)
文件格式
共享目录 可访问主机地址(权限)
/share *(rw)
格式说明:
-
以#开始的行为注释
-
主机格式
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问题####
统一压榨成指定用户
[root@localhost /]#vim /etc/exports
/share *(rw,all_squash,anonuid=1002,anongid=1002)
yum install nfs-utils.x86_64 -y
#客户端服务端两边都需要安装 nfs软件
vim /etc/exports
/share *
/share *(rw)
/share *(rw,no_root_squash)
#不压榨root
/share *(rw,no_root_squash,all_squash)
#都压榨
/nfs1 *(rw,no_root_squash,all_squash,anonuid=1003,anongid=1003)
#指定压榨成统一用户
#文件系统需要权限
chmod 777 /share
[root@node2 mnt]#touch 456
touch: 无法创建"456": 只读文件系统
[root@localhost nfs1]#ll
总用量 4
-rw-r--r--. 1 root root 0 10月 17 01:34 123
-rw-r--r--. 1 nfsnobody nfsnobody 0 10月 17 01:39 456
-rw-r--r--. 1 root root 2259 10月 17 01:34 passwd
[root@localhost nfs1]#exportfs -v
/nfs1 <world>(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
2.搭建过程
你可以添加一块新硬盘用作共享使用
服务端和客户端都需要安装软件,不区分服务端和客户端,基于内核的共享
[root@localhost httpd]#systemctl stop firewalld
[root@localhost httpd]#setenforce 0
[root@localhost share]#yum install nfs-utils.x86_64 rpcbind -y
#安装软件包
[root@localhost httpd]#mkdir /share
#新建共享目录
[root@localhost httpd]#cd /share/
[root@localhost share]#chmod -R 777 /share/
#修改权限
[root@localhost share]#vim /etc/exports
#编辑配置文件
/share *
/share 192.168.91.0/24(rw,sync,no_root_squash)
#共享目录 网段 读写,同步,无root权限
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]#exportfs -vr
#不重启生效
[root@localhost share]#exportfs -v
#查看详细的nfs信息
#exportfs 可用于管理nfs
-v 查看本机所有nfs
-r 重读配置文件
-a 输出本机所有共享
/share 192.168.91.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
[root@localhost ~]# netstat -anpt | grep rpc
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/wwwroot 192.168.7.0/24
/var/ftp/pub 192.168.4.110,192.168.4.11
#查看本机发布的 NFS 共享目录
#客户机
[root@localhost ~]# mount 192.168.7.250:/opt/wwwroot /var/www/html
# 服务器地址 冒号 对方共享文件夹 本地挂载点
[root@localhost ~]# vi /etc/fstab
…… //省略部分信息
192.168.7.250:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0
#自动挂载
showmount -e 主机名 (查看远程主机nfs共享)
#强制解挂载
[root@localhost ~]# umount /mnt
t umount. nfs: /mnt : device is busy
[root@localhost ~]# umount -lf /mnt
五、工作环境
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 继续
rpm -ivh /run/install/repo/Packages/rpm-4.11.3-25.e17.x86_64.rpm --root=/mnt/sysimage/
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.3 epel源 本地
没有外网 又想使用这个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=绝对目录路径 #下载到某一目录
真实 内网外网不可能互通
5.5 升级内核
yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
生成仓库文件
内核库默认关闭打开就可以了
yum repolist all
vim elrepo.repo
yum list *kernel*
yum install kernel-lt.x86_64 -y