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

什么是LVM

[复制链接]
发表于 2022-11-1 11:29:43 | 显示全部楼层 |阅读模式
LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,可以认为是一种磁盘空间的动态管理。
LVM必要性
如果虚拟机装的是20G的硬盘,如果不用LVM,你的磁盘是无法扩容的,不是说不能从20G变成40G,因为可以通过挂载多个硬盘的方式。
比如mysql挂载到这20G硬盘上,
: c% g9 B! N" ~8 r# k6 B5 z
1 f4 d) `' V1 W2 T! [# n
. U( O2 D; L* {+ @6 x' H: q
如果没有用lvm,再想扩容20个G的话,
5 r: a+ U/ h, E. B

, w0 \- f& Y$ ^. ~, ~& T. E( R$ N" z0 d" a) P, p" w: P
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,

- M% t* v+ q( F! w$ g2 X* g
1 L& D9 g. z& Z% b' k% @$ |: D# M4 e/ S! d2 H$ h, r
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
. B6 H% x5 t# o& u4 i
5 _  F: a, Z2 H5 ]- Y# ?: K& k- D

5 F9 u; P; P4 ~5 ~5 K
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,
0 H& l. S" r0 r0 K

, \* q) f8 Z+ ?/ k: h0 S* f4 N
" p! F6 d8 J; C+ [4 B  p
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,

/ e7 b) e9 E% K: r" ?0 q/ n9 V3 l" z! Q: ^6 v8 z0 e; ], u. V" r+ O
- P: I9 B7 u8 B1 f% {
以mysql写入数据为例,

1 G: X% g, x7 k% m! D/ m$ ~8 \: R2 Q, C. j( Q4 `
0 N' P' {; z- Y
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,

9 a5 l% Z) @/ z4 s6 F, S% \  q6 Z# l- S, c! g* S2 m$ x/ P* t6 A

