接九的存储管理部分。
不过我们先改动一下lv5和lv6来看看有什么影响。
貌似没有变化啊,估计是因为文件太小了,这里面只显示整数,所以就出现了这种现象。那我们就搞几个大文件。
明显看出来区别了。
xfs的快照卷挂载是真的麻烦,还是用ext4好。
下面来解释一下快照卷的原理,先认识一个命令dmsetup。
它是低级的逻辑卷管理。
我们来看一下效果。
当然我们也知道lsblk是可以看的,并且设备文件中是没有real和cow的。不过还是应该看dmsetup关系更清晰。
我认为real和cow应该是一种逻辑上的概念,而并没有真实存在的设备文件。
结合上下两张图,我们深入了解一下快照。首先呢,lv5,对应上图的lv1,应该存的是元数据,(这里的应该是说明这是我结合视频内容和网上教程自己的理解,可能并不对)类似于目录一样的东西,我理解为可能是inode(inode是文件的一个编号,表明在磁盘上的存储位置),然后通过这个目录,我们可以找到真正存数据的real卷,上图是假设这个real卷一共800M,用了200M,里面有a,b,c,d,e共5个文件。那么我们创建的快照卷,也是有两部分,一部分是lv5-s,上图里是lv1-snap,这部分也存的是目录,另一部分是cow,叫做copy on write,写时复制,就是原卷有改动的时候,被带动的文件会存到这里面来,叫做预留区,上图中预留区是100M,我们的例子预留区是10M。比如说,我们现在把a替换成了f,那么a就会先拷贝一份到预留去cow里面,当然预留区的大小要大于a文件的大小才行,如果不大于会怎样,这我就不尝试了,你们可以自己去试试。然后从快照卷怎么读文件呢?从snap目录中就可以去找,
如果要访问的文件在原卷发生变化,那么它在snap中的元数据位置信息会从real移到cow,它就会从cow里面读,没有变化还是从real里读。下面这种图可以看成数据可以从右向左流。一般我们创建快照的时候都是设为只读。快照是可以写的。
快照的写并不会影响原卷,快照写的地方应该就是预留区了。
如果我又把f替换为g呢?那f是不会进到预留区的,因为f不是快照卷创建的时候就有的文件,或者说数据。快照,顾名思义,就是一帧照片,只保留了那一瞬间的信息,就像时间凝结了。
快照有什么用处呢?其中一个重要的用处就是一致性备份,比如一个很大的数据库备份可能要很长时间,这个时候就会出现不一致的数据,因为数据库难免有很多时间信息,这个时候我们就用快照,因为创建一个快照的时间很短(虽然很短,但不是没有),这样的数据基本上已经高度一致了,只有在小数点后很多位才可以看出差别。然后从快照中备份数据。时间一直在跑,数据会不断地往预留区跑,(当然这个不断是离散的不断,以计算机可以察觉到的最小时间差别为单位)就会有预留区空间可能不够的问题,我们有下面的自动扩容命令:
threshold是阈值,上面的语句代表当预留区空间占满70%的时候,再扩充20%。
看到这里,你应该会理解了,快照并不是原卷的拷贝,从大小看也不可能,如果原卷的real没了,快照不一定gg,如果数据都在预留区cow中还行,不过一般这种情况比较少吧。
临近结尾,再介绍一下如何删除pv,vg,lv,从vg中删除pv可以用vgreduce,前面已经讲过。
删除一个逻辑卷需要满足:
逻辑卷没有快照
快照没有挂载
逻辑卷没有挂载
不然的话就得先取消快照挂载,然后删除快照,然后取消逻辑卷挂载,最后才能删除逻辑卷。
删除pv呢?
看到属于卷组的pv是不能删除的,我们先删除卷组。
不能删是有一个lv2还挂载着呢。
我们把哪一行删了。这里需要先把所有交换分区挂载用swapoff -a停掉然后swapon -a再开,才能把lv2的挂载取消。
看到还是因为lv5不能删除。
需要提醒的是pv和真正地物理磁盘还是不一样的。
pv只是创建vg的一个逻辑上的准备,我们删除pv也只是删除了一个逻辑概念,/dev/sde是还在的,除非我把这个硬盘拆下来,当然虚拟机里不需要拆。
需要重启一下,可能只是因为我们不知道如何刷新显示设备文件才需要重启。
也可以先从pv中vgreduce出来,就可以删除了。
但是如果pv是vg里仅剩的最后一个,那么还是需要先删除vg才行。
终于结束了。
存储管理的最后简单来了解一下RAID。
装软件呢,其实我们前面也用过很多次了,用的是yum -y install,-y的意思就是所有回答都是yes,不用再询问了。前面初学python没有装anaconda的时候,我们大多数都是用pip来装python包的。这个rpm包是什么东西后面会学到。
我们先来各看一个例子。安一个mariadb-server。
中间很长,最后看到有很多依赖的包会自动给你装上去的,并且包确实都是rpm包。
centos7是没有自带的pip的,需要我们自己装,我们先用yum装一个curl。我用的是脚本安装,参考了https://www.linuxidc.com/Linux/2017-07/145560.htm。这个装的可能比较慢,因为用的是国外的软件源。
可以看到pip命令已经可以用了。我们来装一下request。
可以看到有些依赖包也会自动帮你安上去。
看到在centos自带的python2.7里导入是完全没有问题的。
软件管理包括安装,查询,卸载,安装某一个软件是因为我们是有需求的,可能还要看一下软件的版本,软件安装的位置啊,如果不用软件的话,就需要卸载。
软件有两种类型,一种是源码包,这种呢使用高级语言写的,比如说c语言,那么安装的时候就需要编译成机器码,因为计算机只认识二进制。这种时候就需要编译器,可能还需要一些依赖库,还可能遇到一些版本不兼容的问题,后面举的例子是nginx-1.12.1.tar.gz是一个压缩包,里面解压出来可能就是一些c,c++的代码,需要编译才能运行。总之,这种软件类型的安装还是比较麻烦的。
另一种二进制文件,后面给了一个rpm包,但这不代表rpm包都是二进制包,通常情况下是的。
这种类型的软件安装只需要把rpm包里的文件释放到它们应该在的位置即可,没有源码包的编译过程。类比一下,有一个人现在去服装店买衣服,它可以选择现场量身订做一套,也可以选择直接买现成的。这种现成的就好比是二进制包,你可以按照自己的性别,身高去选,也就好比根据linux的版本去下载对应的包,即使性别,身高都是对的,也可能衣服有不合身的地方,因为衣服毕竟不是为你订做的。那么量身订做过程呢,布就好比源码包,需要裁缝来加工(编译器编译)最后才能成为衣服,才能直接穿上,这个例子虽然有点奇怪,但是还算解释清楚了它们的区别和安装的过程。需要说明的是,源码包的编译器一般是gcc,
还会有一些其它依赖lib也就是库。当然二进制包可能也会有一些依赖库,不过它们是不需要编译器了。
在redhat/centos系统里呢,用的是rpm包,用的是一种CPIO技术把二进制(bin)文件和一些其它信息,比如文件应该放的位置,权限,用户信息等一起构建成一个rpm包。
释放rpm包以后,文件就会放在该在的位置,还有可能会有其它操作,比如创建用户,还记得我们安装httpd的时候,就多了一个apache用户对吧。释放rpm包的过程可以说即使一种解压。
ubutun和debain(树莓派官方给的系统就是debian)用的是DPKG来管理包。
和redhat里的yum对应得到apt(apt-get)也会自动地解决依赖关系。
其实软件源我们早就见过,圈起来的里面就是源,英文里叫做repository,也可以叫做仓库。
我们可以用yum repolist看一看
有三个源,status就是源里有的软件rpm包的个数了。
默认的三个源是国外的,就是那三个base,extras和updates。在/etc/yum.repos.d/CentOS-Base.repo里面可以看到。
可以看到mirrolist都是同一个网址,都是红帽的官网的源。
其实最后还有一个源
不过它的enabled=0,表示它没有使用。如果该成1的话。
我们就可以看到有四个源了。
需要指出的是,一般装完系统都会先yum update一下,这个命令是更新所有软件。
看到有1个包需要安装,54个包要更新,一共163M,询问ok吗?y即可开始下载更新。但是说实话,国外的源速度确实有的时候还是很慢的,于是我们才考虑换成国内的源。
centos的源我不太了解,但是debain的源我知道阿里云,中科大,清华很多都有源,还是蛮多的。centos国内的源推荐阿里的或者163的。
如果不会换源怎么办?可以百度搜的。
按照里面的步骤一步一步来就可以了。
第一步就是一个剪切命令,不过这是在同一个文件夹里面,其实就有点像重命名了。最后看到源确实换成了阿里云的源了。163的源基本上一样。
里面都是有步骤的。但是其实这些源呢,里面都是一些系统级别的软件,就是和操作系统相关的,比如tree,有一些扩展的软件就没有,比如nginx。
这时候就需要用到EPEL。
这个是企业级的,软件有很多。如何加这个源呢?
装完之后最好先yum update一下。然后就可以看到里面是可以找到nginx的。
可以看下epel里面的包比其它的多一个数量级。但是这是国外的源,比较慢,那怎么办呢?
我们还是去找阿里的源。
帮助里写的很详细。
这里需要下一个wget,我已经提前下过了,没下过的yum -y install wget。
wget或者curl都是可以直接从网站链接那里下载一些文件,-O是指定文件路径,不给的话是在当前路径了。
怎么看用的是不是阿里云的epel源呢?
vim /etc/yum.repos.d/epel.repo就可以看到。
上面的base,extras,updates,epel我们都称为基础源。
yum clean all就是清空下载的缓存,yum makecache就相当于更新本地的软件数据库,用于有软件安装或者卸载之后,将软件信息加入数据库或者从数据库中删除.,不过其实这两步都是可以不做的。yum reinstall用在软件有一些文件损坏的情况,用了这个命令就会自动修复。yum -y update什么都不加我们知道是更新所有需要更新的软件,后面可以指定具体的软件。卸载软件可以用erase或者remove。
查询软件,yum list是列出yum源中有的所有软件,后面可以指定,,指定的内容必须是全名,可以用通配符。会列出安装过(installed)的和yum源里有的,但是没有安装过的(available)。安装过的前面都会有一个@。
yum list installed是显示所有已安装的软件,有很多
search是从包的名称和简介里面找到关键字。
info是显示软件的一些信息。
前提是软件名要对
provides是可以找那些软件包里面的文件里面有这个名字,如果有的软件不知道怎么装可以试试这个。比如说pip(我这里是刚刚重装了系统,还没有安装pip)。
不过这也不是万能的。
为什么需要去官方下载呢?主要有两个原因,一是有的软件基本源里确实没有,二是可能yum源里的不是最新版本(不过这种一般不会出现,因为yum源更新的其实还是挺快的)。
下面会举几个例子,重要的是安装的方法要学习,要知道去哪里找安装的步骤,要学会举一反三。
nginx
我们在epel源里面下到的是1.12版本的nginx。
我们去百度nginx的官网。我们要找的一定是documention而不是download。
这里面先让你创建一个/etc/yum.repos.d/nginx.repo,里面该写什么内容也给你了。我们来照做一下。注意该改的地方要改。
第一次repolist的时候会下载一个数据库,这里面是和nginx有关的一些信息,比如说依赖啊,版本的一些信息等。Failed是因为下载源在国外,网速感人。
最后还是成功了。看到yum list nginx的时候,系统其实是会优先提醒你nginx源里的包的,你看颜色都不一样了啊。
后面还有mysql(一种数据库)
可以先用yum provides看一下,虽然有,我们还是看一下官网安装。
可以到https://www.bilibili.com/video/av18740388/?p=26
21分钟开始看,我这里是不知道为什么上不去mysql官网了,演示不了。
zabbix
首先你可以先用provides找一下试试。
有的话可以考虑直接用yum安装,一看还这真的有,不过我们还是来看如何官网安装。
我们选择从包安装。
选择repository installation或者说从源安装。
这里这一句命令是安装源的,或者说仓库的,总之呢,这里面带release的都可以认为是安装repolistory的,它可以自动解决依赖关系。
下一步就是安装了,这一步就看个人需要,需要代理的话,就安装zabbix-proxy后面是数据库类型,看你选mysql还是pgsql数据库,有其他需要再安其它的。
docker
老规矩
openstack
docker和openstack的我就详细叙述过程了,在https://www.bilibili.com/video/av18740388/?p=26
33分钟开始看,主要是我害怕图片超了,又不想再把内容换到下一讲里面。说白了就是我懒,请求原谅。
这块内容我并没有需求,如果你们有需求,可以去
https://www.bilibili.com/video/av18740388?t=574&p=26
53分钟开始看。