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,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
存储 Linux
哇~真的是你呀!今天是挂载、LVM逻辑卷。
在 Linux 中,挂载是将一个文件系统连接到文件系统树的某个目录上的过程。它的作用是让用户能够访问文件系统中的文件和目录,使用文件系统中的空间存储数据。当一个磁盘分区或者一个外部存储设备被挂载到一个目录上时,该目录就成为了该分区或者设备的挂载点。
52 0
|
Linux 开发工具
LVM管理
简单实践
194 0
LVM管理
|
Oracle 关系型数据库 开发工具