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

什么是LVM

[复制链接]

991

主题

92

回帖

5万

积分

管理员

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

3 k2 Z8 M% b/ t8 |3 |' t* A1 r: O
( I. ~" h3 j; v9 f
如果没有用lvm,再想扩容20个G的话,
7 u* T4 J% O7 X7 B

4 U; A  `3 K# {3 E7 g& P9 V3 o$ V& D' ^5 E9 h$ O* L
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,
, C5 ?2 S4 c$ \( ?

4 }) l8 F' T' j2 R; L5 S0 M; c
* w* E& Y3 T; _# n) P. n0 ^* }* z
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。

& A# B  c; H: x! ]
/ j/ q, `. o% q: z  y4 h5 V+ B. Y8 H6 s; {7 O) r
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,
: {$ U5 x: k% H4 \
4 e" i8 C7 a0 c

& R- w1 y, r& R
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
0 u. I( c5 o9 ?! e

- q$ e; D' p4 N6 b2 Z5 O! p7 C, k$ g5 h
以mysql写入数据为例,

3 I+ @8 T+ D7 T7 v& f
2 x, e1 q% P- d" `6 L6 @
& N+ _8 |& `. q% _0 S
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,
  @" Z# E, E1 Y
9 K1 N- h$ @1 F# H1 r8 k! }
8 A. V, n; k- F# N# _8 r  w1 E7 j
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?
- v: E* Z2 Y% H7 y  J
% I( @% ]# A# d4 y
5 N% j( \3 ~, q, w) X2 @( L! h
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘
    * A% |; D6 j% V: N

9 k. L3 P& Y; ?* T' v" j+ f" x
4 V. _7 z$ o& l& E1 G
% P2 {; T+ U, G
  • 选择磁盘
    # s. f8 y0 f+ b- l; V/ i* q; d  z

! P5 j, R1 F$ a; }
1 y5 Z; D8 g1 y2 N2 o" M5 A' E4 j9 o, z
  • 指定磁盘容量7 C- I. U9 q+ [' ]) |7 y7 k( y8 v
: ~- b1 j" d' e% P$ P/ s- _7 N

# s/ s' s& j( D. W8 @
+ a+ m' `; L/ U9 v; N6 x4 k7 A3 r' p0 U
  • 指定磁盘文件
    7 H6 Y) R" Y* p- z' C

! t7 A' }( ?: F' I+ _
1 F* Z# e. G0 Y' k) i5 ^% z5 ~$ G  h
这样就多了一块40G的硬盘,
5 t/ [# U: Y9 P% D8 Z& W9 j

  r' }+ n" i! Z8 m. x" {" H% ^* R& }: r% l, L( D
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小; l& G( `% s" C. X
    df -h
    6 `3 @. Q+ C7 a4 b
3 z! h  h' d3 b
+ e; L* L% I" b; w& l" |1 n% s1 {

% r) i# ?1 E( E& L/ w/ i" w2 Q  G
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷6 i- Y1 ^' H9 _* ^& W# @/ B; J* b8 I
    lvdisplay, P* c+ ?3 m2 Z  _4 w
) T% S* ]* b* o
; C# C! L2 t( `- \6 B2 K2 I% A

. K9 K+ u8 B" |/ O' \! W  n% }
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小0 Y; ]2 D9 Q) m& ?2 i1 \: B5 w9 O: m; Y
    pvdisplay0 U- L0 O; W# ?  F& B- P  d0 m% B" k
- j7 [9 S& ]0 S* _7 a5 V( b0 P

6 K, q8 P" c- e  C1 F- Z
; M. F: E! ~) O. J% ^# p" z) H
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。

3 ]& `7 R; `( x, F5 w
/ t# ?5 f- \5 g" ?; M7 s: F" }0 M- ^
sda是第一块硬盘,
+ o4 P9 l# I" h
* ~  T: }3 G$ H1 f5 S
sdb是第二块硬盘,
2 D' [4 C/ l; k6 i" _2 c! n
+ N9 K8 {) J. I; C3 `( P+ B& ^' c

* h, l  ?7 e9 y6 J
  • 检索硬盘! i5 Y3 w8 j' G; N
    fdisk -l |grep '/dev'; {+ B1 O7 y' V, ?3 V
; d1 A% y5 ^) U  c9 h
0 w' l' k9 C6 {$ `5 Q2 a

* x5 y% f' {$ a8 O
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
) ~/ O, m9 {! v2 _6 P4 W

6 ~; @- ~' ^2 i" O+ X1 ^2 i7 S8 |* o; {; o1 ~' L7 o

; X6 v7 T. d2 p) R/ d; r% x- T' O  D, B& q/ G: Y* q

