找回密码
 立即注册
搜索
查看: 205|回复: 0

什么是LVM

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55422
发表于 2022-11-1 11:29:43 | 显示全部楼层 |阅读模式
LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,可以认为是一种磁盘空间的动态管理。
LVM必要性
如果虚拟机装的是20G的硬盘,如果不用LVM,你的磁盘是无法扩容的,不是说不能从20G变成40G,因为可以通过挂载多个硬盘的方式。
比如mysql挂载到这20G硬盘上,

1 X. R8 M6 E/ o6 v
/ X$ p2 C0 A+ ?. o: S" j7 t% N% C, j7 j6 j- I) a  z& {
如果没有用lvm,再想扩容20个G的话,

3 v. `# Q+ j! Q; F! L5 K* I* e* D( J/ V2 j. S
, [4 I. O- d$ F5 g3 e
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,

- n% H- h% J! o6 Y1 x# ^2 E. e
! h7 v; k" m; S7 b6 |' W# _0 s- v/ I- y
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
! r7 j( \9 F3 `2 |4 G. _
1 q, r; a  a/ Y1 K: ^
5 B1 U3 d8 ]+ n( ~8 K: F; F
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,
5 f: y' l8 ~( P9 d! B
$ O# k% @3 K: T

- q- |  c4 g, F7 p4 S7 ^
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
* r* V9 w4 q7 h

# A( p  I# g7 I9 o9 o9 i4 r& k& @! m% i/ H8 O% v3 x# o* S2 u
以mysql写入数据为例,

2 |5 u" v1 G: }9 H; t8 _, V, T5 p

. [9 I) u( [/ ~9 }% `
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,

$ h# o7 X% b+ k$ e0 _/ [9 N- S! B3 D! @+ w! L" J  R2 D

/ y" ~* b! Z$ _: i: i& i* v
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?
& H& b* ?; T! f  y  B

5 ~$ R( l5 I) |( T- I$ L& h% m0 m. g0 h  g( q% n9 g
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘: _1 y  K" K9 {! q" O0 ?

2 A/ \. o  i7 {# F4 k( [
8 j) ^0 o5 {3 z
& D0 A& I% i+ A  m# H! ~0 C( P
  • 选择磁盘
    + s8 {. U  A% K( E! E

- v2 U- r- p/ @  ]6 ]3 Z+ e8 m7 ^* r$ _0 R/ r% u+ G
( @5 {+ I8 K0 O  i
  • 指定磁盘容量  @* Q+ u+ d# [4 K4 E

% w6 N/ ?2 }) \. S
% f! {1 N8 B& E, b1 R) z" e! N* o& Z" V7 D+ Y( L( ?
  • 指定磁盘文件
    * e' k! _& f7 t4 G1 c% r& a% U

# I& k) O# H& @2 Y9 l3 u7 @2 P! M# b

" w( Y. P/ A0 h* t
这样就多了一块40G的硬盘,
: g# e8 l# ?  c5 Z- a: x
4 `* V; R  o# Q' n+ ?* {0 [. T/ E

, S9 n4 J# y  [$ r
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小; b% J8 Z8 ^8 ?6 U
    df -h, E2 g2 @5 {: K) N' X: _1 ]" |

+ _& O" z% R$ a0 f$ S% l  X! L2 `  }5 N

6 o& n# e0 V5 ^0 o" h2 j
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷9 I# y; ^2 y+ I3 G5 P, Z
    lvdisplay
    % s8 ~) t3 D. y3 i

1 @( M- y7 Y& i: R' x4 }8 p$ j' ?6 S+ F, D2 d; B! _  x. m' w8 B) Q
: Y4 {5 f2 B  d. ?. Y1 d6 h! d  T
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小) d1 F( K% r8 ~; n0 n& j
    pvdisplay
    % m" O. R& P9 a, K
. {  c2 @* [# f/ p
2 Q$ d% k8 B) c" p/ X6 k
) k  @) @5 k% x! q4 w: s& Z! M
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。
2 D- r0 a: ^7 Y% g% M$ m

; \3 g* K4 x( {+ L5 E9 O- K% V2 g% A" ?3 K8 n' D6 a* ^* N
sda是第一块硬盘,

+ T8 ~+ p9 O' p+ o: V( M
. U; d/ l. M+ }- I0 [4 K7 w8 l. K/ r
sdb是第二块硬盘,

8 F2 v+ {( Y! o$ C$ d6 f# c4 v' U- I; H( R+ J. O4 G9 d  d* J5 t

( E3 W+ M. k& C! V" t5 }
  • 检索硬盘1 B0 x" B; ]2 P6 n
    fdisk -l |grep '/dev'8 \4 T3 N8 o) f' g! p* \

) _4 q8 E/ L+ f$ @
# s2 F; k* @, M: t- Z2 o: m+ h  z* |* I3 i5 e9 g
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,

) J* u7 q6 V9 z- T9 E+ X. o
  G! N, W2 Y1 E% x- Y3 g' i4 c7 s; t# f  u% U$ o0 W
4 T# f2 a# D" L( A5 @

. U1 p' D9 `2 ?4 ]1 U; @+ d+ p0 b4 i$ q" X7 W
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?

. }% o3 G; Y4 k" P- l% D* C2 I' |0 g# @/ d+ y0 h) F
; Y/ _  M! G4 p4 c+ V, @. x
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。
0 f# ]4 ^3 M& O9 T
0 ~2 g3 U+ D5 s2 A* I
% Z7 O5 c1 g2 q4 g7 S$ c( P
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化. d( U" d# r* r/ H5 w1 v4 y
    mkfs -t ext4 /dev/sdb1
    * F1 P9 I0 n& ?( I3 y8 b
; t: L" O7 G7 h' z

# r/ S. }. ^2 {
$ S: Y* A& [7 v0 e/ z: C
  • 创建物理卷(实实在在往里面写入数据的磁盘)
    8 ?# T6 H" L" z8 u8 Y% tpvcreate /dev/sdb1
      K, \. e; D0 P把sdb1这个分区变成了物理卷,就可以往里面写了。2 P) g" t$ d# j0 J( s
    物理卷交给lvm管理,即逻辑卷lv& q, J. y  A4 i7 N1 a: N& `

. n2 t7 e4 `# a2 }0 C% T2 X) J
! \4 N8 `0 z- C# @( P5 {9 R- c, {$ ^) n  m1 B: }: B
  • 查看卷组
    $ J; A/ a( ^7 H, x% U6 {( Y5 {7 ?( X! Cpvscan5 q. ?0 |) T& {8 V& V: G7 s
8 D* y( _8 m* o8 K' _# J- s

! U9 U7 V, H7 k
* T6 u: T, c2 @& Y& z
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,
' v, n, d8 [$ O

9 @9 }: X9 [1 C/ I0 l% i' P0 {+ U
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去
    $ T8 E. [9 H# f1 Xvgextend ubuntu-vg /dev/sdb1! U+ `" V) A3 t6 ?  I) B
# n: y" ~: U& I3 `0 e
) T7 |* @. e1 e8 V
- E7 S" G- I' t
  • 添加成功之后,查看卷组6 i. f; x  x) E% b& t' [# @! P
6 e) h: S0 [2 J0 o

% ~7 D% C9 c! X" h: a* Y. s; n
, A& s  O5 ?5 H
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况
    % ~2 J, ]+ z! B. N7 Y' x

% ]7 F/ ]9 X9 \$ ^, N1 w, H. R8 E0 w( U, H& \, M, k
$ m8 I; H9 S0 Y
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷
    / J4 |9 s1 ]+ i8 q, \" @9 U

2 S* f: Z+ H2 I( ^/ f3 a9 C# R  C5 N; \  a" y# z
4 {& J7 v: M# d
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)
    5 U, d  C+ `& z* Q/ f# J7 X- ~lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv! s% u. C- I) m* @# J1 V5 y1 q
5 G9 ~" k, N$ w7 e) k) e
- {4 @4 l: W: _0 A, Q( F7 S* |
( l* R* V) j  U6 O/ c
增加10个G之后,这个lv逻辑卷的大小为29G了,
* m. I1 C9 B  V0 Y# ]4 G
; v$ k4 b: i) L0 a# g

/ Y5 z) i7 N( U8 s6 m! i" K
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv

9 z& u3 G- Z- t
# M0 T0 z9 I( P5 M7 g) Y
$ H. c* X% P) u2 `  U# {' l
! C- V+ R, O- W; G- c2 _
1 ^" I2 s- {: O* e- T' j
3 z) n  O8 M  W' L6 l8 k1 n
查看卷组
8 Q" u  a  X4 n* }/ i6 L- ~

' a+ K" q) N6 W3 E4 g1 m# X8 u' R& y( V1 D2 v6 |
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容
    * i7 E- b; V, }+ w# }& \# `lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv8 y  P! W6 h; q: E" m6 I

" q- ]8 {7 O/ @$ h
/ i9 R& }0 {. k
) \& S2 G5 R. X
查看lv大小是60G了,

5 q2 Z4 B5 ]: s2 F
1 c$ z0 l7 @  w% y$ E3 q; O; h3 z. j" B$ y/ T( H% X2 S
再刷新下,才可以使用
# B8 o; K. y& g0 b) r' {- d

/ Y0 u; V: l/ w- }( n6 D
% V, l; f) R/ }+ X, y: e' v6 t0 H( m8 o: i3 F  x; ^
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,
, v6 {! O9 F- L8 z. K

5 i& o6 P) D; K$ D0 _9 d
( `% r; ~& @* ~+ x1 _& y
创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。
如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。
一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。
不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-6-20 05:58 AM , Processed in 0.125687 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表