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

什么是LVM

[复制链接]

985

主题

92

回帖

5万

积分

管理员

积分
53561
发表于 2022-11-1 11:29:43 | 显示全部楼层 |阅读模式
LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,可以认为是一种磁盘空间的动态管理。
LVM必要性
如果虚拟机装的是20G的硬盘,如果不用LVM,你的磁盘是无法扩容的,不是说不能从20G变成40G,因为可以通过挂载多个硬盘的方式。
比如mysql挂载到这20G硬盘上,
$ Z9 c; B( u: t  x
% @1 [% m) r1 s( |& z9 y6 Z
6 Y/ i9 f. g  D% k$ V" _
如果没有用lvm,再想扩容20个G的话,
: R6 L8 s3 B' d! N0 n+ Y2 f
) r, c/ T6 s8 s1 ~, E& v1 @7 U: }
" S4 u) S5 x' M
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,

: r1 _& k+ o( Q( ^
: w; U: I$ C1 v) c+ v) y6 f; Y5 Y( |% ]9 g4 i# W9 m
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。

! s- o( N4 c8 H9 m3 S
# ~) v/ s5 Y% h! _
* T1 T! s: {1 F% `' u* e
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,

* z) B' A2 p+ a
$ R' F4 U$ M* q5 L! V- C
' c4 t9 d4 T; H: Q/ n. S5 c' K
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
6 f( x. ?$ U9 E, w

2 Z; m2 \7 X, \! d( @+ y% `' n4 M/ q2 C: A; s1 U1 |
以mysql写入数据为例,
, q$ i9 j( n* n- r, X2 U& L/ o

$ g. y0 _5 l1 R0 S) N4 i% f  n) Y6 J, P. Q0 a
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,

" b2 y' B9 c2 E' X" A6 J/ k
6 O3 U- a; |! f' o- p
" j: v; q* V, s, ?+ A
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?
: M" s0 o0 h3 w) I2 k0 g, ?5 k
, `. M7 R- B- P5 w/ `* c9 K
: [) C; u1 n0 q' m4 K7 B3 h- ?
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘
    ( B1 @" \5 G% n# n9 j( V& ]+ f
8 l7 d4 o) U4 I6 z8 k

% I$ F2 W! u% I9 n# i7 A6 S/ X; t- i* P+ P$ t3 ]
  • 选择磁盘
    % }+ y$ G! T) e2 p# A! f

; X8 g. p. T$ ^/ z; v" a7 ]; V# y% d3 T9 n; q

* O5 p/ C1 j0 r& c1 ^4 G
  • 指定磁盘容量
    6 [* L. Y* r) @: W+ Q

# l: l5 W( p  c# N) b0 j1 }$ T0 R. V' ]& ?! A4 O

9 e% ?* V0 r/ ~8 U" L, y
  • 指定磁盘文件
    * w7 x9 U- G0 W
0 d# `& ~# Z  B6 Y; m9 w& G

( ]# q% g% ]: S8 ?( h) }! W/ V9 m$ f# j5 A8 j* c4 D, O* j
这样就多了一块40G的硬盘,
' r- x& [1 l. a: M# b  w6 L

