Linux学习笔记之九(存储管理下)

接上一讲的基本分区。

强行对硬盘格式化会让原来的分区失效。格式化之前。

 

之后:

 

 

设备文件也只有一个了,所以格式化的最小单位是基本分区或者下面要讲的逻辑卷,这样强制对整个硬盘格式化其实就是把整个硬盘作为一个分区。

挂载

 

我们插u盘的时候其实就有了一个自动挂载的过程。linux里面的挂载呢,就是要把设备文件和文件树中已存在的目录对应起来,挂载这个词其实很形象,就相是把一个存储设备挂在了文件树上面,设备文件对应的文件树中的目录被称为挂载点。

 

没有挂载之前,我们在文件系统里是看不到上面格式化的分区或者硬盘的。但是挂载之后就可以,但是注意挂载点一定要是已存在的目录,挂载的命令是mount -t 是指定文件系统,不给的话会自动识别的,-o是挂载选项,ro代表只读,-a是挂载所有在fstab里提到的挂载点,也可以不给,这种使用mount命令的方式称为手动挂载,因为重启的话挂载点就没了,必须要再次挂载。

 

 

系统默认的挂载点是在/mnt里面,但是你可以随意挂载的。

 

看到这种挂载是没有改变/etc/fstab配置文件的内容的,所以重启还得重现挂载。

那么一劳永逸的方式就是直接修改/etc/fstab了。

 

这第一列的参数是需要挂载的设备,第二列是挂载点,第三列是文件系统,第四列是挂载选项,就是前面-o ro那个东西,后面的两个0,第一个是开机不备份,第二个是开机不检查的意思。弄完以后不需要重启,可以用mount -a来挂载。

 

这个报错是因为我们当时格式化sdb2的时候用的是ext4。回去该一下/etc/fstab就行。

 

 

看到/dev/sdb2就挂载到了/1处,而/dev/sdc回到了我们一开始给它的挂载点/mnt/disk1。

 

umount取消挂载也是一次性的,不会改变/etc/fstab里面的内容,看到设备对于挂载点是有时间先后的竞争关系的,都是后来居上,但是如果山中无老虎,猴子称大王,就是说/dev/sdb2取消挂载/1是,/dev/sdc就挂上去了,如果sdb2又挂上去了,那么/dev/sdc的挂载点就有退出/mnt/disk1了。

 

 

还有一种使用UUID的方式来挂载的。什么是UUID呢?参考了https://www.cnblogs.com/phpfans/p/5087899.html

 

 

 

如何得到uuid呢?就用到了blkid了。

 

然后我们可以修改/etc/fstab了。

 

 

举个例子理解一下挂载,文件是存在硬盘里面的。

 

把/1挂载点取消,/1/1就找不到了。

 

重新挂载呢,又可以查看了,说明呢,文件时切实地存在硬盘里面的你挂不挂载,它都在那里,但是只有挂载上去你才能看到而已。

 

使用mount命令可以看一下默认是-o选项是什么意思,后面小括号里的就是,可以看到还是蛮多的。下面试一下-o ro是不是只读呢?

 

 

基本分区明显的缺点就是不能扩容,空间满了就没办法了,下面是逻辑卷,可以解决这个问题。挂载点不一定是空的目录。

 

这个为什么换回来还有?很简单,还是上面的原理,因为文件时存在磁盘上面的,无论挂载还是不挂载在文件树上,它里面的文件都是存在的,只不过挂载上了我们才看得见,/dev/sdc挂载在/root/1上时,我们看见的时/dev/sdc磁盘或者分区里面存储的文件,当umount /root/1之后呢,/root/1又重新成为原来磁盘的挂载点,就可以读到原来磁盘里存的文件了。不过可想而知,有些目录时不能作为挂载点的,比如/proc,这里面的东西不是存在磁盘上的。

 

 

虽然最后的结果是也可以,不过我们还是最好遵循规范,把挂载点选在/mnt里面比较好。

扩展:MBR和GPT到底是什么,它们有什么区别?参考了http://mini.eastday.com/mobile/170112090910171.html。

 