! B, A7 x: y7 [( L4 K5 C
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?
' Y+ W. l. m2 ?
* I* {0 \; `# K/ p, w9 h$ g

) Y6 ?8 S" y; P. D6 {
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘! }, r% [: |3 @5 f6 Y* d" d, {

: [, `% w, g- g2 _$ u$ e$ _& l
+ K3 p. q) Y6 R" ?- A2 }
( e! d  J4 a  f
  • 选择磁盘4 C% V5 \/ t: ^

$ {: G  w3 x* c% u" }, B6 I- b; q9 \
/ ?" h. C1 v+ Z/ Y& v
  • 指定磁盘容量
    ( b2 Y# q0 n6 b/ y. z
& y, T6 T1 ]9 W) m

" G. _. R0 {6 {- e7 D  z; n- l0 l$ F* {/ }  W& r
  • 指定磁盘文件$ I0 O: L2 S  \* M# X, Y

& m2 v: @; h- [; Z7 D2 M
7 m; r: N& G8 s7 v$ e3 O- h
  E& x# ?0 k# t
这样就多了一块40G的硬盘,
) `3 g6 R" d% l. s/ C! t

7 X. ~# y; K7 }0 {; W' K7 Y8 c  A( M
2 n  G5 Q* `" A& k9 ?. x
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小2 C) u4 n( [3 f( z
    df -h; M. P1 r4 [6 Z- l

$ W4 N1 I4 p, [& c! n* l3 u9 {1 K: @, S* H+ s* ]

" e6 P; U1 `8 a4 H3 }1 [* l" f
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷* q0 k0 c- J" }  D' x0 w
    lvdisplay
    + W: H9 a  j# i. |

, Z! n; c7 c9 M# r
7 M* V/ W2 U% V: D) \! {( `2 M6 z# w: P
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小
    + T1 [) s# b7 m+ Ipvdisplay. [! m6 Z3 M6 S! r# w( X

, c- ?& O' Y& c$ T) R
+ |9 N: r& H/ B5 H, e1 M+ \" n$ X8 e7 b5 D( b# @( D8 c' K5 v
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。

1 Q) {- K' |) {3 w9 i! m8 T3 R/ J3 z* f1 p# s# |& w

1 e) G5 B- L& m& {
sda是第一块硬盘,
7 F0 A! B8 J+ k$ p
, g3 l7 S1 D7 x
sdb是第二块硬盘,
3 X' N4 {4 f$ C8 C# ]

0 a( w# I7 ?- [
# U( A3 z6 X+ v$ N" {! q% J
  • 检索硬盘
    3 G1 Y. y7 ~9 G5 B2 S3 t+ R5 afdisk -l |grep '/dev'7 I5 l9 o7 ~3 O: H' @5 k

# d- Y6 a$ W; U8 v' f+ ]
$ T+ w5 P) Y, }( O2 M9 }" i* p% T5 p3 Q  @/ C; \
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
$ G' E9 i3 b  \3 c! \8 A
: q9 B1 j" M8 ^+ f
. v8 j/ @% q1 h) ~

  c) w! n: L8 w- Z$ q, w7 u/ n: f0 D8 d$ F2 L9 l3 V" ?" V" h. E

* S6 B5 @; E9 g- {. W+ S
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?

' G  H9 p- g  Q: o0 u0 s! P( a3 ~. C( a
, T5 j* D& Q7 Y4 Z2 l
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。

2 n/ D' ?3 z# ~* S; z6 M. b% y
0 J( P  ^5 G' i0 l4 B2 d$ K
3 `. T' U& g! B7 [5 Q& I
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化
    # {! e4 Q6 J2 X$ H: wmkfs -t ext4 /dev/sdb1  k, g( I$ \; `+ E) Y8 M0 |
" x. Y% f! ]0 v
) K1 I  b5 I) V2 p3 |
3 I3 o9 Q2 H2 l0 A: x3 Q! Z) \
  • 创建物理卷(实实在在往里面写入数据的磁盘)
    & K1 D9 V+ R' wpvcreate /dev/sdb1* H6 D8 L; b) C8 I0 u. X
    把sdb1这个分区变成了物理卷,就可以往里面写了。& ]' e* g. O1 L& l
    物理卷交给lvm管理,即逻辑卷lv% @: y2 Q( `) o9 M( D
* H# I8 q3 Y/ Q7 ]5 e; o) J

" F& R( W3 F0 S7 D: \
/ s$ @1 H0 p$ O  f" i" v# K+ N+ u
  • 查看卷组
    ' H1 C$ ~& U. p' d9 Wpvscan3 V( Z+ I  l% f6 U0 F

+ ^( c1 U( ?+ l" T$ r7 K. Q0 G8 c; G/ C6 z" ^% Y) k

7 R/ Z4 |* t% H9 l4 w# Z$ V0 n
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,

! U; E# D0 |0 j2 {  H* G5 X
+ F+ L/ R- z1 ?: `% y) `! z) S$ M& S# o$ m
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去
    $ }/ N& ~: [9 p. Y; B) \5 Gvgextend ubuntu-vg /dev/sdb1
    $ P: p9 p, W0 K  O1 D; i

: y. p" n% {+ V- N0 z
+ O3 Z& ?% x7 E+ ?, b) o% ?- Q" Q3 D' k/ z6 M& M1 O! F' {) k
  • 添加成功之后,查看卷组9 U9 t$ Y$ Q  K+ p4 A9 P/ E

7 T! K; L- z$ R* t1 F9 D& V/ j7 E" h' m5 l

  A& ?9 [" U( P- X7 a) Y6 w) Z4 `
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况
    ' ~9 I# G% E) v

' V, F% l: m6 `# h" L4 g. p2 D' y# w* v8 k& U0 Y# Q
' {: H- m8 z" m! c" K
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷
    . S7 w8 C7 `& ]* l* i
% y4 d& H- M, ?6 _' v" I

$ S4 x3 n' b2 h! A2 b, h
: H( N% Z# _4 o; R/ c- u) C" r' _6 ^
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)
    . i  [2 Z; h8 xlvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
    & P# p! l' ~2 G+ |0 W( p8 O: f! M  s( P
9 {* C5 }( d. @8 P% |/ W. y
* a9 C+ ?) N) A: F/ l

. Y9 o% k2 n: S- q1 I. m+ e. L
增加10个G之后,这个lv逻辑卷的大小为29G了,

9 `7 e8 _  O' Q8 K' ?, q4 ~& b# [. c9 x% ?

. B! S6 }6 q2 I$ j% N
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv
- Z" D$ ~  F3 ^( ]

0 A2 ?% C+ ^( _5 B' N: {4 L0 H7 J7 D6 D+ f

' l* m1 c2 ^5 B7 {7 B- }; o; X6 ^) ^& R9 G- Y9 e

) T3 w3 @( }( ^/ c! G0 z  q* k4 Q
查看卷组

' w; G) v& R3 V2 q
/ b5 A/ c2 C" v8 m( @
. O& @4 C0 E7 K  v# b
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容
    % W6 b. R# o" n9 q- [) W- h  Nlvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
    5 W2 W# [4 v/ x

. B$ ^! I4 O5 M9 J. q- h, D; x/ K( P6 H& `9 m# n2 ~

1 G  @( U! G/ o- `' {* A
查看lv大小是60G了,

6 X1 }. j! h3 e( @. ?4 s
- d( J- W4 Q  U: ^0 G' X( R* ], k  G; {! M8 p( i4 ~  x6 v
再刷新下,才可以使用

$ ]8 w- q  [$ G0 m. I3 x1 k2 c6 P9 U

$ Y1 c8 L  a8 L  y) x4 F5 n
1 o5 ~8 T. h; @, N
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,

+ m4 u% J, N  f+ ]( i% R
9 R" }8 E# {# p5 @. v4 e. h, p8 |3 A! T. E  p! h
创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。
如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。
一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。
不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-11-3 04:45 AM , Processed in 0.076809 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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