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

什么是LVM

[复制链接]

985

主题

92

回帖

5万

积分

管理员

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

7 S' U( L, T5 y. }# _: `. n
如果没有用lvm,再想扩容20个G的话,

$ I( P  a: T0 t* w4 {3 p
6 `/ j; ^5 I( B
' |1 I, x) I) I; v; q
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,

+ P# t% H1 R9 [/ q/ H6 v" G& m2 V$ b3 t. k

9 X0 j" K, S7 C' u* |
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
% T$ ^  q9 @6 q

+ k* Q! b3 K* k& W5 m4 l. r; D( _+ ]  W, H- L' T
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,

. j0 |- E1 g' I- I! S5 P
4 c8 }1 d- j) H1 w4 I
9 B& K* ^4 v5 r# @9 A3 D
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
+ q, W) H' i9 m8 ?9 [7 O

8 L/ @* B, F' x
+ d* `4 v2 }9 C% C' s
以mysql写入数据为例,
. }' A% U; z- Y
' z2 L+ g8 ~/ _1 U  O' ~# f1 Y- [: m5 s
& {, A4 j8 w: n+ V+ }2 ~* I
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,

2 ?0 s; ^1 D! j
2 y, a3 z. \$ x% v5 t% }: c0 ~4 n! |' P* P3 N/ I
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?

2 P- k$ _3 U( D3 o+ R' I2 B/ w; P1 S$ C' r
/ f) z6 H+ K4 O0 Z
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘
    ( d! i9 a7 {" @% e- b

2 f1 A# s/ t9 K
5 V- m9 X  @$ n( R
/ v, P  {8 Y( K9 b  ?3 `
  • 选择磁盘
    & r% x6 e+ {& P, V

  @$ Q7 k( d. d, u
) m4 M4 C6 u. T2 v9 u; H5 L# H  s3 _$ G8 D. P1 X
  • 指定磁盘容量
    ( x' p6 i, u0 c

4 a8 l8 u/ l0 N: Q
+ f; F' m, ?: e; X
/ p' W3 L+ B4 n' a! a
  • 指定磁盘文件% @) L; L* P' l) R) S) P
6 t& a7 L# b: h$ j. y0 j+ \8 q
6 y. L+ u6 P0 {2 ?
: s2 z& A2 P0 i6 A4 [% R0 ?8 Z
这样就多了一块40G的硬盘,
9 e) A/ S% o* K$ t# L2 r( `3 V

- a6 }' {" e( h/ N( x% w1 A  ]& }
( }) P4 }/ P8 I- T& @  F. ~
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小
    " X+ L" k* G: f, X! c' k) gdf -h
    ( y& ^. v5 R* D) i* g. X" T0 t

! l' |- q0 R3 H* `  u7 i* O# i- r7 h  `& l$ s. K( [) p1 _

2 G4 o; ~/ S( g* j& |1 B, i# L
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷. \: T; c* T+ c. z5 X
    lvdisplay' C, S  u; I0 j
. A: J  u7 s/ V. ?/ |
+ L8 w$ s! `5 F. z

8 I7 `* l- t/ G. x  x
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小
    1 E4 B3 \1 M! G2 V( J: a) Mpvdisplay
    7 V8 M7 H4 L/ L6 v" ^

4 |- r% Z, O# d8 ~! p2 H8 s, [& n! ]3 n2 ^8 D/ v$ j
$ k( B& b0 ]4 V
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。
: m2 \- b' O2 d- c1 y
1 l4 S- [. x! Z) e" W0 x
+ l$ _% A. s8 H  {, G
sda是第一块硬盘,

  U% p- }8 b/ z% d( @" H
7 g, J0 V4 _# j8 B* z% V, K3 w3 c; b; ~
sdb是第二块硬盘,
5 z# o! X  p& ]3 X0 \
1 n1 p' `' C. H3 K8 M% R3 t6 z& i

+ x3 k0 D- E" K/ e
  • 检索硬盘' B3 e" d3 e/ W. F" Z
    fdisk -l |grep '/dev'
    3 L% P' }1 f8 |# {3 u
" j$ G% @8 N# F! a1 C! Y
) f- @0 V! I8 g7 @) [
) y* U6 t1 N: E0 D2 o
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
3 _  r8 _% O5 M. z+ ]& V/ Y" d* V6 K

" M. }; i" r/ k1 Y$ y+ q2 Z6 x1 F! E; [1 Y
! e2 G/ @0 N! A6 {- u/ }) }
! G- \: f4 ]+ |) `/ w( F* G
0 w9 H4 M9 p" u, |% `
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?