当然上面的内存指的是磁盘容量。下面gpt是有限制的。gpt是可以用于2T以下硬盘的。

 

那么问题又来了,什么是UEFI?

 

 

 

还有再简单了解以下xfs和ext4。

 

LVM(Logical Volume Manager)

lvm其实我们早就见过,在哪里呢?

 

disk是硬盘,part是基本分区,而lvm就是逻辑卷了。

 

数据迁移online是指可以把一些数据从一个硬盘移到另一个硬盘上去而不停止业务,这也是逻辑卷的一个优点。基本分区很大的一个缺点就是扩容问题。基本分区还需要考虑分区表的类型,是MBR还是GPT,逻辑卷不需要的。

 

 

参考了https://blog.csdn.net/lenovouser/article/details/54233570

先来看一些基本的概念。

 

 

pv可以是硬盘,也可以是分区,vg,就是几个pv合起来的一个逻辑概念,卷组,lv就是我们可以划分的逻辑卷。PE和LE其实不用了解那么多了,因为至少我感觉它们其实没有什么用,因为它们不是文件最小的存储单元,也就是blksize,blksize是我们在格式化的时候可以指定的,默认是4K。基本分区受制于单个磁盘大小,比如说我有两块1T的硬盘,但是我想要一个2T的分区,基本分区是办不到的,lvm是一个不错的选择,当然可以有其它的解决方案,不过这一讲是lvm。

下面是创建lvm的过程,首先我们先准备两块新的硬盘,这个也很简单了。我已经准备了sdd和sde。

 

 

 

其实呢,第一步创建pv是可以不写的,直接就可以vgcreate,系统会自动为你创建pv的。pvs可以看pv的信息,vgs,lvs的功能类似。

 

vgdispaly可以看一看PE的大小,默认是4M,vgreate -s是可以改变PE大小的,你们可以自己试一试。

 

 

创建lv的时候有几个选项,-l是指定LE的数目。-n是名字,-L是指定逻辑卷的大小。

 

 

比如我们创建一个10M的逻辑卷。

 

然后格式化,挂载

 

 

我反正是看不懂这个size了,一会12M,一会11M,我们创建的是10M的。我上面用的是一次性挂载,你们也可以修改/etc/fstab。我们来建立一个把lv1存满的场景。

 

看到已经no space left了,已经满了。下面进行扩容。

扩容

 

 

扩容其实也简单。

 

 

df显示似乎是慢了一点

 

不过lsblk是对的。

 

 

但是确实是写不进去的。lsblk是显示块的信息,我们扩展了逻辑卷,块是增加了没错。

 

这是为什么呢?因为文件是依赖于文件系统的,而df显示的就是文件系统的信息,我们只扩大了逻辑卷而,而没有扩大文件系统是不行的,想象一个场景,学生比作数据,桌子椅子是文件系统,教室是逻辑卷,我们只是把教室的空间增加了,但是没有增加桌子椅子,是不是没办法增加学生(数据),所以没有扩展文件系统的时候df是没有变的,也不能往里面再写数据。那么怎么办呢?我们就要对文件系统扩容。

 

对文件系统扩容,首先要知道文件系统的类型,然后使用相应的命令去扩容。如果命令不对当然是不可以的。

 

 

那么也可以继续往里面写数据了。为什么used是12M呢?我们的文件时11M的啊。因为文件系统本身的信息也需要空间啊。

 

需要补充的是其实文件系统的大小可以比逻辑卷小,就像教室里可以不摆满桌子椅子,但是文件系统和命令要对应,当然上面的命令形式xfs_growfs和resize2fs 逻辑卷都是有多少占多少,也就是桌子椅子摆满教室,一般我们也都是有多少用多少。

总结一下扩容的步骤,上面其实还省了一步,就是查看有没有空间可以括,就是看一下vgs,如果卷组里面有空间free,那自然可以扩,没有空间的话,自然逻辑卷是没有办法扩容的。

如果卷组没有空间,我们就先扩容卷组,加几个pv进去,然后在扩容逻辑卷,当然逻辑卷扩容最后肯定不能大于卷组空间了。扩容逻辑卷还没完,最后还得扩容文件系统。

减容

