找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 91|回复: 0

什么是LVM

[复制链接]

983

主题

83

回帖

5万

积分

管理员

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

0 R1 J' O7 Z- x2 _6 }7 |, p2 T

2 e' ]( X+ P  [
如果没有用lvm,再想扩容20个G的话,

* u- Z. L/ `0 L
6 g+ w  }3 G8 Z1 s8 Z5 z2 d  i
  R2 S6 C7 [% J2 c6 \) h
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。
这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,
; a( H+ [4 `6 F& `" q: j

% r+ V3 t9 A+ F  J( |, w% Q& K7 P9 u; d+ B" N) w% p
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。
mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。
在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
% q; o7 O5 j. X4 g/ Z
$ z9 @. D' Q  O1 K. C5 K, d+ k

' {4 Z2 }' _2 F2 z4 v
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,
! m; r7 H2 f) W- z- ~2 o1 L

. H5 U' L: B- `$ n0 w
" C8 e2 ]; W, N8 A1 t$ g
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。
所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
" k3 L( A: f, ]: a* o) d
& T/ g6 W# a$ V  y

1 I' W2 F! f- w0 _& V) u
以mysql写入数据为例,
2 m- {  ^" S4 F3 o6 p5 h
% X* h9 u8 z7 J( w: }) {' I
0 m% j9 Q3 {1 ?" I! H- G
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,

1 Z/ x8 V) z8 b8 j9 }; Y% g0 g0 `  }% w$ x
5 g  p! V3 g9 q; B8 e& P& s
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。
接下来看下使用lvm怎么把20G扩容到60G?
4 ]# g. M7 k# t" p+ D% e

# }9 v% d; H8 U) L; e" Z
9 `, O4 H$ b: @
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,
  • 添加硬盘2 {- c$ B4 l0 [- k
  v3 z& B8 B) [1 K

- P$ `7 h) G& N" D% Y& t( H) t
4 X. C5 Y% W  y2 C2 {
  • 选择磁盘
    4 o" H* A. W  i3 k  ~

0 M; N7 _, w  v7 c- o, |
1 t3 @/ X! F# D7 g3 t. N( C- J, u4 A; {5 G5 Y4 D& @% Q
  • 指定磁盘容量
    / I$ @4 O4 B* y8 g# F. x$ q8 [

- C0 |5 ]: |3 p. N5 K: o
: D/ |% n$ }5 l/ _/ ~5 q2 f$ x9 ^
2 u  ]% |: R' b. r
  • 指定磁盘文件
    . A/ _1 S$ D% F% R; i' G5 X5 v
" x6 X* z# e& _8 B6 j' B8 H
/ a8 m! `% m) f0 `

6 U! {- E% E+ p
这样就多了一块40G的硬盘,
4 v: O) S2 J& h
9 H; [7 I6 f0 d1 W

* v" k' i- O9 p; `
怎么把这两块硬盘变成一块?
  • 查看当前磁盘大小3 e+ E+ {# y3 j) m
    df -h* T, `: X7 y4 }/ i

* Z1 g4 W) g7 b: j0 j( _
6 y5 X5 K/ h0 A* b' X- B) r' `. R3 ?$ I; J( z: i# E7 z
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?
  • 查看当前的逻辑卷
    1 B9 }- o+ `8 g2 D' mlvdisplay7 v& |0 T% ^4 f

5 ^+ |; m0 C: Y" ]/ {
; J0 w5 E' {0 q3 Z/ i3 z$ N' u) i; c9 v: H/ F0 w- j" Z0 h: q
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,
  • 查看vg的大小
    2 U/ [% \$ h7 s" F8 upvdisplay7 e6 Y% \. O: {+ r) K  k8 ]+ }

, Z3 D5 ^$ H- _4 F5 d! u: M
1 d- o- A& Z; f9 Z0 F: V+ L2 N7 t; L& C9 y0 L. \
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。
买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。
. @4 m& y4 A8 W# Z/ D: `* E. J5 p

! \* ?' r2 g, q3 M) P
2 v; F% Y) E5 w
sda是第一块硬盘,

6 l, ?% `' Q+ a! N  ~4 c: l" S
; x- {5 i) u6 U, ~) q
sdb是第二块硬盘,
0 w. ?% |  b5 O& y
  d/ U) k3 x: q0 x2 ?3 T  u
' b" J5 S0 N% R5 Q& s5 S5 y
  • 检索硬盘5 D% f& S1 |6 B0 ]6 B7 t
    fdisk -l |grep '/dev'6 e: b+ p% @6 \9 t: @

: t9 U( w5 U7 {+ x  ~# Z# `
, [0 {! K4 W/ g; c% j" u; ?; R. ~6 C, n$ u8 E& s! W' h
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....
创建新的分区
/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
( f) ^# y+ f' ?  z) X1 ~" x

$ m2 g/ M& V6 T
. e: j% g5 j4 ~* k+ o! k$ m) S1 ]

0 m2 N% J9 p) x8 ]# ~! G7 Z6 [8 R2 J2 X% v7 E; X
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。
这里测试就分一个主分区,但从哪里开始?
. [4 z" Z. t: x

. Y4 B2 l" s! C* R1 O
. U- }- V, V% Y7 d
磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?
硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。
坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。
为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。
1 Z5 D# M' `6 }  d, m3 d

