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

什么是LVM

[复制链接]

986

主题

92

回帖

5万

积分

管理员

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

3 k+ M- Y) \: n2 G3 E2 P8 C/ d9 n. S. H$ w) w
如果没有用lvm,再想扩容20个G的话,
/ s4 w# `( O& U
: b; g6 t: T; L% I
# R# E8 x7 p. `1 H3 i
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,

: E4 i9 C5 Q+ l" N* o8 b# U$ ~; H% I
6 z) m8 U8 w7 q
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
. w6 _  K+ f6 R$ G7 W( Z

3 |% `  S- i+ e: }  f' _3 `
$ y8 W, g( s1 J9 d1 ?' R
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,
% e  ]$ p* s) ^4 g, S0 S5 k: b7 s

* E" d: |, ~6 R$ d8 ^3 }
% j! y, g6 Q# ~" t$ X
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
) m( \3 y& q1 o5 h$ v

; J9 ]  R6 _5 B: b4 g
, ^$ T# ]9 P: C9 w* `7 ?. |
以mysql写入数据为例,

+ ?" \5 G/ W+ W- \; X
( u3 B3 L6 W. s
4 `: Y/ o2 a" u! @1 X7 E9 h. ~3 }
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,
& R  r* M4 J: e8 v
$ x, d( B3 J5 r) j! O

, x* l6 I: k( W* E- K
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?

  P) y7 N) j5 D6 [* j$ @
8 @& L& p' t' J" B9 W. t: p/ B' F+ H! r1 g2 B, W3 u* F# q* f
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘0 Y, C- v7 t+ I7 n- [
! M4 _: M5 D! U+ ~

5 c1 i  a' u: K
2 ~* I6 c) ?% S) A- f
  • 选择磁盘
    9 E! @. N) M% {0 Q* k

8 ~5 I( K3 y4 N% Z
: r6 W7 g/ o  @
3 W6 i1 v1 `; Z1 r
  • 指定磁盘容量
    8 t2 a5 y7 q7 q8 E
  @  P/ {- F# o, i
) N  A& X% R- X. F$ g
9 n6 L1 R* ?% o8 D
  • 指定磁盘文件2 r2 \# a) j5 q4 P: p- A' r
% i: p' d* D; l' T5 V& d2 g& K

8 j+ U& z7 ?0 D0 J& H( U
+ C" v. U! j6 @' Q+ @. y6 _. b6 S
这样就多了一块40G的硬盘,
1 V* d. l* T/ W& D

- M; o8 N* L$ O. g, t& f  ^# a  X
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小
    / V7 l$ k0 _# J7 Z6 U4 s) mdf -h
    ; L+ L: J. U1 {4 V

& D6 @+ B5 L3 @- _* D2 J
* I4 K4 \6 X3 \% {' |* p4 `. n6 T5 u" F# ^5 M
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷* C6 m1 @% _- H& x' B$ t8 W
    lvdisplay7 e7 G" f, C. e( r/ l6 T% X$ z) m6 V
1 T! I( ~8 b+ b0 ^
) t) F8 W; h+ g) E
' ]# B/ E- T4 W+ X) T
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小
    0 f$ g: _: n( P) x0 e1 jpvdisplay2 F3 w8 `  w& o& _" @, w3 f% b

5 L# u4 H0 b9 m8 ~2 O/ ~  e
; g7 f& T8 W8 d- D6 s5 M
$ j  g) F+ j, p' A" h
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。

, g+ \  Z! `  Q
9 K/ Y7 o1 h0 v7 G( M4 ?$ [- X, @2 ~% S+ X; {/ o6 s: l/ J
sda是第一块硬盘,

; ~4 N* T7 ?$ V% T$ ^- |  O8 f' X# ^( Z) A5 N! Z, \
sdb是第二块硬盘,

9 [& L9 l/ q0 d! s
8 f7 M/ B2 K- E1 u9 @
1 `. I$ x2 }/ T, A' W) ~7 B! I
  • 检索硬盘, d5 c$ c0 Y4 t  y1 B' ?
    fdisk -l |grep '/dev'
    , ^& s1 Y7 I+ H# x, D$ ]0 v4 V6 J

6 K( `. y8 k+ e3 {; Q; @# b
. ~8 a) {! L1 K4 R1 K1 u' {+ L* L8 }% c) k( a
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
: k& d8 F- T  K; |4 u4 z# J( Q9 I

9 p1 s8 y1 ^# d4 \- D# y; S2 ]" T' [# K% C
4 q: S0 @0 r$ F) y# n) r% f
6 v# L, `1 ]. ]& P
) G+ n2 N# {( k: K( C
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?
& t5 c1 l4 \8 n0 k  C, Y6 E
3 R. l5 `" I( Y6 g, I
  j9 ^) Z9 q, A7 @! y
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。

; t9 `" w+ B# H2 t4 f, K
2 y3 t, i- o7 M; }5 R: J! f. H" h$ |& b0 y
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化
    5 a3 v  ]* w, [. i1 s2 q4 m/ j4 ?mkfs -t ext4 /dev/sdb1# p( |2 Y) B7 X+ n
9 }9 Q+ M7 o  N) m: Z, Q

8 f. G  e( L: |( G; S3 f6 D8 V) y: y8 x$ G# ]  Y5 o7 `6 b
  • 创建物理卷(实实在在往里面写入数据的磁盘)4 ~# j/ b: x( L, ^5 J# D9 C
    pvcreate /dev/sdb1
    % L* |) `4 u9 w2 k8 E  w" x( k把sdb1这个分区变成了物理卷,就可以往里面写了。
    " R; D& Z, N" j$ Q物理卷交给lvm管理,即逻辑卷lv( ~% ~2 `; u9 L, T; d: L* }, W
. ]# K4 I2 E' D8 l. \