& N: w- F, _8 i* d& H& c! _+ S$ u7 x% p' J, T5 ]
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小
    * Z+ q5 A& N3 u6 \0 j( Jdf -h3 I! s% ^5 h* I1 G1 T
. g: f7 j( N5 j& [' O6 D

$ q1 X: N8 c2 U: L) i- ^6 `: W
. ]! J0 w% }! D, b9 d- o" C* g
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷, m0 ~8 g  D  M: g) y
    lvdisplay+ F) g3 n! ?6 x3 S2 x2 e. o

& m7 ~3 s8 \% G4 ]6 l+ x* G) A6 L: k% Y% N
: ^- B8 ?5 ~' O5 b
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小
    * \! T0 H1 T3 ?  G+ J% Hpvdisplay
    & ]# h5 M/ W; B0 L  Y
' ^* T7 T, B- k7 q. Z

9 {' ?4 t/ M5 j
0 |1 u! e5 S' V, d
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。

' S$ F, @, g) w
5 N3 j3 i0 f! i, d2 t: I# w, M9 F0 f. e7 y# @
sda是第一块硬盘,

; q; F/ ^2 z6 R4 T3 N$ t$ L# l' G" e3 h( ?4 n
sdb是第二块硬盘,

# `% y. q2 f9 p& E, b5 V# a4 `9 r7 E+ \) s  a8 |1 M3 j# E0 S

8 O- Y2 m, f: [* ~* L7 U
  • 检索硬盘% q& F9 C$ s/ {) b& U2 ~
    fdisk -l |grep '/dev'9 G( V; X3 [8 d8 l0 P6 F! L

2 D6 f- n! L6 j9 m6 a& l* z" U, W) j$ X# `3 I

- Z, o+ ?; X: N/ [$ u+ m& O3 r/ L4 W
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
, {0 U6 B/ t" ]5 A! P( t# U

  q9 g, h" e2 k6 L* x  k
  M* {! j6 C- @% q" ~/ y+ x* O# u: E& C: I  Q6 x
% B/ e. U# R2 p8 Y8 G: M
  t+ {- F- Z+ ~+ F2 c
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?
4 O  Q% D1 m( A" T! d! ?; f
  R# n- Z; u  ?0 e( I& V) x2 a1 A; G
+ l$ _4 X! E3 m" i
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。

1 z; s: S  q& _/ k9 j3 V- I( }3 y
  A2 k5 Q' G3 ?+ i/ u. W3 Z
; l7 ?; Y2 V- ]* s0 }
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化9 W4 l# \$ Z  q' T' `. C7 f5 {
    mkfs -t ext4 /dev/sdb1
    ; x6 a3 E1 n2 R/ ^9 N. N' A

, m+ U$ V6 n6 A! @0 N
$ X. P0 [8 U( B. R6 z2 u- X: J, U1 g  c! [
  • 创建物理卷(实实在在往里面写入数据的磁盘)
      g& R5 W. C  O+ {pvcreate /dev/sdb1/ b6 }( e! P2 `' E. I( I
    把sdb1这个分区变成了物理卷,就可以往里面写了。
    ; @7 {5 ^4 v7 E: `$ ?+ M物理卷交给lvm管理,即逻辑卷lv$ Y$ [9 t6 s" f: o0 ?
4 G; H0 k3 ^: |$ p4 c: t1 i
5 X* W( T0 p* o$ [+ c8 \

( w! n* s+ e+ a! v; e, y$ n% ?' g
  • 查看卷组- c- u# B9 p; C5 L: k  B
    pvscan
    9 x% _" o% g  s) O0 h+ U

/ H3 V" A' b! {6 O0 F$ [' w; y+ s( X. o2 f# X$ @3 k* g
* m  A" E* C; f7 x
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,
8 P1 E& R/ @; Y# |! N- j  q
& I: M: Z" V9 ?! n
! `. w7 k# O. s0 ?: L# T3 Q2 h! o. l
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去1 P+ s7 k# V9 E) D1 Q2 A
    vgextend ubuntu-vg /dev/sdb1  j$ `$ y2 b3 W& e6 c7 `$ m, }  R
0 Y/ `7 }) K, R
! _" s( Z) h. ~* D* \
9 |% k5 ~4 x( |/ S
  • 添加成功之后,查看卷组
    " r+ J& ^. D/ A: ?) H( V/ a
3 g# Q& B% G1 Z1 F

% Q" K1 ?# a1 x8 C( N2 H& ]7 l( _6 e" M/ R% r2 P
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况2 w* |9 O7 n( J
$ h# m( j: z  L
& \+ q0 |: v  `' G) e7 ~

  h( W, N' g) z  d, y# e
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷4 ]/ G' r8 G0 ]0 `' M/ [) z
# M+ c6 ~/ X2 f& P, d
. V% k2 [' I2 N3 b8 W
, h* T! a; O$ D
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)
    8 Q' A5 p% C" x3 |lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv0 ?% J  `3 v$ j
/ s% A* t0 d& _
( Y2 {5 w: M: o0 n- m) d7 v* O: U
: q: V' `0 H* W' O0 `7 \& N7 p
增加10个G之后,这个lv逻辑卷的大小为29G了,

( _3 g% U0 i9 u7 Z1 w2 k) Z: t5 f
( s; o3 {" _* Y8 o
* q- C1 w  c! o1 I0 `& t
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv
& e3 ]1 {8 q; R/ f, B" I
+ I7 i9 q5 |4 G: T
( A9 S9 N4 [! E# c, h0 M% o  |

  @+ o) Y; [! }$ z/ V' e) q7 E, I( u4 P- v" a
: [3 s0 ~3 `/ y' ^) r* y3 {/ s
查看卷组

0 t" y1 |+ Q) \; I) I2 f  T1 M, D' C# y( c" R; x3 K; g

! p8 V" _* T5 u" k+ h
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容
    : j3 M1 P0 E' i# alvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
    2 E- O# V" i5 I1 }( t, O

+ s8 r. k# Z# _# G+ o; i7 m5 z; o' O
3 {) y3 n* B5 r/ w+ a
! l1 l& P+ X0 a; }& g5 h2 H
查看lv大小是60G了,

- G' P' D7 ^. @7 l, |7 @8 w
6 t& G8 n; Y- O& Y1 j1 ]1 p1 L0 N
再刷新下,才可以使用

% N6 e6 z: X$ w) z$ C% |" S5 p0 y- ^: c2 W/ _; D

0 x% h6 v. l1 K$ T- f- @- E& C, B7 @5 U) I
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,
& H4 C/ B; E: y& s
0 d2 L$ G, D* X" H7 k1 e/ v
4 m# I( Y2 s6 l6 v- i5 D/ _7 f
创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。
如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。
一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。
不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-11-5 01:57 AM , Processed in 0.093860 second(s), 22 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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