博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LVM逻辑卷管理
阅读量:6860 次
发布时间:2019-06-26

本文共 10499 字,大约阅读时间需要 34 分钟。

LVM逻辑卷管理(Logical Volume Manager)

    随着数据的逐渐增加,当初设计的磁盘大小已经满足不了现在的需求了,当磁盘面临着满盘时,运维人员如何解决问题?是换一个更大的磁盘,把原先的数据copy到现在更大的磁盘里面,继续撑一段时间,还是寻找其它方法?LVM的出现很好的解决了这一问题。LVM是linux环境下对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

LVM有两个特性

     1、便捷的调整文件系统大小

     2、支持快照snapshot

创建LVM的示意图

PV可以是硬盘的分区,PV组成了VG,在VG上面割取PE就组成了LV

物理卷physical volume (PV)

    物理卷是硬盘分区,也可以是整个硬盘或已创建的Software RAID 卷。

卷组volume group (VG)

    卷组是LVM 中最高抽象层,是由一个或多个物理卷所组成的存储器池。

物理块physical extent (PE)

    物理卷按大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。

逻辑块logical extent (LE)

    逻辑卷按“块”为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。

逻辑卷logical volume (LV)

    逻辑卷相当于非LVM 系统中的分区,它在卷组上建立,是一个标准的块设备,可以在其上建立文件系统


从一块硬盘到能使用LV文件系统的步骤:

         硬盘----分区----PV----VG----LV----格式化(LV为ext文件系统)----挂载

一、LVM的第一个特性,便捷的调整文件系统大小

1、PV的相关操作

先对硬盘进行分区

pvcreate 创建PV

1
2
3
[root@Redhat6 ~]
# pvcreate /dev/sda5 /dev/sda6
  
Physical volume 
"/dev/sda5" 
successfully created
  
Physical volume 
"/dev/sda6" 
successfully created

pvromve  移除PV

1
2
[root@Redhat6 ~]
# pvremove /dev/sda5
  
Labels on physical volume 
"/dev/sda5" 
successfully wiped

pvdisplay 显示PV的详细信息,用pvs也可以显示pv的信息

1
2
3
4
5
[root@Redhat6 ~]
# pvs
  
PV         VG   Fmt  Attr PSize  PFree
  
/dev/sda2  
vg0  lvm2 a--  59.99g  7.99g
  
/dev/sda5       
lvm2 a--  10.00g 10.00g
  
/dev/sda6       
lvm2 a--  10.00g 10.00g

pvmove 移动pv,将此PV的数据转移至其它PV

1
2
[root@Redhat6 ~]
# pvmove /dev/sda5 /dev/sda6 #把sda5的数据转移到sda6上面
  
/dev/sda5
: Moved: 100.0%

2、VG的相关操作

vgcreate  创建vg,-s PE:指定PE大小,默认为4M

1
2
[root@Redhat6 ~]
# vgcreate myvg /dev/sda5 /dev/sda6
  
Volume group 
"myvg" 
successfully created

vgdisplay 显示VG的详细信息,用vgs也可以显示VG的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@Redhat6 ~]
# vgdisplay
  
--- Volume group ---
  
VG Name               myvg
  
System ID          
  
Format                lvm2
  
Metadata Areas        3
  
Metadata Sequence No  2
  
VG Access             
read
/write
  
VG Status             resizable
  
MAX LV                0
  
Cur LV                0
  
Open LV               0
  
Max PV                0
  
Cur PV                3
  
Act PV                3
  
VG Size               25.01 GiB
  
PE Size               4.00 MiB
  
Total PE              6402
  
Alloc PE / Size       0 / 0
  
Free  PE / Size       6402 / 25.01 GiB
  
VG UUID               cLkCtE-LB7X-SYCE-GcKF-I30f-pBYH-MTCLZC

vgremove 移除vg,只需跟vg的名称即可

1
2
[root@Redhat6 ~]
# vgremove myvg
  
Volume group 
"myvg" 
successfully removed

vgextend  vg的扩展,先必须添加其它的PV

首先准备好一个PV--->然后使用vgextend命令即可完成扩展

1
2
3
4
5
6
7
8
9
[root@Redhat6 ~]
# pvcreate /dev/sda5 /dev/sda6   #创建PV
  
Physical volume 
"/dev/sda5" 
successfully created
  
Physical volume 
"/dev/sda6" 
successfully created
[root@Redhat6 ~]
# vgcreate myvg /dev/sda5 /dev/sda6 #创建VG
  
Volume group 
"myvg" 
successfully created
[root@Redhat6 ~]
# pvcreate /dev/sda3   #把另外一个分区创建为PV
  
