|
LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,可以认为是一种磁盘空间的动态管理。 LVM必要性 如果虚拟机装的是20G的硬盘,如果不用LVM,你的磁盘是无法扩容的,不是说不能从20G变成40G,因为可以通过挂载多个硬盘的方式。 比如mysql挂载到这20G硬盘上, - V2 {# s+ B4 Q: R1 x- ]- N
: f, m& ^2 p% Y. a1 P! v
h' T* H' }8 I b
如果没有用lvm,再想扩容20个G的话, . x# y7 z# u& ?9 U' P) F+ U) n

1 _. P8 u |% Z- {4 F3 Q' A* G* N# o1 S
等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。 这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,
/ q1 A1 J6 t3 U5 S) T; P # r! F$ h' T7 h+ y4 j! c$ m
: u3 P E4 S8 e3 J, d
mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。 mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。 在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。 , U1 u; z: ]8 M9 N8 \# w* z) o9 `
5 Z) c b5 J: X0 b" G9 p
" h$ t- J- w, a' b) n3 m: @6 b2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程, . ?, W% H* D0 p# G9 _9 n
: f9 I4 l! N7 O3 @8 r: ^
1 [( A7 F `% f7 J+ p( G( `20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。 所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘, 0 K7 m* W; D, u1 V' J1 }

; B0 U% s4 J- o2 t2 b1 Y/ O: J& c9 i) r+ T' c
以mysql写入数据为例, 9 L/ D0 e6 w- n% i, m& p

! y0 T" O! x9 n9 p, h/ t. s, Y! {8 V
vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,
: Z" k$ w/ L: j) L7 ]
9 ]. @$ |2 e+ ^5 m
1 v9 F: {# n# p5 R: K+ U% A; kmysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。 接下来看下使用lvm怎么把20G扩容到60G?
! t% K0 D1 G7 P7 k 9 W3 U% Q5 F( [5 H( z( s
/ Z' ~3 U- M+ ?5 Z1 a1 t x8 y虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘, - 添加硬盘, I! y& t# b4 V; Y2 d/ k
& p) T2 \, M$ G3 V
1 X( x+ t3 K! K' n! P
: S. ^- x' x$ ]' e+ M, A- 选择磁盘5 u2 j j1 G: A* W7 E4 s1 A) c! e
1 @0 \$ F3 n- `4 m9 m% R
& D, y& }' F& o! f. y, B0 d( Q0 Y( F
- 指定磁盘容量
5 B, R" M5 u! Y6 v+ f, u
% Q8 X+ p ^5 I2 W, f
9 \9 k. m0 W% O! _) [" m" R7 J7 V, C9 r) ]
- 指定磁盘文件
. p7 H* B# J: O6 J: Z' a y0 j" q7 O
: {: M" V$ @& X/ @ 3 C1 p" t' [ V* b% [9 X9 w
$ u5 I% s( L+ i. _6 u. U% [这样就多了一块40G的硬盘,
" o# H( v0 V$ @
* T! g$ Z8 M$ p" z- Q; U7 h4 l
7 b7 N I+ J# k$ h/ o怎么把这两块硬盘变成一块? - 查看当前磁盘大小 [1 o6 ?; H% [' h) U: R$ e4 w
df -h& D( t8 l! |, R/ v. I) O# ~( a, C6 W
/ B$ Q5 a1 R: Z
2 Z+ g# [5 N, U& H1 M1 J- @
; p& u! k/ j9 A1 q$ b/ k1 n1 ~有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G? - 查看当前的逻辑卷
8 g- g4 t% H V# h1 A. h5 y! klvdisplay% A( _) y6 k; f% [8 H5 n
% u9 t0 r4 }( y: w2 a
" L8 v' `! o+ Y. E% ~7 d
4 S! O1 G6 z1 v( H! ? D
ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G, - 查看vg的大小4 {1 c* m2 b/ {+ b# q
pvdisplay, B! g5 N) z) s5 w7 d
2 A0 K. \8 G8 k- V% w; x
D/ L" @+ g3 z$ M+ s, `0 `
8 W; e; m ]2 M2 q u这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。 买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。 ! u0 R {3 A2 S# g/ y6 _
, U) {6 `2 s$ Z& L% k
, n" P* K7 S4 u; F
sda是第一块硬盘, 
+ L3 b3 Q1 Y$ ]) C1 N8 v, X8 d8 N+ w
/ X/ w' X" l2 m$ F$ Y4 tsdb是第二块硬盘, 1 b, y" M# B! ^4 n- Y
# z" f; m2 u4 o, y
3 [/ H/ w# J3 d0 t0 e- 检索硬盘
! H/ Y, z6 J9 Y$ ^- P z hfdisk -l |grep '/dev' R" p0 z; H& @) k! j& _1 o( p+ C O
0 J) a( j, `' E! J
2 K& r R2 Y" Z! s
0 `) {0 I4 a2 [可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1.... 创建新的分区 /dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,
! |; ~% a# N" u1 ~4 c$ T# N6 M) w( t - m6 s9 Z- D# F7 k( F+ W
5 G; Q2 `+ z# s3 n0 b9 u D
, w- C9 Y! S7 \ W- n! P- c0 P

8 ]3 f( w. i' M* F0 x, `
/ [1 S3 H& s. |0 b/ i9 W: y新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。 这里测试就分一个主分区,但从哪里开始?
4 e" R# [# ]% C9 A( S! m % G# c/ d: d+ k6 B; W0 m
' _) s5 e3 U3 U9 t6 w/ Y. |+ q% C磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不? 硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。 坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。 为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。 0 D1 W# h- E0 }; F" f0 f% Z
% ?+ I4 d) ^ t' @$ {6 ?* B1 G
. x/ g y3 \( p
分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。 接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式, - 磁盘格式化
5 j" z2 a$ x# y' Z5 bmkfs -t ext4 /dev/sdb1* R9 q6 h* U7 q9 p" O$ ^
2 N) j' S& \# Z+ m! }4 H: {; j

3 {+ b( h; i" n7 t& t e$ t3 W. A3 s. j& c8 Z8 v2 w1 l
- 创建物理卷(实实在在往里面写入数据的磁盘)( I$ K; e4 N& w$ D
pvcreate /dev/sdb18 m0 m3 I/ W& u' Q7 ~
把sdb1这个分区变成了物理卷,就可以往里面写了。
( @! F: |; y$ _2 R物理卷交给lvm管理,即逻辑卷lv! O4 K% d/ g6 {# }
, g' I5 @- l+ m! H- e, ~* }
6 S* \! Y3 I K* t. ^4 u' b
- B2 T4 k- [" s, a5 ^' Y, i- 查看卷组% y0 j" m& `) g$ W# s& l
pvscan
" R6 l* i% ~; s0 R 5 R% [6 T( g% i8 }0 g& ]4 ~2 j

" v3 T9 c4 r* @# }8 w1 E. b; G9 h0 ?+ Q( I9 u: |7 b) [
sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。 /dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。 这两个磁盘总共60G的大小,有40个G还没有加入卷组, 9 ~ M0 c$ U9 H& U& t8 a- @! a

1 ]; c9 n' _+ i7 v% c: b$ L( q; N- Y' O9 @- S$ O S4 `/ J; {- n
此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。 - 把物理卷/dev/sdb1扩展到卷组里面去
# H& w! T7 i( A% F( P5 |) ^, ?9 {vgextend ubuntu-vg /dev/sdb1" R# _- d2 } ^, P: T k
4 B+ r6 I! t/ z' C& b3 U, c

) ?$ i; J/ J9 J, g# k+ v* z0 s( s8 m! O! _/ R
- 添加成功之后,查看卷组
- x- k6 {, t0 L" h
0 R ^! n9 Q! p1 F" m $ J5 W; [* w# s4 N8 w
# s/ o( x/ ?/ ~$ v# i7 l
可以看到/dev/sdb1已经添加到卷组中了 - 查看卷组的情况
& @9 ]. M0 i- n, j - @# z- C1 \: V4 p7 H5 Z- W

* k6 Q, Y) u: W P: i
x( v# d+ v8 G! ~这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。 - 查看逻辑卷7 a0 u9 N- ]0 p0 Z4 L: Y
6 n' n4 \) k6 ~! e7 F: Z- @& z$ g
/ ^! @2 Z2 V( M3 T3 \/ e5 ~- D. u8 A i4 u
物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。 这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式: - 按照大小扩容(增加10个G)
( m5 g6 Z3 Y: h( {lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv! @( V7 l$ o; g7 M5 p6 Q- U8 g
+ @5 P& i" J# W {* d. t0 T4 _
: l) L: ?1 b. `( ^
4 l2 I) s: n, L& N% D
增加10个G之后,这个lv逻辑卷的大小为29G了,
7 l! S' l- P" |) l 0 d6 Q- a7 |* s7 y7 d3 s4 d
' A. J; Q/ ]8 O8 Q4 s还需要再刷新一下, resize2fs /dev/ubuntu-vg/ubuntu-lv
4 z3 |- k, z: w7 e; q9 k j , b+ L7 D8 w+ ^( P4 e3 F
- i7 A- P7 u: l" r c1 K& d1 n, {7 W5 s i% C2 X
& g3 G4 [4 n5 r* u6 r& m7 F
8 N6 V7 s9 Y! w! O1 {6 p# n查看卷组 # x% E. O6 |/ E7 J- u! W L
" O9 S1 j* z+ \1 |- i, G8 E3 B* w
" |1 @+ z3 m1 H7 _空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。 - 按照百分比扩容! |5 B# h$ U, @& o
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
" D6 F$ B: |: }6 q" |
. y& \& ~. D V7 N
7 X3 j6 T, j1 n( d, ~5 b$ S. L0 c# Z8 B6 U9 R" K, h0 ], ^
查看lv大小是60G了,
* B/ P) B3 W* r 0 U* z' X% Y. P( w6 J6 l3 D
8 a( Y h% g2 ?4 v& M$ U# }
再刷新下,才可以使用 * n$ a9 [2 Z) m# r" ]1 }
: ~( H* w5 A: B2 S' |5 V

$ W' D# q$ }) b) x- Z
: Z& U! R2 a/ [2 m4 ?& h这样就扩容到了60G了。 小结 lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。 那写入的时候怎么写入呢? mysql往里面写入数据, 7 O7 S& _) u7 |0 z# |: g, j

( {( \) x$ j& w3 N- W) E2 W9 @' Z5 `; f D
创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。 如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。 一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。 不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。 |