|
LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,可以认为是一种磁盘空间的动态管理。 LVM必要性 如果虚拟机装的是20G的硬盘,如果不用LVM,你的磁盘是无法扩容的,不是说不能从20G变成40G,因为可以通过挂载多个硬盘的方式。 比如mysql挂载到这20G硬盘上,
, k# d9 K2 L5 I( J/ `$ d ( _; c! L$ h8 }- n" ^3 K' x
7 q6 f, E& u7 _) ]0 b: ` h. V如果没有用lvm,再想扩容20个G的话, 5 S; p# h! U ~ p8 ?# d# o( A
! o5 T* k" e; O5 ?" H8 R/ n; a
9 J6 y5 q0 w6 I等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。 这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写, % G) G3 u1 }' }! z/ h

# Z) s3 w2 Q3 u0 I0 L- l7 g
1 r R O0 `3 w1 J9 J9 y2 V' Amysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。 mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。 在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。 Q" W" y# E) [' V) K
$ @" z+ d8 E* T) W q
: T2 ]- {1 _# G* ]2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,
" s& N& s6 A0 u8 U' } + `5 o+ R$ k! p2 c9 n
; J' ]1 | O& g
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。 所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
' ?4 B7 }" s$ k, ]
: W) E0 s* I7 u, h8 `7 H. i
4 W+ l% u' B7 x3 a2 A# x& q以mysql写入数据为例, 1 }! E( ~. ^$ K3 I; z5 N

( Z/ k5 t5 D& F2 P* m6 x3 {2 n
6 Z, S1 e- g) x6 b9 t6 ovg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷, 1 p& W( j ~' D& f4 I$ _6 q8 E: j( k
9 n# i+ @1 Y- Q; t4 p$ w4 y
3 @' j7 g/ W2 m+ T
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。 接下来看下使用lvm怎么把20G扩容到60G? - c# Q+ ~5 e' |" G2 D
, |" A4 Y p% P1 ]8 z
; M! G3 L* V: i虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘, - 添加硬盘7 S. x0 L$ ~( ]1 E/ q9 j
3 @$ ~# q$ m' F+ r& t" p+ [& m# J
, r! g& i1 N' _
; Y6 z! p# g4 d8 c. n4 b% _+ L8 p- 选择磁盘4 I: N* K' O3 D; ^! J
- @/ m" X: U7 V5 R3 _+ H' K v7 G: ?
* w" ]) V6 l' w
6 F5 M8 Y: d* q% b$ I. H2 z- 指定磁盘容量
) W- m; i4 |+ n: d / a3 p0 k! u4 i1 {' t& ~" Q: B
% I& x+ S. f2 v: U' V$ ?, H
: r$ b+ r& S. M. m3 R# t2 A: v R3 g: |/ @, u' \% n: p9 t
3 ]1 }: N$ U, V! P
& D2 P. M e. g, Y! d4 h* d这样就多了一块40G的硬盘, 8 f5 O8 p7 e \5 h* K9 z
% b: S, |0 c3 k1 a/ Y/ a, P1 R. R
( U5 i, z. e% K* N1 ^怎么把这两块硬盘变成一块? - 查看当前磁盘大小: H/ A: d" G+ P! T1 o; |, o
df -h
2 v; F3 i/ S `7 K4 W( c ) E7 H$ c% o/ V

5 H2 a+ f0 K3 v& J4 g3 h4 i+ l+ _; x+ ~ R+ I H& y3 W m
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G? - 查看当前的逻辑卷1 i6 q* \2 R8 @/ w9 d
lvdisplay
! k4 W' e% d `- T# c7 m* Z " } G$ Q3 A& b( n- Q/ s: P
) w3 @+ `8 M' g8 }8 B1 h5 Y/ F0 R
/ Q+ K* C' A: V/ P1 E8 k8 u
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G, - 查看vg的大小. T' w' H6 I2 R9 B1 ^' X
pvdisplay2 e- P% Z$ L, @: j
# M7 [$ Q0 ~. M1 J; h F" t g" \# H
" l2 H: i k1 \; Z [4 V9 h; J- j; s这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。 买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。 0 F1 z5 ?, ~9 ^- e9 C k
, ]/ y: p7 ]3 W
" d- z$ x6 j2 jsda是第一块硬盘, 
+ W. f$ _. [ M+ ]$ r4 r! F! }
3 m1 A2 T( Z& `sdb是第二块硬盘,
4 Y5 f$ a( ^* z7 ?7 m% h 2 [+ a4 A; J4 C! _7 X- n. s) _
: h; i' u. F$ C% D- 检索硬盘
# @! Z9 p7 _( S+ G2 {fdisk -l |grep '/dev'
) k1 g2 A H5 X( y% R & X; G9 q# M& K
. p o. D, ?% i! M; ]/ t n
! s V- Z8 [+ f c* _$ N2 @+ M
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1.... 创建新的分区 /dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
! d+ J+ { y" x" E( Q$ _ + r* u8 w+ h4 s
0 Q" ?! N/ ]) Z9 ?, F* l. U6 W
) \4 F2 w$ ^( C) a

0 \0 X6 C6 k& Z; ?/ J& f$ o$ C) V2 J- J# A, z) W
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。 这里测试就分一个主分区,但从哪里开始? 0 b$ e% X; y9 @% n5 Q

% P/ T2 a! k* x5 ?4 D% J5 ~) s1 v# A* D
, V p1 }' ]; ~磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不? 硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。 坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。 为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。 " V7 i; a. x7 N& O
0 _5 i- K0 q6 F2 ^ O1 Q- u
4 R) {* c. W( @2 h2 Z
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。 接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式, - 磁盘格式化
# i% j1 J C" t7 {$ ?. @0 ymkfs -t ext4 /dev/sdb1
% n7 L$ I; S6 k
g8 n) F2 P% E# m$ g6 }3 J & \% Z- o4 |! W$ |/ s
' u( g8 R O$ e% D7 r. B" ^- 创建物理卷(实实在在往里面写入数据的磁盘)
0 [6 @9 Q' j1 B6 Y$ K6 F8 t8 opvcreate /dev/sdb1) k: u. _, T4 U4 C
把sdb1这个分区变成了物理卷,就可以往里面写了。: ?% I! |2 ?% e/ @5 ^" M( a
物理卷交给lvm管理,即逻辑卷lv, C, W) U2 G$ S3 |$ i* }
; O7 r: T; c' L$ e
2 }: X$ l) ?) ?" S
. I. p7 q4 O& a" K! u- R' b+ ]- 查看卷组
5 `2 n4 t+ P% x6 S& V& Mpvscan
$ `9 r3 h1 | B ! p% V9 p) y" h