7 g' _* x! i; U5 b( J
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?
" K+ e& y- g9 ?& L3 ]
5 s8 V0 n) F, n) U9 d

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

' g7 q4 @- N' Z4 |, K4 s( v' P2 q7 q6 w; u! r

* R( A3 `/ c$ J) A/ |( p
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化
    * g1 b9 K% I# d7 ^) P# kmkfs -t ext4 /dev/sdb1
    - q* |( x- `3 o$ j& i7 B/ w/ b
$ l! t! F( G7 [- i' M  L
; q+ l- t2 O, `1 `8 D( q
* U0 X1 L6 k5 @% m) V+ F( m6 c
  • 创建物理卷(实实在在往里面写入数据的磁盘)) ?% K3 m; e* r& g% h) w. v- w
    pvcreate /dev/sdb13 B- t/ O& `+ y
    把sdb1这个分区变成了物理卷,就可以往里面写了。; m) ~) A, Y; W
    物理卷交给lvm管理,即逻辑卷lv) A; c* @2 W' T9 V% Y
7 D3 o# [) t8 `! f+ J1 W
( j  ?: A9 f5 E, ?, G" A
0 T  l+ F5 L, q
  • 查看卷组  w4 z- ?' i' w  B9 Y& @
    pvscan
    / o7 w; ?& y. }# v7 ~

6 A4 D9 e8 |% s. h; K& W3 v% W  t# w% }$ D  V+ X; o

9 x" |8 a4 [9 u+ ?# r
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,

; D4 h9 C7 v( V* g
6 u" Z& b4 x' \( q8 @4 Z
/ @; w, R3 H0 q; C( |3 K
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去# T5 [% z* s7 L) l/ e! B
    vgextend ubuntu-vg /dev/sdb1$ Q0 A/ L5 g& \# {

; k3 y- D) p1 I2 ^7 x4 o' ]6 @. B2 u& z* `' w, _

# Y  E$ x1 O# k% {6 y
  • 添加成功之后,查看卷组  \8 H1 u! v  A7 |
  U# R6 n: i* {- r

, K$ Z% v& O0 L" f: |+ m/ L
: o5 M/ `8 s5 R5 u+ @0 t
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况
    & Q& g- g! H& G. P3 O( T/ j
+ ^5 p  H" x3 \

6 `& q8 }9 g4 O) a6 |3 B. f% I, Z: `4 Z6 V6 E/ J
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷. `7 X% }& N- x" Q0 g

# o6 k" m7 e$ [1 F
+ E3 W1 r- x9 A+ y
' [2 M; z8 j, n( [* U3 Y
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)2 R8 ?4 {, G4 x, k' X/ ^$ J5 W6 ?; v: x
    lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
    ' v* y# Z( |4 R  r9 A- r
! J: L6 z  t, F" X! |& @7 ?" f

/ v  t7 d, a$ e% B8 w1 d4 z1 O( Q" O1 E. ^2 }
增加10个G之后,这个lv逻辑卷的大小为29G了,
1 w! ]8 u6 V5 R+ R, N) Q/ U
0 e3 P, S8 g- h2 b' ~

# p7 w* h+ s' a: y! \, f" ~& D
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv

7 |- k; W7 A2 p8 Q4 k) ]# H8 y$ w1 s0 p
* O1 H; A! s5 {! \2 g2 n! J8 l" ~, p; A6 M2 K4 S) I% E2 w3 p) R( x
6 M7 P9 X2 v; C9 Q
- w3 m+ G# c* r9 l$ G$ d

; C; i- M$ \% b; ?9 [* C
查看卷组
: p/ X# h/ G1 F+ B, E6 E

& i- A" L7 s/ h2 b+ X0 f  a4 K9 j3 ?- {6 u$ |
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容4 v0 ^6 D" o( w- `6 A5 s
    lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
    : v( e+ u/ @' q% ~& n; \# \7 v

& o% X' e1 U5 B/ \9 v
) A" ^0 q' E2 c
8 j/ i" G, c2 {$ M  y
查看lv大小是60G了,

  t" P/ B8 Z7 V1 `. a- s1 g! A) O2 j% ]1 X1 [  J
* _! D/ Q- u7 t1 E) Q7 \, c0 {
再刷新下,才可以使用
( z2 `( o4 U5 ~5 A4 R0 ?

# D+ b/ O- P! \$ U8 h
- b8 D/ ]& D) d  S7 B' k' M& v0 S* n3 z, U
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,

4 Q9 f$ T- m  s( t
% |3 K; R& _4 V8 j! B7 n) e5 R$ W9 M8 N5 W/ s! t
创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。
如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。
一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。
不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-8-5 10:19 AM , Processed in 0.086849 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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