Physical volume 
"/dev/sda3" 
successfully created
[root@Redhat6 ~]
# vgextend myvg /dev/sda3  #在myvg组里面扩展VG
  
Volume group 
"myvg" 
successfully extended

vgreduce  vg的缩减,

 确定要移除的PV--->将此PV的数据转移至其它PV---->从卷组中将此PV移除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@Redhat6 ~]
# pvs   #查看PV,确定要移除哪个PV
  
PV         VG   Fmt  Attr PSize  PFree
  
/dev/sda2  
vg0  lvm2 a--  59.99g  7.99g
  
/dev/sda3  
myvg lvm2 a--   5.01g  5.01g
  
/dev/sda5  
myvg lvm2 a--  10.00g  3.00g
  
/dev/sda6  
myvg lvm2 a--  10.00g 10.00g
[root@Redhat6 ~]
# pvmove /dev/sda3  /dev/sda5 #把sda3的数据转移到sda5上面
  
/dev/sda3
: Moved: 100.0%
[root@Redhat6 ~]
# vgreduce myvg /dev/sda3 #从VG中把PV移除
  
Removed 
"/dev/sda3" 
from volume group 
"myvg"
[root@Redhat6 ~]
# pvs
  
PV         VG   Fmt  Attr PSize  PFree
  
/dev/sda2  
vg0  lvm2 a--  59.99g  7.99g
  
/dev/sda3       
lvm2 a--   5.01g  5.01g
  
/dev/sda5  
myvg lvm2 a--  10.00g  3.00g
  
/dev/sda6  
myvg lvm2 a--  10.00g 10.00g
[root@Redhat6 ~]
#

3、LV的相关操作

lvcreate 创建LV,相关参数:-l 指定PE个数,-L指定LV的大小,

                                        -s创建一个快照卷,-n   LV的名称

1
2
[root@Redhat6 ~]
# lvcreate -L 5G -n lv1 myvg
  
Logical volume 
"lv1" 
created

lvdisplay 显示LV的详细信息,用lvs也可以显示LV的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@Redhat6 ~]
# lvdisplay
  
--- Logical volume ---
  
LV Path                
/dev/myvg/lv1
  
LV Name                lv1
  
VG Name                myvg
  
LV UUID                7Ewvyg-pEFI-o4XL-kFDa-Jtvl-hmak-5fg3qT
  
LV Write Access        
read
/write
  
LV Creation host, 
time 
Redhat6, 2013-07-23 05:42:33 +0800
  
LV Status              available
  
# open                 0
  
LV Size                5.00 GiB  
#创建一个5G的lv
  
Current LE             1280
  
Segments               1
  
Allocation             inherit
  
Read ahead sectors     auto
  
- currently 
set 
to     256
  
Block device           253:4

lvremove 移除lv,需要移除lv的设备文件:

      /dev/myvg/lv1或者/dev/mapper/myvg-lv1

1
2
3
[root@Redhat6 ~]
# lvremove /dev/myvg/lv1
Do you really want to remove active logical volume lv1? [y
/n
]: y
  
Logical volume 
"lv1" 
successfully removed

lvextend 扩展LV

  先确定要扩展多大-->确定当前VG有足够的空闲空间-->扩展(1、物理边界---2、逻辑边界)

当VG不够时,先增加PV,在扩展VG,最后在VG上面扩展LV。

1
2
3
4
5
6
7
8
[root@Redhat6 ~]
# mke2fs -t ext4 /dev/myvg/lv1   #先把lv格式化
[root@Redhat6 ~]
# lvextend -L +4G /dev/myvg/lv1 #实现物理扩容
  
Extending logical volume lv1 to 9.00 GiB   
#之前只有5G,现在扩了4G
  
Logical volume lv1 successfully resized
[root@Redhat6 ~]
# resize2fs /dev/myvg/lv1  #实现逻辑扩容
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on 
/dev/myvg/lv1 
to 2359296 (4k) blocks.
The filesystem on 
/dev/myvg/lv1 
is now 2359296 blocks long.

lvreduce 缩小LV

先卸载--->然后减小逻辑边界---->最后减小物理边界--->在检测文件系统   ====谨慎用===

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@Redhat6 ~]
# umount /dev/mapper/myvg-lv1
[root@Redhat6 ~]
# e2fsck -f /dev/myvg/lv1
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/lv1
: 13
/589824 
files (0.0% non-contiguous), 73829
/2359296 
blocks
[root@Redhat6 ~]
# resize2fs /dev/myvg/lv1 7G #把lv减少到7G,减少了2G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on 
/dev/myvg/lv1 
to 524288 (4k) blocks.
The filesystem on 
/dev/myvg/lv1 
is now 524288 blocks long.
[root@Redhat6 ~]
# lvs  #查看lv的大小发现并没有实际的减少
  
LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  
lv1  myvg -wi-a----  9.00g                                          
  
root vg0  -wi-ao--- 20.00g                                          
  
swap vg0  -wi-ao---  2.00g                                          
  
usr  vg0  -wi-ao--- 10.00g                                          
  
var  vg0  -wi-ao--- 20.00g                                          
[root@Redhat6 ~]
# lvreduce -L -2G /dev/myvg/lv1 #减少lv的物理边界,指定减少2G
  
WARNING: Reducing active logical volume to 7.00 GiB
  
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv1? [y
/n
]: y
  
Reducing logical volume lv1 to 7.00 GiB
  
Logical volume lv1 successfully resized
[root@Redhat6 ~]
# lvs #查看lv的大小发现已经实际的减少了
  
LV   VG   Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  
lv1  myvg -wi-a----  7.00g                                          
  
root vg0  -wi-ao--- 20.00g                                          
  
swap vg0  -wi-ao---  2.00g                                          
  
usr  vg0  -wi-ao--- 10.00g                                          
  
var  vg0  -wi-ao--- 20.00g  
[root@Redhat6 ~]
# e2fsck -f /dev/myvg/lv1 #减少之后检查文件系统
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/lv1
: 13
/131072 
files (0.0% non-contiguous), 43698
/524288 
blocks

二、LVM的第二个特性,在备份数据的时候创键快照卷

当需要备份LV里面的数据时,且LV的数据也在进行写操作时,这个时候创建快照就很有必要了,快照是一个访问LV里面数据的一个通道,他不会保存LV里面所有的数据,当LV某些PE里面数据变化时,快照保存之前PE的数据,未变化的PE将不会被保存。

步骤:

分区--->创建PV--->创建VG--->创建LV--->格式化LV为ext4--->挂载--->写入数据--->需要备份(创建快照)--->创建快照卷--->再次继续写入数据---->挂载快照卷--->备份之前的数据到快照卷里面--->卸载快照--->删除快照卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
root@station128 ~]
# fdisk /dev/sda  #先建立两个逻辑分区,大小为10G
Command (m 
for 
help): n
First cylinder (9165-15665, default 9165):
Using default value 9165
Last cylinder, +cylinders or +size{K,M,G} (9165-15665, default 15665): +10G
Command (m 
for 
help): t
Partition number (1-5): 5
Hex code (
type 
L to list codes): 8e  
#并改为LVM文件系统
Changed system 
type 
of partition 5 to 8e (Linux LVM)
Command (m 
for 
help): n
First cylinder (10471-15665, default 10471):
Using default value 10471
Last cylinder, +cylinders or +size{K,M,G} (10471-15665, default 15665): +10G
Command (m 
for 
help): t
Partition number (1-6): 6
Hex code (
type 
L to list codes): 8e
Changed system 
type 
of partition 6 to 8e (Linux LVM)
Command (m 
for 
help): w
[root@Redhat6 ~]
# pvcreate /dev/sda5 /dev/sda6   #创建PV
  
Physical volume 
"/dev/sda5" 
successfully created
  
Physical volume 
"/dev/sda6" 
successfully created
[root@Redhat6 ~]
# vgcreate -s 8M myvg /dev/sda5 /dev/sda6  #创建VG,并指定PE为8M
  
Volume group 
"myvg" 
successfully created
[root@Redhat6 ~]
# lvcreate -L 4G -n lv1 myvg #创建LV为4G
  
