|
LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,可以认为是一种磁盘空间的动态管理。 LVM必要性 如果虚拟机装的是20G的硬盘,如果不用LVM,你的磁盘是无法扩容的,不是说不能从20G变成40G,因为可以通过挂载多个硬盘的方式。 比如mysql挂载到这20G硬盘上,
}7 L( z2 }) a! p: f# s
+ P" Z% g+ f& c$ o2 r2 C; h: {' N$ \ x1 M' n
如果没有用lvm,再想扩容20个G的话,
& k1 E2 H0 V8 o8 R% C M! m* x
9 ~( H6 B9 m, r( |; ~9 h
7 n) f9 _7 t6 ~ T# [+ l/ n等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。 这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,
7 [8 J7 O. l! X 9 B7 l* L1 b0 F1 h
' V8 {/ K# r) i. a3 k5 R" |( K
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。 mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。 在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。
2 N3 z: e. u* U' a3 ?6 a . n( h/ ] x6 c& ~8 u0 O
8 I8 H* q; y* T: T! t S3 f' \
2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程, 4 V) M. @1 O4 B
' M4 |* h6 F) o
; o% z @- n& a7 W4 U. M) b/ i, x( W
20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。 所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,
& M H- H5 e: ?7 R( \ 1 ?. e2 ]/ V* s& m1 w$ e3 h9 e+ R
s' `4 ?) w4 \' R h: Q
以mysql写入数据为例, 6 P. D: v& |/ z( m: _

4 {* V8 U7 L) P9 b. i; S4 | W4 \" u- _: [) t f8 L
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷, 0 G, Z) W1 W8 A& N

' R3 M( S" ~! B4 U, ^3 j4 s5 ?- o6 K: f B8 d; X
mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。 接下来看下使用lvm怎么把20G扩容到60G?
5 N' M7 p6 d1 o/ l8 x: K8 d4 u7 z2 k 7 E0 E$ p1 o2 v# j' Q
$ f, \( k7 ` \8 q
虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘, - 添加硬盘! P- M' u2 l4 x6 e, }' x
7 [ _0 J) J: I# @7 e! N( m
4 A% k+ p' g" h( Y& N% q! {
+ l. [# e" }# p$ ]1 D9 f6 g- 选择磁盘
7 ^2 m4 a0 f' r& p6 v4 n % t7 i* X+ {/ ]1 `
' v) i7 u* }3 G& U: E" B, C0 L( Q
1 }3 n9 m) r( S3 L' A! E
8 z5 U" \9 _% C/ l# _# v
% G( D! a# A6 B. E% w7 ?. @0 r
# C3 C. q6 ]& D. h* G- 指定磁盘文件
$ \- F- q$ u) ^6 L , D( J9 Q/ b! c+ v$ o3 S. ?% R

) J& f3 N6 B0 l- G: B' a( M1 U z' c3 Q; Q* `# ~: a
这样就多了一块40G的硬盘,
/ X: P' ~" F! J/ D) | ]* T+ t7 W1 F7 M
9 ^" {& j2 b/ Y+ Z) m5 V
怎么把这两块硬盘变成一块? - 查看当前磁盘大小
# p, j% a/ B: Sdf -h: M6 @& k8 w- Y+ I
0 G: t# @0 n2 I9 L3 z, |

" z( D. E- P: [6 d! ]6 _. r+ }* c# ]8 K& c, A( R
有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G? - 查看当前的逻辑卷
, v* T2 F8 L8 V; x' y& Wlvdisplay
! C! n" a2 W/ c5 a 0 c6 l, ?$ Y4 U+ k# J

$ E' _. e! \; r; V* q/ [! W* S; b! f: b# v" i' M, P. C3 z
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G, - 查看vg的大小
9 }% F& \+ _0 V( D1 P; Gpvdisplay3 v+ h& }% C9 @: p* u
, G0 T. J: T ]1 X a3 ^* ~$ }, ~3 `; J
% w. [! U% N4 M( \+ ?7 M" O K
这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。 买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。
2 t. @) I: H" ]% S) v/ r* R ! [- [. \4 n r, `4 U# T
# s& d$ L( e$ R/ qsda是第一块硬盘, 
" \6 z1 Z. q- q1 k B' D
4 t0 D- S7 X) z" V8 K+ \% _ b; ~sdb是第二块硬盘, ' Q {! t. D. z$ u) ]2 C
$ l) Z6 X- F4 j& _8 }
$ Z6 s6 F" x0 x3 }7 a# X
- 检索硬盘
/ @9 _- G+ V8 R- J' d5 {7 N8 l; z( n2 X4 |fdisk -l |grep '/dev'
' E `' X& | ] R
0 L" G E( t7 i' k' U' B
- B( m' S$ Y2 x$ N" |8 x; I8 h! ]" z1 I6 _
可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1.... 创建新的分区 /dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区, : q6 m3 p+ U9 M
8 b, b! A6 u3 b/ ^/ e
+ {0 x/ ?/ j; h* l/ ^
- F6 Z H) _& P
( M# @- S8 I2 s( g
- `; Z4 ~% y7 D& f
新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。 这里测试就分一个主分区,但从哪里开始? ' m+ S$ T* {! {* L

. f1 v0 ~! U z: M* L3 [1 z! Z6 E9 u- q
' }: M) D# [. P; V* q4 V1 i$ y磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不? 硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。 坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。 为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。 6 r( S. h2 x3 w/ _! h: z
7 q! U! [* e. \# k4 o
* d( Y$ k+ n- {2 S分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。 接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式, - 磁盘格式化" x/ R4 V- p/ \* o7 o
mkfs -t ext4 /dev/sdb1
* l4 a0 f* D# j6 q- _ V
7 L- b% E$ E, s$ r6 d* e1 c' r/ Z
2 }5 L4 N# e( s0 T
$ Z; f x$ @( O8 T. Y" K, x4 P( T s- 创建物理卷(实实在在往里面写入数据的磁盘)
- ]4 _& L- H* ?3 I! X0 z5 F- ypvcreate /dev/sdb1
8 n6 [( x% h, t; |把sdb1这个分区变成了物理卷,就可以往里面写了。
5 Y9 @; F0 x# w/ [# V物理卷交给lvm管理,即逻辑卷lv9 l0 s7 d8 w, |& w
# Q2 T4 U- |% I2 b" A
+ b$ h% Z: O: n2 v5 y3 a
0 P1 C" s; B$ Q+ J% x, s* U- 查看卷组1 B @% |, C- D2 B5 @. O
pvscan! T6 N" w& @1 i
: I6 B% o* b. J6 N $ Y* q- }) S0 K' T2 w3 {, R
* H0 A: G7 R r( s: A3 v
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。 /dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。 这两个磁盘总共60G的大小,有40个G还没有加入卷组,
- X+ n4 C6 u9 {- P; S
1 h; M$ L1 _ x9 v& D+ a: I+ c% r3 M- [" T. i2 G
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。 - 把物理卷/dev/sdb1扩展到卷组里面去
; b& w% x; z- @, Lvgextend ubuntu-vg /dev/sdb1+ M( `0 c- D% p [6 c0 ^! R
) H6 v6 f/ p6 Z( _

) J& w( k9 D( v3 v9 s0 X
( a* l" Y5 `7 T: @/ q/ J$ ~- 添加成功之后,查看卷组
! V4 r7 \9 l$ H! U' m
$ I- B- L5 p/ d3 C4 i ?( O
+ Y7 e6 R5 o; Y: v, N: z6 D5 Q9 B8 ^- S( y2 ~! Y/ X
可以看到/dev/sdb1已经添加到卷组中了 - 查看卷组的情况
' }- H; k& v: Z1 q* Z$ O$ F1 k$ h- v# ` ! x, T/ l& [( B( `: g

0 q8 ^+ D7 v3 ?' x6 H9 m2 P, c' I: ~9 k" N0 w7 {
这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。 - 查看逻辑卷4 m8 y) \4 t+ ~) i& D
4 X8 a* F |: |+ q1 a) c0 {2 A; {
6 s2 v" H1 H/ _$ [! E1 i: Q
& L- e: l4 n5 s7 m! S物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。 这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式: - 按照大小扩容(增加10个G)
( e0 `5 b# o1 S# Klvextend -L +10G /dev/ubuntu-vg/ubuntu-lv( f( o7 U; T1 ~
9 Y0 l. l3 o: H; _; j) P, {5 u
7 o; k' _ V( [* {
5 H! @# n0 H7 @增加10个G之后,这个lv逻辑卷的大小为29G了,
# H' J1 V% a2 {7 c
, R {2 ]1 S) F& a9 a0 j# J0 Q; I9 z2 o9 u1 f2 q; O$ Y
还需要再刷新一下, resize2fs /dev/ubuntu-vg/ubuntu-lv . N6 ` x, e% ]0 \- v. E6 U
5 {6 T5 g) z( |/ |' z; Q; m/ L: Q
: H) F0 W" G, B* @7 p* _" X8 V1 L, C, B" Y( }

" i+ |; F$ B7 @/ N% c6 b: S1 R" B. G
查看卷组
/ K& H* |* A5 @
' k& @8 S+ }+ G3 r9 K% l5 }
) e2 C2 p3 e; i# |" r- j/ a空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。 - 按照百分比扩容
+ |4 ]; C1 o* L; m2 _* h9 i5 Flvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
9 f# Y) D* R0 j3 I% A3 p
+ P# c2 ?6 @0 d, m& B( n- B: N
0 q8 ^' I" D8 W! V
' j: U0 C1 m% W. S N/ ^& M查看lv大小是60G了,
! n7 B6 W; y/ _2 b $ z |. n: b' P# ?3 K5 s u
: D% ]3 t; M9 h2 x: }再刷新下,才可以使用
: w0 q$ b0 K* x+ z, X6 d0 E) l/ o $ g% b! j U3 h$ O8 `4 ~3 h
& |6 x" _% v* t' e! l0 z3 j- n
3 C, `: E$ z9 m# F这样就扩容到了60G了。 小结 lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。 那写入的时候怎么写入呢? mysql往里面写入数据,
9 I9 ], T- u9 ~/ u9 N3 i& @% h5 {
2 _8 a. o! ~4 M- _* s$ \" ]( I5 U: ?
^6 e. H ^; l) d创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。 如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。 一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。 不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。 |