% z  w2 L; [4 a# h; K* Y% S6 k& q

2 _# A1 T  h3 _4 b! |6 E: e
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。
5 {+ h2 N- Y4 S& _. E, Z8 u( u
/ _6 R/ L% O3 w/ d! E
8 m" |3 E2 G) O
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化
    - V% r' r; ?6 @) Vmkfs -t ext4 /dev/sdb1
    ( O1 P& a3 P5 p& v" g0 O3 x

# I# K2 J8 E) d+ u0 F% w( ]1 ~& w
' ?  O% u$ R) }% b, r+ E9 H/ k5 e
  • 创建物理卷(实实在在往里面写入数据的磁盘)  b1 x( Y" Z0 y2 G  G9 `
    pvcreate /dev/sdb1
    " g" u0 [: ^" T4 b5 c3 P( M把sdb1这个分区变成了物理卷,就可以往里面写了。$ x! y% F) D0 q9 m9 t1 x
    物理卷交给lvm管理,即逻辑卷lv
    % A, l8 }4 _* u: R0 q
1 @( Y; |! X9 c, v# p- ~6 |
" B3 l1 C" Q; m$ Q- P1 k. y

5 \2 U9 h! h1 G4 R
  • 查看卷组
    & A) x% M( D% c0 E" _pvscan
    8 u7 U  P0 b" ]+ P" Q, ^
/ o$ u( V2 I& S- z" z
2 u( m' \1 ?, `
5 |" h% ]; R% J
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,

. n3 E# u( D3 {) I- ~7 N
* v6 u! U" C) m  h/ e: R- Q2 k% C/ b
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去
    4 e9 ~4 K* Q  b3 }# D& Kvgextend ubuntu-vg /dev/sdb1
    1 F  ^# F3 y- A) B$ D4 @9 a5 y) ^. K

# \+ ?) f" z# a8 w6 q4 G2 N9 w7 Q/ x
2 ^' s; i! L" I$ L
  • 添加成功之后,查看卷组
    " y6 ~) |  N* w) w

  e: Z5 {7 n& w- y9 g+ x5 S" E9 m# u7 y2 v3 Q7 q0 W

6 C2 D  Y$ N7 m6 h$ t  h' Q0 k
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况
    9 j  M! h! C& I+ p/ i# G9 f+ N2 {# c

  @$ h7 v* L" }+ t5 b* C; l$ ]; O* \2 u9 {, O
3 G7 k" d- x7 O& g$ E; a
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷
    7 `" H% }1 O( @4 g  t

# L. l+ a- ?4 g1 i+ _5 x
2 \1 t; L, Z* x4 v; y7 X/ X$ U. n1 w+ f1 Y
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)2 ]4 r. h" z; X7 h
    lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
    . ?. ]( `- u, n
) c& j4 n/ A7 i) N) G4 |2 R

4 g8 g" B* V& @& M( O/ b% m) A2 s3 U% f4 v' G9 g
增加10个G之后,这个lv逻辑卷的大小为29G了,

, l) W" Z% x( z, X& Q5 V/ k. H+ X6 B
8 |, T/ O3 L+ e3 `9 N
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv
" |) m2 `( [5 U& R2 Y5 i

8 t+ x/ \0 j. |9 n$ X3 w/ a1 j# t, E6 l8 C7 N( E' Z
2 |" E" [) m; f# b" V
$ @& D4 B- q2 [  y  D8 V8 s

0 d  m- _+ y! x0 |6 F) X9 W6 P" B
查看卷组
% G$ t6 \  Q( e# g8 v
1 @# ]6 _: r& N$ `% g! Z5 \" _! p
, {3 d. o  x7 H$ L1 C) A4 m
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容8 z5 Y4 E. i. ~
    lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv. g! h$ Q0 l" V0 P
4 b4 _. e8 g! Z5 r1 y
: G: n. j1 d* {) u+ D

& w; P) G2 |/ U& W9 J" _1 j7 a
查看lv大小是60G了,

  F6 Y; F: c# E! C- X4 H4 N) r3 G( c2 ^5 c, t1 E
) ~$ P+ v5 H! U7 }
再刷新下,才可以使用

7 |6 o( q* B( e( |
, v. w% K5 o& v2 v9 u- U% I& p" {/ d. F5 p* c% b# g  Y. y4 G

3 V# z0 L' c+ C/ n- a/ L
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,
5 v1 Z" Y0 E9 w% s# l1 N8 o
2 g4 Q( D5 z* h. u. R
1 X7 [) x* B# O
创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。
如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。
一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。
不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-11-5 01:54 AM , Processed in 0.116145 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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