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

什么是LVM

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55457
发表于 2022-11-1 11:29:43 | 显示全部楼层 |阅读模式
LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,可以认为是一种磁盘空间的动态管理。
LVM必要性
如果虚拟机装的是20G的硬盘,如果不用LVM,你的磁盘是无法扩容的,不是说不能从20G变成40G,因为可以通过挂载多个硬盘的方式。
比如mysql挂载到这20G硬盘上,
- V2 {# s+ B4 Q: R1 x- ]- N
: f, m& ^2 p% Y. a1 P! v
  h' T* H' }8 I  b
如果没有用lvm,再想扩容20个G的话,
. x# y7 z# u& ?9 U' P) F+ U) n

1 _. P8 u  |% Z- {4 F3 Q' A* G* N# o1 S
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,

/ q1 A1 J6 t3 U5 S) T; P# r! F$ h' T7 h+ y4 j! c$ m
: u3 P  E4 S8 e3 J, d
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
, U1 u; z: ]8 M9 N8 \# w* z) o9 `
5 Z) c  b5 J: X0 b" G9 p

" h$ t- J- w, a' b) n3 m: @6 b
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,
. ?, W% H* D0 p# G9 _9 n
: f9 I4 l! N7 O3 @8 r: ^

1 [( A7 F  `% f7 J+ p( G( `
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
0 K7 m* W; D, u1 V' J1 }

; B0 U% s4 J- o2 t2 b1 Y/ O: J& c9 i) r+ T' c
以mysql写入数据为例,
9 L/ D0 e6 w- n% i, m& p

! y0 T" O! x9 n9 p, h/ t. s, Y! {8 V
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,

: Z" k$ w/ L: j) L7 ]
9 ]. @$ |2 e+ ^5 m
1 v9 F: {# n# p5 R: K+ U% A; k
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?

! t% K0 D1 G7 P7 k9 W3 U% Q5 F( [5 H( z( s

/ Z' ~3 U- M+ ?5 Z1 a1 t  x8 y
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘, I! y& t# b4 V; Y2 d/ k
& p) T2 \, M$ G3 V
1 X( x+ t3 K! K' n! P

: S. ^- x' x$ ]' e+ M, A
  • 选择磁盘5 u2 j  j1 G: A* W7 E4 s1 A) c! e

1 @0 \$ F3 n- `4 m9 m% R
& D, y& }' F& o! f. y, B0 d( Q0 Y( F
  • 指定磁盘容量
    5 B, R" M5 u! Y6 v+ f, u

% Q8 X+ p  ^5 I2 W, f
9 \9 k. m0 W% O! _) [" m" R7 J7 V, C9 r) ]
  • 指定磁盘文件
    . p7 H* B# J: O6 J: Z' a  y0 j" q7 O

: {: M" V$ @& X/ @3 C1 p" t' [  V* b% [9 X9 w

$ u5 I% s( L+ i. _6 u. U% [
这样就多了一块40G的硬盘,

" o# H( v0 V$ @
* T! g$ Z8 M$ p" z- Q; U7 h4 l
7 b7 N  I+ J# k$ h/ o
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小  [1 o6 ?; H% [' h) U: R$ e4 w
    df -h& D( t8 l! |, R/ v. I) O# ~( a, C6 W

/ B$ Q5 a1 R: Z
2 Z+ g# [5 N, U& H1 M1 J- @
; p& u! k/ j9 A1 q$ b/ k1 n1 ~
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷
    8 g- g4 t% H  V# h1 A. h5 y! klvdisplay% A( _) y6 k; f% [8 H5 n
% u9 t0 r4 }( y: w2 a
" L8 v' `! o+ Y. E% ~7 d
4 S! O1 G6 z1 v( H! ?  D
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小4 {1 c* m2 b/ {+ b# q
    pvdisplay, B! g5 N) z) s5 w7 d
2 A0 K. \8 G8 k- V% w; x
  D/ L" @+ g3 z$ M+ s, `0 `

8 W; e; m  ]2 M2 q  u
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。
! u0 R  {3 A2 S# g/ y6 _
, U) {6 `2 s$ Z& L% k
, n" P* K7 S4 u; F
sda是第一块硬盘,

+ L3 b3 Q1 Y$ ]) C1 N8 v, X8 d8 N+ w
/ X/ w' X" l2 m$ F$ Y4 t
sdb是第二块硬盘,
1 b, y" M# B! ^4 n- Y
# z" f; m2 u4 o, y

3 [/ H/ w# J3 d0 t0 e
  • 检索硬盘
    ! H/ Y, z6 J9 Y$ ^- P  z  hfdisk -l |grep '/dev'  R" p0 z; H& @) k! j& _1 o( p+ C  O
0 J) a( j, `' E! J
2 K& r  R2 Y" Z! s

0 `) {0 I4 a2 [
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,

! |; ~% a# N" u1 ~4 c$ T# N6 M) w( t- m6 s9 Z- D# F7 k( F+ W
5 G; Q2 `+ z# s3 n0 b9 u  D
, w- C9 Y! S7 \  W- n! P- c0 P

8 ]3 f( w. i' M* F0 x, `
/ [1 S3 H& s. |0 b/ i9 W: y
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?

4 e" R# [# ]% C9 A( S! m% G# c/ d: d+ k6 B; W0 m

' _) s5 e3 U3 U9 t6 w/ Y. |+ q% C
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。
0 D1 W# h- E0 }; F" f0 f% Z
% ?+ I4 d) ^  t' @$ {6 ?* B1 G
. x/ g  y3 \( p
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化
    5 j" z2 a$ x# y' Z5 bmkfs -t ext4 /dev/sdb1* R9 q6 h* U7 q9 p" O$ ^
2 N) j' S& \# Z+ m! }4 H: {; j

3 {+ b( h; i" n7 t& t  e$ t3 W. A3 s. j& c8 Z8 v2 w1 l
  • 创建物理卷(实实在在往里面写入数据的磁盘)( I$ K; e4 N& w$ D
    pvcreate /dev/sdb18 m0 m3 I/ W& u' Q7 ~
    把sdb1这个分区变成了物理卷,就可以往里面写了。
    ( @! F: |; y$ _2 R物理卷交给lvm管理,即逻辑卷lv! O4 K% d/ g6 {# }

, g' I5 @- l+ m! H- e, ~* }
6 S* \! Y3 I  K* t. ^4 u' b
- B2 T4 k- [" s, a5 ^' Y, i
  • 查看卷组% y0 j" m& `) g$ W# s& l
    pvscan
    " R6 l* i% ~; s0 R
5 R% [6 T( g% i8 }0 g& ]4 ~2 j

" v3 T9 c4 r* @# }8 w1 E. b; G9 h0 ?+ Q( I9 u: |7 b) [
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,
9 ~  M0 c$ U9 H& U& t8 a- @! a

1 ]; c9 n' _+ i7 v% c: b$ L( q; N- Y' O9 @- S$ O  S4 `/ J; {- n
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去
    # H& w! T7 i( A% F( P5 |) ^, ?9 {vgextend ubuntu-vg /dev/sdb1" R# _- d2 }  ^, P: T  k
4 B+ r6 I! t/ z' C& b3 U, c

) ?$ i; J/ J9 J, g# k+ v* z0 s( s8 m! O! _/ R
  • 添加成功之后,查看卷组
    - x- k6 {, t0 L" h

0 R  ^! n9 Q! p1 F" m$ J5 W; [* w# s4 N8 w
# s/ o( x/ ?/ ~$ v# i7 l
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况
    & @9 ]. M0 i- n, j
- @# z- C1 \: V4 p7 H5 Z- W

* k6 Q, Y) u: W  P: i
  x( v# d+ v8 G! ~
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷7 a0 u9 N- ]0 p0 Z4 L: Y

6 n' n4 \) k6 ~! e7 F: Z- @& z$ g
/ ^! @2 Z2 V( M3 T3 \/ e5 ~- D. u8 A  i4 u
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)
    ( m5 g6 Z3 Y: h( {lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv! @( V7 l$ o; g7 M5 p6 Q- U8 g
+ @5 P& i" J# W  {* d. t0 T4 _
: l) L: ?1 b. `( ^
4 l2 I) s: n, L& N% D
增加10个G之后,这个lv逻辑卷的大小为29G了,

7 l! S' l- P" |) l0 d6 Q- a7 |* s7 y7 d3 s4 d

' A. J; Q/ ]8 O8 Q4 s
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv

4 z3 |- k, z: w7 e; q9 k  j, b+ L7 D8 w+ ^( P4 e3 F

- i7 A- P7 u: l" r  c1 K& d1 n, {7 W5 s  i% C2 X
& g3 G4 [4 n5 r* u6 r& m7 F

8 N6 V7 s9 Y! w! O1 {6 p# n
查看卷组
# x% E. O6 |/ E7 J- u! W  L
" O9 S1 j* z+ \1 |- i, G8 E3 B* w

" |1 @+ z3 m1 H7 _
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容! |5 B# h$ U, @& o
    lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
    " D6 F$ B: |: }6 q" |

. y& \& ~. D  V7 N
7 X3 j6 T, j1 n( d, ~5 b$ S. L0 c# Z8 B6 U9 R" K, h0 ], ^
查看lv大小是60G了,

* B/ P) B3 W* r0 U* z' X% Y. P( w6 J6 l3 D
8 a( Y  h% g2 ?4 v& M$ U# }
再刷新下,才可以使用
* n$ a9 [2 Z) m# r" ]1 }
: ~( H* w5 A: B2 S' |5 V

$ W' D# q$ }) b) x- Z
: Z& U! R2 a/ [2 m4 ?& h
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,
7 O7 S& _) u7 |0 z# |: g, j

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

本版积分规则

Archiver|手机版|小黑屋|

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

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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