% D) a% Q4 A- s1 g8 p7 ?
7 \6 |1 i+ ^, U
  • 查看卷组$ ?6 y, p# I2 p/ O9 E
    pvscan
    7 D) F# X5 J* n9 o0 }

6 [/ C0 Z" b! l/ k4 g& r' q- N9 x
8 C4 W9 r, O( O8 b& y3 H/ t
% n. ~  ^! r3 [8 p2 s" @
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,
6 W3 S+ b" j5 Z7 h

- z4 i4 l* y! r* A& {3 y0 U' G# G
. H( S" q- _4 w) `
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去7 e% N7 Z, ^" ]+ ?
    vgextend ubuntu-vg /dev/sdb18 u. G6 P: L; r

! w+ r) n7 E* F* ?/ b. |1 T- _: W/ s0 Y6 I  `/ w5 u; g' H

" A' E7 k% t7 s" `: Q- v2 c" S
  • 添加成功之后,查看卷组" O0 {' _! _4 E# x  d" p: j, b; q0 r9 W

- |" m: U' M# g" I6 a
% {9 l3 w( k- h  V6 A9 A; r0 F2 v
9 |' t* [2 {0 I2 D+ A% I
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况& h  Z8 H$ }7 W/ j! X' {

- E1 n" F8 L( {3 F
* h6 W6 G6 m' i5 {& z& f/ B( S8 D* K3 K; |& T: C& B
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷
    ! [, I6 Z% k; r2 k7 {+ ]

: D- z5 t; n; W2 ~4 j: s  Z7 ?% V+ W
( a/ Z8 `$ a2 L5 }+ [2 g
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)) N0 {( J2 _2 X
    lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
    4 ^( F! u4 W. H: j# U
. \, t/ i# }$ ?8 F# g
# z& M& x' z; w

8 ?6 @, ^0 s) v5 o: M$ q% _1 `
增加10个G之后,这个lv逻辑卷的大小为29G了,

7 F( n$ O2 u: E/ R, H
3 H7 v% C) O% u$ S$ ]: Q4 n7 S* j4 L2 ~$ l6 K3 n6 P' v
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv
! T, d' b+ C5 ?, H  n: R5 v
& [& A1 b  r& Z2 r- s- t, L
1 c4 g  I: C9 r( a% K$ L
+ A7 e$ M( S; F9 {8 P" o
3 ?. D. D5 j; H; Z$ [2 V

* c( d# I- |9 ]
查看卷组

# {" x& h6 {$ q+ V
) T$ n' g4 U  D( B: d6 N7 V
/ Z- M5 q% O. w: P$ X) ^3 u
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容) O3 `1 w- o% O: I; ]; l
    lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv* v1 N' C% n. G7 e( p7 |
6 ?/ y: ~$ U& G0 t1 {0 S
& \# o  t* [4 R( n- [

- ]# a; G3 s1 z8 Y3 i
查看lv大小是60G了,
; m# O4 z0 {: @. o6 ?. `
, C" V2 }7 J& [5 M7 N9 k

, L# P! B1 R' c3 t$ C
再刷新下,才可以使用

. ^, r9 ?) Y1 F' _; W7 x
9 D, v; y# ?0 Z5 Y) a( y- Q4 s( ?
; N: l! U" P& c1 E5 w2 J
- n5 T5 z$ a$ z  b; R
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,
( C7 D$ q% X7 i5 ]# @
' ~! N. T  w" q  L" Z! m

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

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-22 01:03 AM , Processed in 0.096110 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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