|
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* e2个磁盘怎么写数据?把磁盘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' K20G还可以复制,那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, ?+ Amysql存储数据用的是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) b 0 j1 }$ T0 R. V' ]& ?! A4 O
9 e% ?* V0 r/ ~8 U" L, y0 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 \% G 4 ]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已经添加到卷组中了 $ 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) q 7 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扩容,就不可以再把硬盘卸载掉了。 不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。 |