Logical volume 
"lv1" 
created
[root@Redhat6 ~]
# mkfs -t ext4 /dev/myvg/lv1 #格式化LV为ext4
[root@Redhat6 ~]
# blkid  #显示设备的UUID及文件系统类型,及卷标
/dev/mapper/vg0-var
: UUID=
"c9776f08-bbaf-4a36-a009-3e16a09ad924" 
TYPE=
"ext4"
/dev/sda1
: UUID=
"dc3cc214-a9f6-4730-a186-d08765ccfa4f" 
TYPE=
"ext4"
/dev/sda2
: UUID=
"zPpbgE-0Ip7-A4m2-GG4K-sBrC-eUeU-V8VdCI" 
TYPE=
"LVM2_member"
/dev/sda5
: UUID=
"e5eLw1-JTrG-H9Q7-18qA-SrPV-axMc-QLPW5M" 
TYPE=
"LVM2_member"
/dev/sda6
: UUID=
"7OOZcJ-XzLf-zJJq-JbdF-e386-xCTl-Ym2UE3" 
TYPE=
"LVM2_member"
/dev/mapper/vg0-root
: UUID=
"bae7835a-af3b-4935-a04b-5932b2fc123b" 
TYPE=
"ext4"
/dev/mapper/vg0-swap
: UUID=
"3e0cb4a7-d393-4f75-af12-1fe6e8c96273" 
TYPE=
"swap"
/dev/mapper/vg0-usr
: UUID=
"46d516b8-03ea-4c0d-bb03-0e9d6893bd1a" 
TYPE=
"ext4"
/dev/mapper/myvg-lv1
: UUID=
"2d44718c-993d-42e6-896b-05e06af45aee" 
TYPE=
"ext4"
[root@Redhat6 ~]
# mkdir /mnt/lv1  #创建LV的挂载点
[root@Redhat6 ~]
# mount /dev/myvg/lv1 /mnt/lv1/  #挂载LV
[root@Redhat6 ~]
# cd /mnt/lv1/ #进入到LV的挂载点
[root@Redhat6 lv1]
# ls
lost+found
[root@Redhat6 lv1]
# cp /etc/rc.sysinit /etc/inittab ./  #copy一个文件到LV的挂载目录里面
[root@Redhat6 lv1]
# ls
inittab  lost+found  rc.sysinit
[root@Redhat6 lv1]
# lvcreate -L 50M -s -p r -n MY_SNAP /dev/myvg/lv1  #创建快照卷为50M,且只能读,名称为MY_SNAP
  
Rounding up size to full physical extent 56.00 MiB
  
Logical volume 
"MY_SNAP" 
created
[root@Redhat6 lv1]
# mkdir /mnt/snap  #创建快照卷的挂载点
[root@Redhat6 lv1]
# mount /dev/myvg/MY_SNAP /mnt/snap/ #挂载快照卷
mount
: block device 
/dev/mapper/myvg-MY_SNAP 
is write-protected, mounting 
read
-only
[root@Redhat6 lv1]
# mkdir /backup #创建备份目录
[root@Redhat6 lv1]
# tar -jcf /backup/lv1.tar.bz2  /mnt/snap/*  #把快照卷里面的数据归档
tar
: Removing leading `/' from member names
[root@Redhat6 lv1]
# cp /etc/fstab /mnt/lv1/   #copy文件到LV文件,使LV文件与之前快照的文件有所改变
[root@Redhat6 lv1]
# umount /dev/myvg/MY_SNAP   #备份完成后,卸载快照卷的挂载点
[root@Redhat6 lv1]
# lvremove /dev/myvg/MY_SNAP  #移除快照卷
Do you really want to remove active logical volume MY_SNAP? [y
/n
]: y
  
Logical volume 
"MY_SNAP" 
successfully removed
[root@Redhat6 lv1]
# cd /mnt/lv1/
[root@Redhat6 lv1]
# ls  #可以查看到LV文件里面有3个文件
fstab  inittab  lost+found  rc.sysinit
[root@Redhat6 lv1]
# cd /backup/
[root@Redhat6 backup]
# tar xf lv1.tar.bz2  #解压之前备份的文件
[root@Redhat6 backup]
# ls
lv1.
tar
.bz2  mnt
[root@Redhat6 backup]
# cd mnt/lv1/
[root@Redhat6 lv1]
# ls   #查看到快照只备份了之前的文件
inittab  lost+found  rc.sysinit
[root@Redhat6 lv1]
#
本文转自 jie783213507 51CTO博客,原文链接:http://blog.51cto.com/litaotao/1256180,如需转载请自行联系原作者
你可能感兴趣的文章
OAuth2简易实战(四)-Github社交联合登录
查看>>
Netty学习大纲
查看>>
OC中的私有方法
查看>>
分享几段JavaScript
查看>>
C++中的多态和Objective-C中的“多态”
查看>>
js基础五
查看>>
构建执法阅读笔记01
查看>>
剑指offer:合并两个排序的链表
查看>>
1602液晶显示实验
查看>>
图片水印
查看>>
Quart2D的基本介绍
查看>>
Lua点号和冒号区别
查看>>
STL基础
查看>>
有没有人要贪吃蛇的代码,然而有....................
查看>>
linux的top命令参数详解
查看>>
spring常用注解
查看>>
Material Menu
查看>>
Win8 环境变量位置
查看>>
margin负值的应用总结
查看>>
分页查询
查看>>