找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 90|回复: 0

什么是LVM

[复制链接]

983

主题

83

回帖

5万

积分

管理员

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

5 `( y) [3 v" R8 _0 {
/ b: @0 w/ \. ?* m; M% @
2 h$ F3 e$ V2 R9 ^5 x
如果没有用lvm,再想扩容20个G的话,

3 o( p; e) C8 E4 S
. E0 t2 I: W, o2 Z4 r$ a! h1 s5 F5 [6 Y, j6 ?* V; T
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,

- p7 K' \0 k$ \9 Q* W! ?0 C! u$ a: w, Z* J5 v: W: h' U

/ m  n' r4 p: s  \
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
. h( W( F& m. l# W2 c2 p% p+ Y. X

2 b' V3 n, ]7 I9 q2 u( ^5 n0 y3 U% ?2 m& m! l
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,

9 x% r9 f& ^: K  }$ \. N
  D/ q0 s$ c, a: i$ D. u  y% t4 J7 _/ O# a9 Y3 Y+ |, t0 U4 c* e
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
/ B& Z  j% K# S% |* w8 H& O1 _: |
: @9 C9 D: a: J3 w5 T

& D7 t1 u' O9 K  ~) l" X" {/ R
以mysql写入数据为例,

/ [0 g; V, a# V" S$ G9 `0 w  k0 e  `0 I, ~0 ]' {" r4 m& Q, U" L
; q8 E/ y( P; K6 B4 p5 s# o
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,

- q+ g9 x- P* x# O
% `" \4 l' @5 J8 j" a) ]+ Y2 e1 t/ c# p5 T5 C: d& s+ q7 \/ u
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?
* \" p, }, F) u( F1 z( k' \& E
: g" }9 ]. |/ n! W% I# H* g6 F
2 @; x) E( a7 ?3 d5 Q" n
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘! y7 G4 c: ~: E

$ e1 i% c9 y& t% h8 t, z( B1 o% x! L6 X3 J  F7 Q$ [

1 Q  ~4 q; Y. E" G. Q6 P  s
  • 选择磁盘
    ; U/ Q+ O: [0 j& w; b- n; C

7 d" O) |2 p8 C! E& ^. ]1 n
! g4 J6 R7 u) q3 m! u
( s; |7 x/ a; m5 q
  • 指定磁盘容量
    * Q* T: w: [9 R1 o9 M+ U# b
' }- A4 y( f8 q2 D* Q+ W
9 y; s# `- j2 r$ Y

& a5 C* R1 |! J7 X* s4 v) ]
  • 指定磁盘文件5 y4 P  n9 F0 J4 y! S, C& t0 c6 a3 h

' }/ b) m) S3 S: K8 ]& R0 \- i% ]5 K! ]$ [: J. c$ S/ U- E

+ X+ A- L; p7 [+ Z3 N2 [! g
这样就多了一块40G的硬盘,
: R5 s, A# I4 I% w8 Y- F

$ \3 K: l& ~* @0 X; G$ k; l% P/ {; |# ^0 b
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小: r. M  K; \9 q' k! l8 ?5 [
    df -h
    8 A  r. F, o. B0 V. S8 T  }; R4 f

2 [% {/ s4 x' C; ~" k6 e3 q% W8 T8 L3 ]$ k" _
( y3 @- H4 Q# [7 C* \
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷
    " Z  H* F- V- ^, C8 X% nlvdisplay9 W5 `& B. w+ ^6 e, _, ^2 [% m

( u7 u( v5 G' y# \: Q7 [; U0 H0 I: W$ ^( K9 f& D( N

5 u8 i% U, ]# j" c
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小
    " Z# L; N. F$ s$ T' h& b: Cpvdisplay) K; _+ q9 A0 t* f" h

9 W: _. P' P+ }  ]1 L* M' A
  N+ ]: L, Z+ ^5 t. a, h3 B
0 u# l1 F4 @8 W4 M2 R7 E: D
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。

4 e4 U( b. G; M) d, E- y% ?  e/ E, _: w3 N

% i, E% p* H: U# X! z; r+ ~  w
sda是第一块硬盘,
7 f$ a1 K/ ]. s

7 M: V& u* a$ q* l
sdb是第二块硬盘,

# z# m) u  X2 s) a0 A! o& c; ~- B0 w( O9 `
% v! {4 u7 l% X: V9 G
  • 检索硬盘
    8 i1 p8 R6 X  L7 ?fdisk -l |grep '/dev'2 n. f* r/ }/ b: R: V3 O

: F# b6 e* _- D9 h: Z/ o( g% ^3 k; ?1 u

1 c9 W& C& Y1 W
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
7 @" d1 b" I2 A* S2 N. o" ?
7 P! X! Y) _: q4 {, C2 w# a
- ~* y7 P) }% Z
7 x) M$ S9 B! ^( X7 n( G
; N6 Q9 W9 |7 [/ n& J8 ?- E  i0 O" D

9 E$ O9 ]" i$ C1 a, g3 \, y
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?
% O" W4 n  s6 G  J' q
1 ?. K  e0 E2 Y* B7 J1 t0 m
: k' J* _# G& _5 s
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。
# `, V$ l* U, }! O$ C

, o, F" ?% F/ g, P6 B3 k6 A$ z7 r8 H% m0 {
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化3 ~. q- C5 \+ K; H
    mkfs -t ext4 /dev/sdb1
    / B8 e7 R9 C" V& b

  E) q" J* `2 N  ?- _8 }. {$ m7 m+ _# z& b! V" K4 ]$ @- n

# ]6 O6 t1 Z: B3 L1 M
  • 创建物理卷(实实在在往里面写入数据的磁盘)- i- w% C/ M' ?) I8 G" X
    pvcreate /dev/sdb1
      ?) h  |. q; L* X把sdb1这个分区变成了物理卷,就可以往里面写了。0 U" a. t9 p2 f2 C$ N  H
    物理卷交给lvm管理,即逻辑卷lv
    + r0 k5 h! r/ ^5 M5 [) F$ \

. o$ A# t! L9 S, P
+ b- G) i9 B, x! o! Q- K( Q. j( d/ T. }# o
  • 查看卷组( L4 D( C% d( s6 Y! L
    pvscan
    6 H! t! m2 \" T" N4 \
8 A2 \, t% p$ Q9 \$ y. H

% G6 D( [1 B3 M& G- ]1 J
) `1 `/ k+ C) W7 S) e6 M1 U# e' ?9 z
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,

! k! X  Q. G" T0 O% `/ m. T% G. `" j6 m  M" r8 l

4 G0 u$ @4 e9 c
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去
    4 c5 d3 ~3 [% V" m+ D6 b0 Gvgextend ubuntu-vg /dev/sdb1' R" Z4 \3 C5 g4 q9 }% B

: A: E& ?% \- h
8 f% J3 S$ j% L4 h2 H
3 I+ o  t  J& @! B. m
  • 添加成功之后,查看卷组
    4 X6 Z4 G8 L/ _2 T8 w3 i, x
$ p5 T; s. U( ]3 Z& j4 E
. N6 l3 {6 g) Z& N% s
9 z1 _( y8 n8 y6 k& c) Z' |' ]
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况! T1 P) W& f! u1 C

' }/ M/ P' o8 c! T' O) l2 r" V. C' c( G( ?- P9 j

/ t: m" Y; y3 O. h! i0 c
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷! q: M4 _  I" T5 x4 O
! C4 s4 [' c/ v9 m! `# J

+ S& }7 g; K. M
$ s4 [2 A& D' Y  T9 `
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G): k  Y5 \% a8 f, L4 U1 R6 N
    lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv
    % l5 U  v- o8 O& _

! R% I5 i8 [$ I# ?0 l! P
/ E2 V8 b6 j4 C( ~, K, }1 D4 N; [" M$ k
增加10个G之后,这个lv逻辑卷的大小为29G了,
  C# q  X! b- D3 u9 j! t

1 N3 m6 j; {! Y! X9 x6 C. ]( V: O
, u; z: q: g5 G' M
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv

+ ?1 ]4 Q, Y1 A# }* }( J% U. g, b! P( ]- v- j- a

5 A% \1 U* C* f/ O
* Z& V/ `# n$ H/ S" u
1 I" [& }, U/ u. a0 n  _8 X, _3 b3 h' B* c
查看卷组
, o" v8 R+ g( @$ ?

2 E1 V6 i. g; b
5 e3 ~* e: f( R. O7 Q
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容
    ; o% t2 F& ?# |. b7 Z' Flvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
    4 b# L1 k% A# l. t+ I7 p6 c; h: F3 V
" x0 W# Y- c& Z4 T
( J/ `/ j5 x" h7 ~

: K* J) N+ z* L$ t0 Y
查看lv大小是60G了,

- [1 X& c9 W6 I  C( E# U$ K1 v# g! E) S6 T. }/ M

+ _, |) h" v9 ^" j& \
再刷新下,才可以使用
+ U, z) O5 p9 G

' N9 b2 j) x% n5 Q# z8 D$ W9 y6 [- M* k7 Z! Z8 F
7 d) }3 u1 [, n
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,

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

本版积分规则

Archiver|手机版|小黑屋|返回首页

GMT+8, 2024-12-23 20:27 , Processed in 0.095537 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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