fudyou 发表于 2022-11-1 11:29:43

什么是LVM

LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,可以认为是一种磁盘空间的动态管理。LVM必要性如果虚拟机装的是20G的硬盘,如果不用LVM,你的磁盘是无法扩容的,不是说不能从20G变成40G,因为可以通过挂载多个硬盘的方式。比如mysql挂载到这20G硬盘上,
https://pica.zhimg.com/v2-088f4362c9a2d762a15e8aaca1a5c416_b.jpg

如果没有用lvm,再想扩容20个G的话,
https://pic3.zhimg.com/v2-300ebaf5e7c07bc4c45d0a54f2da57dc_b.jpg

等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,
https://pic2.zhimg.com/v2-d03d85ec4d7643b35e8f6c96ea08892d_b.jpg

mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
https://pic2.zhimg.com/v2-4cce5da20cf64efbceca2b2c59fd7d85_b.jpg

2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,
https://picx1.zhimg.com/v2-6091661cc2b5048d3bbb92d7da1c7535_b.jpg

20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
https://picx1.zhimg.com/v2-30a1b9355ebf8901040a1fff3f61df7b_b.jpg

以mysql写入数据为例,
https://pic2.zhimg.com/v2-1a8ad90626eeb0c5bd93767de501c54f_b.jpg

vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,
https://pica.zhimg.com/v2-99597f12457ef4aed30a96ccebbf5e6c_b.jpg

mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。接下来看下使用lvm怎么把20G扩容到60G?
https://pic4.zhimg.com/v2-ddf0a1fbc3a0a6775543f31e944c91d1_b.jpg

虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
[*]添加硬盘

https://pic1.zhimg.com/v2-4fbdf9d3e2e0e87a5b18cb3c6ef59e68_b.jpg


[*]选择磁盘

https://pica.zhimg.com/v2-22943d808d80c19ddb31304b4cae2618_b.jpg


[*]指定磁盘容量

https://pica.zhimg.com/v2-013c98043cb0862d840da69c6a0ef1b8_b.jpg


[*]指定磁盘文件

https://pic2.zhimg.com/v2-fea9a643927a7198b6b2a9d605e491e9_b.jpg

这样就多了一块40G的硬盘,
https://pic1.zhimg.com/v2-f9407bd42de480b99391a6ad00b4b066_b.jpg

怎么把这两块硬盘变成一块?
[*]查看当前磁盘大小
df -h

https://pic4.zhimg.com/v2-a83fa5f7602fafef6386389b744daff7_b.jpg

有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
[*]查看当前的逻辑卷
lvdisplay

https://pic1.zhimg.com/v2-d3bcf6868a928c9be0ef9f2b3f8df7e2_b.jpg

ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
[*]查看vg的大小
pvdisplay

https://pic2.zhimg.com/v2-08266cbc3c7f9a5db9b1644f4d73e2f3_b.jpg

这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。
https://pic2.zhimg.com/v2-a8cc94313b4d36dfbc00efa4b2776843_b.jpg

sda是第一块硬盘,https://pic1.zhimg.com/v2-70dc252585845a22f5fa0e5c592c6cf6_b.jpg

sdb是第二块硬盘,
https://pic4.zhimg.com/v2-02c5f00a707a9768bcedfea583992469_b.jpg


[*]检索硬盘
fdisk -l |grep '/dev'

https://pica.zhimg.com/v2-191915983c420618cc340afb5fd05902_b.jpg

可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....创建新的分区/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
https://pic3.zhimg.com/v2-413e66e0da751dfa4e516c1fab3844d0_b.jpg


https://pic1.zhimg.com/v2-7c97203ab9673288740c4cfa8c50683a_b.jpg

新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。这里测试就分一个主分区,但从哪里开始?
https://pic3.zhimg.com/v2-2082bb2756ecb4a00525fcdd2b501ad8_b.jpg

磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。
https://pic1.zhimg.com/v2-0b7e3a85158f28538e7a1d2fef14883a_b.jpg

分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
[*]磁盘格式化
mkfs -t ext4 /dev/sdb1

https://pica.zhimg.com/v2-76397f705b5c6c7c5ea8990d99fb9b36_b.jpg


[*]创建物理卷(实实在在往里面写入数据的磁盘)
pvcreate /dev/sdb1
把sdb1这个分区变成了物理卷,就可以往里面写了。
物理卷交给lvm管理,即逻辑卷lv

https://pic1.zhimg.com/v2-12296c78ea480103ba8d4e8d748fc82e_b.jpg


[*]查看卷组
pvscan

https://pic1.zhimg.com/v2-96640e775c1b7a87676e4b1372a789e4_b.png

sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。这两个磁盘总共60G的大小,有40个G还没有加入卷组,
https://pic3.zhimg.com/v2-841df57ec22285c8870cc1e075e44672_b.jpg

此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
[*]把物理卷/dev/sdb1扩展到卷组里面去
vgextend ubuntu-vg /dev/sdb1

https://pic1.zhimg.com/v2-b791a7baf5d1acedaba64ecc271eb236_b.png


[*]添加成功之后,查看卷组

https://pic2.zhimg.com/v2-16c7a5e5022e427bc4660d201a2c7cdb_b.png

可以看到/dev/sdb1已经添加到卷组中了
[*]查看卷组的情况

https://pica.zhimg.com/v2-74b064ec5e156dc35b582f07095a3708_b.jpg

这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
[*]查看逻辑卷

https://pica.zhimg.com/v2-7f26052b942e968e97dcbf6e8c65c368_b.jpg

物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
[*]按照大小扩容(增加10个G)
lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv

https://pic2.zhimg.com/v2-cb3e6923c193e4357ab16e0cc5e26e15_b.png

增加10个G之后,这个lv逻辑卷的大小为29G了,
https://pic4.zhimg.com/v2-5e3d1842ab7bad93d391abfad7b5a2c7_b.jpg

还需要再刷新一下,resize2fs /dev/ubuntu-vg/ubuntu-lv
https://pica.zhimg.com/v2-3e71d170958c9d648025e062fb2c1222_b.jpg


https://pic3.zhimg.com/v2-6600292e5b550b105aa37b9e2253f79a_b.jpg

查看卷组
https://picx1.zhimg.com/v2-c57f1a2e376b3f7395861784c3f0fd31_b.jpg

空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
[*]按照百分比扩容
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

https://pic2.zhimg.com/v2-edba76fe48e5c337c6234e5bc222a38b_b.png

查看lv大小是60G了,
https://pic2.zhimg.com/v2-39d23179fdad7514f572eb918c7fd597_b.jpg

再刷新下,才可以使用
https://pic3.zhimg.com/v2-da49e3d2629c8b084ad9a21eb43fcc20_b.jpg
https://picx1.zhimg.com/v2-8ec9f51c91b1a0da7ed23ee1af2c3a61_b.jpg

这样就扩容到了60G了。小结lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。那写入的时候怎么写入呢?mysql往里面写入数据,
https://pic3.zhimg.com/v2-a672a4e6c7a50cf26bc57d38b4364976_b.jpg

创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。
页: [1]
查看完整版本: 什么是LVM