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

什么是LVM

[复制链接]

979

主题

90

回帖

5万

积分

管理员

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

7 Y8 V0 g+ b0 Y4 m# S; J
如果没有用lvm,再想扩容20个G的话,

+ v: t; n& A4 a' s+ t$ ~5 i
# Z8 C. b& E" \8 R$ y) J5 n# x9 ~) t5 Y9 Y3 O, ~, r9 n
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,
0 z$ _+ ?! L7 f5 H; v1 H3 E" ^7 |

& C$ K# @' s0 n0 A, t9 d1 \
3 M6 Y" f$ Q/ S4 b
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。

( R5 o* u! _$ U0 J8 ~- v( `9 N9 P0 M. g, R

7 n$ h- O$ J$ A$ r
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,

2 X: B8 e' @% g- d1 r% m" H) X2 j4 Y7 Q4 {. G0 f* [& r

- C/ U" d$ I( E# `( s! |$ U: e
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
7 k" k8 E7 F+ Q
$ T* V8 g% [( n+ r/ I, ~0 {' w9 {& C
. Z+ [  }1 j8 ^
以mysql写入数据为例,
6 T& @0 e( `, x6 ^% H3 T* j

' a+ u) d; n: u# m/ O" T% J& x% V/ A$ b# T
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,

. `- ]. ], U( b' P! s
+ G) E6 Z5 O  X  V1 G
, M2 q+ Q1 T0 d% j* t( ?$ u0 C
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?

9 l) X1 U5 U7 L$ D% j* s- U
3 o6 i$ F0 G: I" {* I$ o- Y7 R! W. d
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘& W: p8 M7 E3 o! G: D
$ W0 P# g9 B! |/ Z
8 C; b9 i2 Z$ W* a
8 `$ y; [$ A; H9 R& B1 ]
  • 选择磁盘
    : v1 Y; ]1 J* n# G' M, b% I6 B
; ?5 b% R# Y+ _. b

! [+ Z8 T7 s+ _" j! |' b
- F) @4 _, j# |* U8 P2 y
  • 指定磁盘容量
    / D( v3 `1 Z- {, q- Z
! F& u! }$ O) O  \8 {: }% N2 j
6 e' \& J( m& @# ~' Q0 @
2 T& X2 X" c* ]4 M0 ]7 T
  • 指定磁盘文件
    ( C7 s7 T& P* g& k+ I0 ^" o( X  f

, P0 [! Z. X* q3 n$ ]
8 {. v4 u0 w9 I  Y( U. n# v2 [- @3 n8 D- I  d6 y$ _
这样就多了一块40G的硬盘,
* _$ Q+ |9 f* O. m8 C8 F; t

% Z. R* r/ H% x6 t5 {2 L" o
+ X; T+ X, S5 x4 x( E( H- y0 G
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小
    8 k3 W. S5 V. z% @4 N% H, C% M) w& Zdf -h8 J4 ]) q; v2 b1 W' y
7 L' y9 G8 n0 c( S9 B

  K6 j! K) I2 B' e
" z6 v9 L+ ]0 U3 I# D' c  E
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷" E# w4 u4 d. x/ D, I! S. d3 V$ x# e
    lvdisplay
    , a6 @: s# [. r. z' s/ ^. X: I1 d
9 J$ N& a' _$ [3 ?
- D3 R7 s- g# \- v+ z1 T
4 M$ ]3 i$ n/ n  s0 c  c$ R
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小4 ^. @) @1 J% `
    pvdisplay* |3 V% {2 G  P  P  y. A5 e7 r. U
4 Q5 }8 j8 F! }( t8 @

) v) u# s! X- g+ D( J# u9 Z" n2 y, a, q+ B
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。
" B7 \6 r" m7 c. ~7 F# s4 R3 J2 K! V
0 J; B+ V2 m+ Y$ Y/ ~# N/ F- h
) T5 G' @+ O' F  y
sda是第一块硬盘,
- K! {  K$ c- @$ Y9 M" ?

) l' @  u$ x' R5 P7 E
sdb是第二块硬盘,

( Z* s4 T0 ^# Y3 n0 \( ~* C6 ~+ y1 ?" _2 t' L3 |% J; m
8 g( U+ M' A3 q- R8 z& ]# H/ l# ?
  • 检索硬盘
    4 \- D+ `! r) _9 @0 i+ {% w+ Ffdisk -l |grep '/dev'
    7 M& h4 B- A# f* H0 h2 q) I
5 P' `  |/ ^$ i( ?

" `$ B7 r# _4 i0 p1 [4 Q1 c5 B. U$ z
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
" \) l9 H5 K9 P
1 U2 v! z+ w$ l  |& L- [: T

0 h( b/ d  C% S- l( |& P8 m3 p
7 K2 k# I# |5 ?$ F
, ]: b: ^& s( T  d# S
, o5 U! P9 v: j" s2 M
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?

$ T$ A8 Q4 o) }: c$ R6 F" ]4 U; T6 R( F% U* u' _
7 h( p  p7 O/ I6 H
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。

  o! V6 i* n- _$ T
# X; ~8 U2 J& C& l) D9 A  j8 m, y4 y
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化
    " x7 W' e) }* Wmkfs -t ext4 /dev/sdb1
    & O  ^& l2 K/ X! Y# o
3 r9 g: ?- }% `" E$ T
5 p3 L: z- l! [7 e, \

6 z4 B: F( s: R; g* G2 T
  • 创建物理卷(实实在在往里面写入数据的磁盘)
    : S5 g. [& r/ B% E! M7 npvcreate /dev/sdb14 x. V+ ?7 S2 M0 c( i
    把sdb1这个分区变成了物理卷,就可以往里面写了。- ^. |+ ~1 I0 m
    物理卷交给lvm管理,即逻辑卷lv
    & K7 w! d7 S7 J  a% Z

8 E, s! Z% i4 X" M
- w& q, ]$ Q) x* y: x$ v3 g. A3 ?# H# N3 C
  • 查看卷组
    ' ~1 Y: [6 y" G7 Opvscan
    ( U1 [& p% @! o& K; W

5 B" {3 `  d* w- j
$ j4 k4 q# F+ [
; c6 U. C* _+ K
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,

- V/ |2 E, A7 Z: `: Q5 `2 E8 M- E* ~. F) _: g+ J
5 F: X+ s3 S9 U, S  F2 y
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去# K2 l1 o0 W* T/ B% _3 P3 {
    vgextend ubuntu-vg /dev/sdb1% k) @( Z1 w! e
6 B" k4 P9 c1 b! s6 ~

8 Z  u; J4 [7 d7 ^) K
( f* ^) f1 i7 x% K! @" E
  • 添加成功之后,查看卷组1 l$ n. G- _# B8 r! @  b
) @. ^3 n! W6 @. a* ?8 h

' D0 ~7 E- H8 ^: W1 q; H+ K9 I
. F* w/ i  w1 S8 e- A3 A% f0 w
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况' G) ]1 |" b3 E3 p5 \, t& C+ S

" ?9 R' _, `0 l5 z1 J
- E5 F$ `$ u4 B7 \4 ^3 }7 H
  ~/ R: N/ J* j  W: h# z
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷
      r8 R3 l6 Y* y/ R8 A

" J" t3 S8 h9 S  n7 X8 _* Y, r# c
. p, ?1 X9 L0 U  V2 r* @5 A6 \( V
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)
    & f: ?+ R1 ?9 Dlvextend -L +10G /dev/ubuntu-vg/ubuntu-lv8 I' S. A" _+ D, x- A0 }8 t
4 Q/ x" O. U) W. J. _: v9 v
" H8 j* e3 C4 e" v4 e

$ o% Z+ Z) W# Y' u; v' _
增加10个G之后,这个lv逻辑卷的大小为29G了,
( e  A- B+ j$ G& k5 m5 S: N/ ]0 |

9 i4 q: n, V  C, d# N7 Z8 f1 v8 Q$ u( I- @) v  W. m* z& K% }
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv

  l( B& I$ D0 X+ m1 c3 r
4 ~& ~7 P$ x  m, b
+ I( [& ^) l/ m3 p  A4 \2 Q5 X
0 ^+ x. _  {( f  v5 r$ N, ?) ~
2 K. _3 x& q7 G
9 v% q% `- }4 ^2 h  w, A
查看卷组

5 I. t$ e# C: q2 ~4 |7 ]2 U0 t+ Y+ D% H: ]5 N

. n' r/ V. S. \7 `7 ]
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容2 h; P4 @0 m) c, d  ^0 I
    lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
    % t" Y4 F6 a  i+ m4 {! Z
5 [* f6 w2 J& \$ X  Z
8 a. \0 a6 C5 {: N
. i5 @; d( k' J5 I* N- j$ X
查看lv大小是60G了,
+ R$ \( q' _* N. ]
$ z7 k2 K2 m, G  }3 S

8 n( d* F3 [( K* Y+ p
再刷新下,才可以使用

* l: W$ ^. o! C. b* ]
* w2 y* j8 f; e) A
8 d6 b) N  B. W! \! o9 d4 I0 Q4 A; z) S0 y' W' @
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,
: j7 U# ^4 j4 M! I' O- D% Z

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

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-2-25 00:03 , Processed in 0.069020 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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