开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

LVM逻辑卷管理

简介:
+关注继续查看

LVM逻辑卷管理(Logical Volume Manager)

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

LVM有两个特性

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

     2、支持快照snapshot

创建LVM的示意图

104745481.png

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的相关操作

先对硬盘进行分区

110952594.png

111027190.png

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
逻辑卷管理(LVM)
1、命令 一般,对于物理机新插入的磁盘,或者虚拟机新建的磁盘,先用fdisk /dev/sdb命令创建分区。创建好一个分区/dev/sdb1之后,继续物理卷。 1、创建物理卷pvcreate /dev/sdb1pvdisplay显示已建的物理卷2、创建...
625 0
LVM管理
简单实践
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载