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

什么是LVM

[复制链接]

986

主题

92

回帖

5万

积分

管理员

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

6 r5 k: P8 y; g9 J1 z# S; d0 d2 z0 ~: o" x) c" |
7 A. V! @% E* r' s5 B7 d% `, z
如果没有用lvm,再想扩容20个G的话,

: Z1 X* W) `# X5 J8 L
. ~, E2 ]. D9 J  H% k% M" o8 q, o
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,
9 O6 s6 }3 i- i: p* U
3 _  o& J! R" L' j& f8 k

2 {: E- \. n5 X3 x
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
+ H2 E1 X2 g6 X( s# Z. f

4 ^* e& ]% l: I- z" I7 g5 i9 s7 W! E* ~3 x/ h
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,

- V3 j% e0 y$ S4 ?8 X0 S( X
5 T- w$ @  I% P0 S* a/ E
" y0 |6 ^- x8 M# u
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,

0 D3 C6 p/ i* S
0 g% V% T# u# E) x
0 ^& _. f2 k. I! U' p; w! w
以mysql写入数据为例,

( `# e) R1 w/ O# k2 }% {8 n' S, p: B% {
9 |' @  \; N# v# [( H( {* m
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,
9 f* z) n$ T) M

& |0 u, ^: ~* q% R- w+ F5 c5 x0 b! Y6 b
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?
8 l% [- I, b7 c+ f. \1 C1 O: D
4 K& T0 z# {6 v- ~2 M  e% T

9 Y1 \* _4 v" f; }! }$ G' I
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘$ Q$ X3 u) C2 P" N" ]* q5 f+ l
$ p, a9 }/ E# @2 B9 V  p! M+ S# X
' ~7 {* k7 i# O! K/ Z3 N; U  Z