4 T; @3 t8 O% |: s8 s4 B& |& A+ j4 J  f
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。
接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,
  • 磁盘格式化: z" q. o/ ?# L, L, ?
    mkfs -t ext4 /dev/sdb1
    ! K5 o" `- X1 J8 E) ?
" A; s' X! [; q  C# N* `/ ~

& U. S: B$ _9 H/ B1 b
6 a! r7 `6 ?! O5 B  l
  • 创建物理卷(实实在在往里面写入数据的磁盘)
    7 s9 M4 Q+ z  w; [1 x0 kpvcreate /dev/sdb1! q4 {; Z& k4 P7 M, E& V; @$ Q
    把sdb1这个分区变成了物理卷,就可以往里面写了。
    . {4 X2 B2 I5 N物理卷交给lvm管理,即逻辑卷lv- z; r- d5 x. ~0 M, ]8 L
! {& k+ I- H" Q) W& L2 m! m

3 K0 i  O8 n, C- P1 y1 Y
$ Y2 N! g5 u8 I; N$ U2 z
  • 查看卷组; E) |% J5 J8 K; _: [
    pvscan
    7 F; Q' t+ ]3 x

. R* N3 N8 j) t3 x. j
/ S% u9 o1 c- C1 g3 C. I+ F& k) b1 y3 r2 o' r! u
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。
/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。
这两个磁盘总共60G的大小,有40个G还没有加入卷组,

/ F3 m$ y6 m; Z( ?! f" [
# d9 Q( k% J/ E+ l* b* J) q+ O$ {/ q
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。
  • 把物理卷/dev/sdb1扩展到卷组里面去5 p  d1 B) ?& p
    vgextend ubuntu-vg /dev/sdb1" |. I1 Q2 Z7 k1 E8 V  l

5 J9 D; }+ A( o, y0 r5 ^) y, {
. O9 ?( V- z  H; W4 {& |% a5 ~( y9 _- I2 q3 j! E# d0 Z
  • 添加成功之后,查看卷组' A; ]6 K8 W) ?$ X
/ s. e. r4 l' X' Y- B0 F  W! z
2 Q; S  N- T% C7 e

" v* W7 P5 Y" n9 ~" L7 ?
可以看到/dev/sdb1已经添加到卷组中了
  • 查看卷组的情况& Z# X: q$ x$ [5 F$ s  o- x
6 r3 r2 f- t, r4 y& Z8 C7 f$ d

9 B+ }: x9 y0 x. m
. w+ V' }& t$ z3 @, t7 P
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。
  • 查看逻辑卷+ S1 W: `/ {4 R) `
8 \% e7 f) X5 Y+ O2 m) k
' V) r6 b! R0 t+ y) ^8 G1 Q

: I) T# K1 H; S: o; j
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。
这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:
  • 按照大小扩容(增加10个G)6 i) J, U. i1 l5 d; R  E
    lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv* Z; I  e2 R# R1 G

2 D; h( J& H3 p6 J0 p2 h4 p! F
8 n; z$ q* ~/ j4 u, B7 F  `5 ]; P% l7 G: D' v
增加10个G之后,这个lv逻辑卷的大小为29G了,

  m4 R" r6 C/ i! A, _2 w( G& s: i' H" q& K  y3 m9 k' u2 A
6 K2 B6 G+ a9 N: }! E( W
还需要再刷新一下,
resize2fs /dev/ubuntu-vg/ubuntu-lv
3 E. |4 b8 L8 p

1 @! ?6 H$ V+ }8 S4 m# p: a- A$ D8 v- Y) s8 z' R
8 h3 m; ?9 |& i8 C/ ?
$ \7 }5 N: o5 h
2 A! r* X; V0 f5 ?# ~# p4 H( ?. b
查看卷组
  W' M- g. Q4 V
* ]. J" K) l5 m. J# ]: w% v

$ l& H% V& D% N% z7 e1 N* Y
空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。
  • 按照百分比扩容
    ! D& v' R( z0 t# N8 c1 c$ R# xlvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv7 y1 I) P$ X: b! c2 V2 U
# ~5 z% H& z/ K% i
1 Q4 J( p2 O5 ^+ w8 P9 K% D
; o9 Z1 X5 o; J' J9 f9 n# D
查看lv大小是60G了,

- k) |7 B& u4 R3 ~1 Q' }9 m
0 x: e. c" g" _! `2 n" k+ A& p
" ~: D+ p  B7 |
再刷新下,才可以使用
- U8 B# s0 N: _) I9 y( p

1 l+ `# v4 z1 m! z7 U
/ W  [% P; P& P  {: @
. F: Y7 c, o1 f- d. H4 A  z; E
这样就扩容到了60G了。
小结
lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。
那写入的时候怎么写入呢?
mysql往里面写入数据,

1 E- W- ~8 O  }2 ]" D
! s% y1 V# I, T) `7 o- b( A4 p6 n6 ~- o, |) n( ]. _8 y
创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。
如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。
一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。
不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 20:58 , Processed in 0.074272 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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