首先说明一般不会对逻辑卷减容。

 

显示了可能会毁坏你的数据。

 

并且文件系统是不支持减容的。那么这样就会看到奇怪的事情,就是逻辑卷只有100M,但是里面有可以显示105M的文件系统,这样做应该是会出问题的。

 

主要还是对卷组减容,也就是去掉某一个pv。一般呢,在减容之前,我们都会做数据的一个迁移。

 

 

这个迁移就是剪切的意思。上图中对比还是很明显的。卷组的减容不会影响文件系统和逻辑卷,因为减去的是pv,不是我们用的逻辑卷lv。

交换分区(swap)

 

交换分区是为了防止内存溢出而建立的,如果内存溢出,linux内核会杀死一些进程,但是这不是我们希望看到的,所以我们可以用swap分区来增加内存,不过我们都知道内存读写速度是比硬盘快的,所以速度是要慢了。查看交换分区可以用free -m或者swapon -s。

 

free是显示系统中的已用和剩余内存。-m是以M为单位显示,-g是以G,不过一般用-h看。

 

swapon -s可以看交换分区的大小。swapon -a是激活/etc/fstab里面的交换分区。

 

 

 

目前是有一个2G的交换分区,用的是逻辑卷/dev/centos/swap。交换分区还可以用基本分区或者文件。

 

先来看基本分区和逻辑卷做交换分区。

 

上面我们用的是基本分区sdb2,需要先把它初始化为交换分区,命令是mkswap。然后也需要挂载,一般的mount方式我不知道怎么挂载,它的-t里面就没有swap。并且呢,交换分区的挂载点swap也不存在的。

 

 

那么我们还是用UUID或者用设备路径在/etc/fstab里面挂载了,不过我是没有用UUID。

 

逻辑卷作为交换分区也是一样的步骤了。

 

别忘了一定要swapon -a激活一下。

 

 

用文件作为交换分区要先有一个足够大的文件,比如说1G,那怎么产生呢?用dd和/dev/zero。由于文件比较大,时间可能会有点长。然后也是初始化,挂载。不过最后一步会有一个错误信息,说不安全的权限0644,推荐是0600,因为是要作为内存使用,还是不要给一般用户权限比较好。还有用vim修改比较好,因为我那种cat >>没办法回删,写错了就很烦人。

 

 

这里面的/dev/dm-n这种的其实是逻辑卷,上面也看到过。

 

LVM快照

这块说实话视频里讲的不是很多,也不是十分明白。参考了https://segmentfault.com/a/1190000009249534

这里面还有如何正确缩减逻辑卷的,有兴趣的可以去看看。

 

 

 

来试一试。

 

 

 

快照卷是不需要格式化的,因为用了原卷的文件系统。

 

 

xfs文件系统的快照卷在挂载的时候需要一个nouuid选项,不然会报错。

 

并且看到快照和原卷用df查看的时侯,它们的信息几乎是完全一样的,至少ext4文件系统是完全一样的,xfs不太清楚为什么会不一样。但是用lsblk看的时候,怎么这么多东西啊,有real,还有cow,都是什么?但是看到设备文件里是没有这些东西的,为什么呢?下面会有讲解的。

 

不过我们先改动一下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%。

删除

临近结尾,再介绍一下如何删除pv,vg,lv,从vg中删除pv可以用vgreduce,前面已经讲过。

 

删除一个逻辑卷需要满足:

  1. 逻辑卷没有快照

  2. 快照没有挂载

  3. 逻辑卷没有挂载

不然的话就得先取消快照挂载,然后删除快照,然后取消逻辑卷挂载,最后才能删除逻辑卷。

删除pv呢?

 

看到属于卷组的pv是不能删除的,我们先删除卷组。

 

不能删是有一个lv2还挂载着呢。

 

我们把哪一行删了。这里需要先把所有交换分区挂载用swapoff -a停掉然后swapon -a再开,才能把lv2的挂载取消。

 

看到还是因为lv5不能删除。

 

终于结束了。

最后简单来了解一下RAID。

猜你喜欢

转载自blog.csdn.net/qq_41740705/article/details/81104693
今日推荐