, {1 g7 _1 i; U+ c" ^2 @9 E4 ^
  • 选择磁盘
    - W, J* k! W$ h9 V( D9 \4 b! P
! Y; V0 k& j- e' t7 l3 t$ M
# S7 l1 [) _3 d
  \4 a+ p+ q6 _. J  J2 _
  • 指定磁盘容量
    3 v$ E! J( I1 e/ e7 S: o" J

6 v% b) y; y$ D8 H% k5 R7 U0 o1 d; x+ \+ e6 b& A  ^( }3 j  E

; ?: G( Y/ p: D( N$ m- X' c
  • 指定磁盘文件
    5 ~0 Y$ ^& K5 X4 i
- N8 ?1 H3 K0 @! Z' L) H7 \

4 t0 E# j+ X, o% t, N. y3 ?2 B9 r, P6 L
这样就多了一块40G的硬盘,
8 i* i5 ~0 q! F1 E% j3 L# T

/ ^# d' |( p8 I# p) `4 X2 Y( [. D% \' c7 s+ m3 _$ j
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小+ R: f7 c: j& h, {. T, K# V
    df -h* @, `- C2 t; Q6 {! ]
, d8 T6 c( M) O
4 g4 G2 N7 _: C, b- t" q1 K
  q) j4 @6 w3 p
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷5 s4 I. }1 f9 t3 w. Z. I
    lvdisplay1 w$ e3 e$ Q9 e/ u
4 @& P& O" s: j0 N
, |& T+ ~4 \% ~% D' Z

8 q# Q0 r: G; y' F/ B4 i: N
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小
    5 q. D6 o+ {3 R0 ]6 A% n9 Xpvdisplay
    ' h6 k3 B& y, R1 N8 L

: Z) U' g5 F% P( Z7 @7 e% O  J  |- E% n% S: B# _3 ], d4 p+ l

5 a0 {$ @6 l6 m( S
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。
& q3 d8 d! e  i3 S* i( c8 [8 S
7 z; T2 o# |+ L! X' o( a- ?! D

$ o$ Q% w; p3 Y0 K5 ?- x% n5 j
sda是第一块硬盘,

5 i2 G# X3 v# a" W7 j
; |$ W4 q% g* @" V: d, r' K
sdb是第二块硬盘,
+ M. U/ O0 \6 C  e* c

+ \6 A0 W% o, I2 Y& Q
  t. O- F3 H" h- n: L; B, a  k
  • 检索硬盘2 t4 s: j5 `8 r1 g" o9 U- Z
    fdisk -l |grep '/dev'3 V. R% W4 v6 C0 e( U( I9 s0 _5 s

% r! H7 D* j; s
8 Q6 F/ b* m* d. E0 }6 Q; p5 V0 i8 f
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,

* O2 u1 F7 A! y4 F, T2 E" v
2 d1 Q9 Q2 k5 L- q1 u3 i5 h
/ Q* N7 g5 j7 G5 o9 Z
  a8 E4 q* p& c/ k# c% x5 W
7 H4 X9 |$ u& K" F
, Q  S7 k9 K: d& p
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?

+ M! I5 l! z+ b+ l6 b2 ^4 X
  {. Y4 A) b( }, B1 c6 P/ k$ z/ `) z! o. q) O/ u2 a. p
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。

" d2 I2 Y: o4 d0 T' H4 v* `: ^2 Z1 t( W& j( j

$ b3 s3 J$ R6 e
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化: c- g0 @& h3 g3 x/ [
    mkfs -t ext4 /dev/sdb11 R4 {1 r$ }+ E5 g  b1 z

7 G9 O% A" T9 v
8 t% u( K& r% F# n. g' O' l1 j3 Y& G' ~1 A
  • 创建物理卷(实实在在往里面写入数据的磁盘)# X8 m1 p  C5 V3 B' _8 K
    pvcreate /dev/sdb1
    , B. u+ T  q5 A0 l( L2 T把sdb1这个分区变成了物理卷,就可以往里面写了。  g2 i4 j  r6 v! d) a) F
    物理卷交给lvm管理,即逻辑卷lv
    9 R0 b: s9 t. t1 P8 R2 z8 Z5 P
8 ^8 d4 L+ C" \9 ^1 `0 }

3 L1 F$ ?+ E' M# a. N0 P+ N) Y
# c) v& [: C' T+ X
  • 查看卷组$ l* {( s1 w3 n2 p
    pvscan
    9 H! T7 U2 u5 ^6 Q. h- g7 e% {% l

+ _7 H! h& |2 q  R; x# T4 L/ ?) `# ^

! c% Y0 x7 w; w% [
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,
# ?0 ^3 j  `( w) W* h
; h+ a! T( I, w" P
2 R& |5 R5 G) M5 K5 U2 b
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去
    $ d$ ?0 g' \3 B6 uvgextend ubuntu-vg /dev/sdb1! [6 z5 \# X! _/ @3 s. J, ^
0 l1 v  x) X! f1 e9 m% d% i

( u  i, H2 y* ?2 M& d
. H8 Q( B( y0 M# {- d
  • 添加成功之后,查看卷组
    1 m/ Z, b2 H% N9 T
) ?9 s; ~  i& V' R6 Z7 e; X' s

* \' B/ U5 ^8 e4 g$ K5 t: v0 m( @" q. [5 {" g% u
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况) Z' v# a+ `/ _2 z7 E
' |, ?5 k* b% _4 V! B2 Q: c6 J
; f7 h5 ]: [( I4 s7 L6 G6 X
; Q) e# |5 \- z$ |; d( T1 m2 C' K
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷
    % T* D: S% v1 n. F7 _# N0 u
3 \9 X5 ]' R- x; h- e! o; N
9 Z* G8 U, f: ^' J. [8 N+ S: z

1 f  c# T1 o9 {. O/ S' K  o5 I
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)
    2 C8 v- i; Q, J1 _3 l) m1 t% F; Slvextend -L +10G /dev/ubuntu-vg/ubuntu-lv6 d7 B- y+ y: F5 w
$ S6 ~. Y) ]6 `) F0 P
3 M. }" R; ^: F5 Z( J* K+ ]

" Z& a% J/ u7 ~1 g0 }9 ^
增加10个G之后,这个lv逻辑卷的大小为29G了,
  ~3 S" m  S* C, @( k+ g

6 p! @9 p5 k& x, T2 {$ Z9 s/ e6 V7 D* [' B9 H# a! p2 Z
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv

% {8 t8 u& p! M& k( _. J
7 r# }3 V; z; U. ~2 i; j% P7 e. ]
+ i8 f1 V* M2 E% S* c6 D
' O: H% X1 J1 q( _# L5 Z2 h# k" s  ~; z5 ?5 P
2 q9 s& d8 {- W$ _! B
查看卷组
' n9 N0 _4 j# W# U  Z- |; I# h
, E1 a! Z$ I+ i4 \* C6 Q0 c: m
; U" h: i9 ^" p6 }7 @) c: h* P" b
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容
    ! H) M; x, ?+ [lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
    1 r8 q5 [6 J" V, j; ]( k

4 I% C$ a" P2 D; \
7 j/ P; _- @  ^# w
, b0 c) B" k" S, ]* n8 ?
查看lv大小是60G了,

% j; k% d; {1 @1 ]' x( X5 U9 g! z8 d1 I1 G* Q9 A$ Y
7 L8 x2 D1 I+ x/ I5 s  P( O, M6 _
再刷新下,才可以使用

3 }4 g# @1 Y$ A% {# ]3 B% M( ]% ^7 a/ N( d" o* |1 S( k, c, ?* g  [; N
4 t, K0 n  R; C* D/ M& f

0 P) ]6 J& t7 I+ K3 |
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,
( \6 U. R% R) W& m7 F6 J! k

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

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-22 02:37 AM , Processed in 0.056840 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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