0 d/ D! D$ j) I: |9 E
' w& _& _% i9 M3 u! U9 ~& _sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。 /dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。 这两个磁盘总共60G的大小,有40个G还没有加入卷组, ! l. ?+ A9 C% t; T

' z) I9 i# e+ d; Y
, z" ]' m; B, V2 {6 t此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。 - 把物理卷/dev/sdb1扩展到卷组里面去
8 k6 r% B' T. A0 R3 J. [vgextend ubuntu-vg /dev/sdb1" {; l8 L! \% @& l# {) Y
: u' b0 S& h% S1 L ; T1 Q7 E$ H; ?* c: l2 g& l. r
/ `* e* L4 S# Z: s6 w- 添加成功之后,查看卷组1 E' C# q' g' F6 H( c0 |# B* c5 |( i1 o
! ?0 P d$ C. d5 F9 F 3 ?8 }7 g: r% J
$ V5 ^; z. ]1 I3 z0 f: `) z! F' Q' M
可以看到/dev/sdb1已经添加到卷组中了 - 查看卷组的情况. V7 P- H/ G+ a T$ H# W2 e
# ]1 `, a9 w9 t2 y9 e 3 y, p/ f: {" n5 C/ F$ l
6 |9 A% L, ~! s1 d$ }! I+ K
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。 - 查看逻辑卷 b- N5 y" ?% Q( {) [1 e& I( k& T. O' a
% D; v% _# i1 U4 o# O3 j2 W/ W& H) a: D
) s* d& s% G4 d* e* j& Z. W) G$ ~( F- K- S. f% m" w" J
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。 这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式: - 按照大小扩容(增加10个G)
, r, p9 T: O% I; P. |/ olvextend -L +10G /dev/ubuntu-vg/ubuntu-lv+ P& U1 u! u/ [+ t1 E
: M$ L1 T' N" ^" k( n
5 A# ]& v! k2 H! [! l9 V$ o
2 P4 ^0 [9 t1 |增加10个G之后,这个lv逻辑卷的大小为29G了, $ L* H( ]7 Q0 k- i" j% n* @
3 I% O" d4 d1 j
3 @. y# Z! K4 V! E# z3 t: l2 v
还需要再刷新一下, resize2fs /dev/ubuntu-vg/ubuntu-lv
; r. V" Q7 z2 e! S: `: J
4 [. b1 i& {. U$ E' ~' s# d+ A: K8 N% b; d
( ~4 J! w3 Y6 D7 ^* O/ N% A# m

. ]( u1 e4 Y: |4 G0 I0 K8 K1 F* s" N
" r. ^$ d+ h, v- R# Q查看卷组
5 t! \0 ^5 d! ~ ) A r+ [- X; X: S) B! c+ H8 [) u
$ t7 J& G# n: K4 Z& a9 c5 T空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。 - 按照百分比扩容; L( s; Q& _9 |1 \, L& O
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv0 K+ u- x" b. z1 `- `
$ d2 `+ R/ c7 x1 l2 u! @4 M

* t3 I6 v Z# H+ }+ i5 z! R5 F) F- ]* v4 s! q& N5 k5 [. ~5 o
查看lv大小是60G了,
]: b: ^7 O, D: \* v! l# \1 F ' K; I7 s( m; S$ ~: r1 v8 c
( `) |) d4 ?, m0 N6 }6 f. A再刷新下,才可以使用
/ n* e1 M# C/ d . C8 v+ R: d# j* l7 E
* W Y" W! y8 C: R: E
H! P) k" E: V( N V; D6 Q这样就扩容到了60G了。 小结 lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。 那写入的时候怎么写入呢? mysql往里面写入数据, & ?2 a+ W( z! j* @

; M' m6 z: P ~- t* F1 g- D4 l
4 ]! b) Y e; o3 a; L0 C6 w: C创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。 如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。 一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。 不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。 |