主要内容

  • LVM的简单介绍

  • LVM的配置与管理

  • LVM快照卷

LVM的简单介绍

作为一个linux用户,经常会碰到情况:因为事先已经分好了区,用着用着磁盘不够用了,而重新分区,又会对数据造成影响,有时候还需要重启。对个人用户来说问题倒不是很大,但对于企业来说无疑会造成重大损失。而LVM可以很好地解决这种问题。

逻辑滚动栏管理器(Logical Volume Manager,缩写为LVM),又译为逻辑卷宗管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑滚动栏管理功能。它在硬盘的硬盘分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。

优点:

接口统一,管理方式统一,还可以进行动态卷扩展

图例:

名词解释

物理卷(PV)

物理卷是指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备(比如RAID设备)。

卷组(VG)

一个或者多个逻辑卷组成一个卷组。对于LVM而言,卷组类似于非LVM系统中的物理硬盘。卷组把多个逻辑卷组合在一起,形成一个可管理的单元。

逻辑卷(LV)

一个或者多个物理卷组成一个逻辑卷。对于LVM而言,逻辑卷类似于非LVM系统中的硬盘分区。逻辑卷可以包含一个文件系统(比如/home或者/usr)。

物理块physical extent (PE)

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

逻辑块logical extent (LE)

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

LVM的配置与管理

1. PV的创建

[root@FLyence ~]# pvcreate /dev/sdb2  Physical volume "/dev/sdb2" successfully created[root@FLyence ~]# pvcreate /dev/sdc2  Device /dev/sdc2 not found (or ignored by filtering).[root@FLyence ~]# pvcreate /dev/sdd2  Device /dev/sdd2 not found (or ignored by filtering).

本例中将/dev/sdb2, /dev/sdc2, /dev/sdd2三个分区建立为物理卷。

查看PV信息的命令pvs或pvdisplay

[root@FLyence ~]# pvs  PV         VG   Fmt  Attr PSize  PFree  /dev/sdb2       lvm2 a--  10.00g 10.00g  /dev/sdc2       lvm2 a--  10.00g 10.00g  /dev/sdd2       lvm2 a--  10.00g 10.00g[root@FLyence ~]# pvdisplay  "/dev/sdb2" is a new physical volume of "10.00 GiB"  --- NEW Physical volume ---  PV Name               /dev/sdb2  VG Name              PV Size               10.00 GiB  Allocatable           NO  PE Size               0  Total PE              0  Free PE               0  Allocated PE          0  PV UUID               FIi1X2-wkxK-5Dwm-m2xA-lLy4-C8xi-k3Momk                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "/dev/sdc2" is a new physical volume of "10.00 GiB"  --- NEW Physical volume ---  PV Name               /dev/sdc2  VG Name              PV Size               10.00 GiB  Allocatable           NO  PE Size               0  Total PE              0  Free PE               0  Allocated PE          0  PV UUID               DuQiC5-vV0P-nPrN-Pxmw-ls6u-DltT-vLuZ1u                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "/dev/sdd2" is a new physical volume of "10.00 GiB"  --- NEW Physical volume ---  PV Name               /dev/sdd2  VG Name              PV Size               10.00 GiB  Allocatable           NO  PE Size               0  Total PE              0  Free PE               0  Allocated PE          0  PV UUID               tkkjyZ-auVC-zeBG-o75Y-x7Fk-tWFA-oG9Lc1

2. VG的创建

[root@FLyence ~]# vgcreate myvg -s 8M /dev/sdb2 /dev/sdc2 /dev/sdd2  Volume group "myvg" successfully created

-s后面指定PE大小

查看VG的信息的命令vgs和vgdisplay

[root@FLyence ~]# vgs  VG   #PV #LV #SN Attr   VSize  VFree  myvg   3   0   0 wz--n- 30.00g 30.00g[root@FLyence ~]# vgdisplay  --- Volume group ---  VG Name               myvg  System ID            Format                lvm2  Metadata Areas        3  Metadata Sequence No  1  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               30.00 GiB  PE Size               8.00 MiB  Total PE              3840  Alloc PE / Size       0 / 0  Free  PE / Size       3840 / 30.00 GiB  VG UUID               Q5foAw-zo14-4Ljv-tTog-cYde-EvyY-4np2Ip

3. LV的创建

[root@FLyence ~]# lvcreate -L 30G -n mylv myvg  Logical volume "mylv" created

-L指定LV的大小,-n为LV的名字,最后的是VG的名字

查看LV的信息的命令lvs,lvdisplay

[root@FLyence ~]# lvdisplay  --- Logical volume ---  LV Path                /dev/myvg/mylv  LV Name                mylv  VG Name                myvg  LV UUID                c2FPdN-t2xv-k2Nj-634C-6Tft-D0Is-V6UVOI  LV Write Access        read/write  LV Creation host, time FLyence.Wu, 2013-10-08 01:12:54 +0800  LV Status              available  # open                 0  LV Size                30.00 GiB  Current LE             3840  Segments               3  Allocation             inherit  Read ahead sectors     auto  - currently set to     256  Block device           253:0

4. 格式化并挂载

[root@FLyence ~]# mkfs.ext4 /dev/myvg/mylv[root@FLyence ~]# mount /dev/myvg/mylv /mnt[root@FLyence ~]# echo "hello lvm" > /mnt/hello[root@FLyence ~]# ls /mnthello  lost+found[root@FLyence ~]# cat /mnt/hellohello lvm

在新挂载的分区中,新建一个文件,之后扩张和缩减LV时,判断文件是否损坏。

5. 扩展VG

首先准备好一个PV,使用vgextend命令即可完成扩展:vgextend VG_NAME /PATH/TO/PV

[root@FLyence ~]# pvcreate /dev/sda10  Physical volume "/dev/sda10" successfully created[root@FLyence ~]# vgextend myvg /dev/sda10  Volume group "myvg" successfully extended[root@FLyence ~]# vgs  VG   #PV #LV #SN Attr   VSize  VFree  myvg   4   1   0 wz--n- 40.00g 10.00g

myvg由30G增加到40G。

6. 缩减VG

确定要移除的PV;

将此PV上的数据转移至其它PV:pvmove /path/to/pv

从卷组中将此PV移除:vgreduce VG_NAME /PATH/TO/PV

[root@FLyence ~]# pvmove /dev/sdb2  /dev/sdb2: Moved: 0.1%  /dev/sdb2: Moved: 41.6%  /dev/sdb2: Moved: 88.4%  /dev/sdb2: Moved: 100.0%[root@FLyence ~]# vgreduce myvg /dev/sdb2  Removed "/dev/sdb2" from volume group "myvg"

7. 扩展逻辑卷

首先确定要扩展的大小由30G-->40G

确定当前逻辑卷所在的卷组有足够的空闲空间;

扩展:

1、物理边界 +:扩展了 不带:扩展到

lvextend -L [+]SIZE /path/to/lv

2、逻辑边界

resize2fs /path/to/device

由于刚把/dev/sdb2移除了,现在重新加回去

[root@FLyence ~]# vgextend myvg /dev/sdb2  Volume group "myvg" successfully extended[root@FLyence ~]# vgs  VG   #PV #LV #SN Attr   VSize  VFree  myvg   4   1   0 wz--n- 40.00g 10.00g[root@FLyence ~]# lvextend -L +10G /dev/myvg/mylv  Extending logical volume mylv to 40.00 GiB  Logical volume mylv successfully resized[root@FLyence ~]# resize2fs /dev/myvg/mylvresize2fs 1.41.12 (17-May-2010)Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing requiredold desc_blocks = 2, new_desc_blocks = 3Performing an on-line resize of /dev/myvg/mylv to 10485760 (4k) blocks.The filesystem on /dev/myvg/mylv is now 10485760 blocks long.[root@FLyence ~]# lvs  LV   VG   Attr   LSize  Pool Origin Data%  Move Log Cpy%Sync Convert  mylv myvg -wi-ao--- 40.00g

8. 缩减逻辑卷

首先确定缩减的大小,前提是至少能容纳原有的所有数据。

40G --> 35G

缩减:

1、卸载并强行检测文件系统;

e2fsck -f

2、逻辑边界

resize2fs /path/to/device SIZE

3、物理边界

lvreduce -L [-]SIZE /path/to/l

[root@FLyence ~]# e2fsck -f /dev/myvg/mylve2fsck 1.41.12 (17-May-2010)/dev/myvg/mylv is mounted.e2fsck: Cannot continue, aborting.[root@FLyence ~]# umount /mnt[root@FLyence ~]# e2fsck -f /dev/myvg/mylve2fsck 1.41.12 (17-May-2010)Pass 1: Checking inodes, blocks, and sizesPass 2: Checking directory structurePass 3: Checking directory connectivityPass 4: Checking reference countsPass 5: Checking group summary information/dev/myvg/mylv: 12/2621440 files (0.0% non-contiguous), 209555/10485760 blocks[root@FLyence ~]# resize2fs /dev/myvg/mylv 35Gresize2fs 1.41.12 (17-May-2010)Resizing the filesystem on /dev/myvg/mylv to 9175040 (4k) blocks.The filesystem on /dev/myvg/mylv is now 9175040 blocks long.[root@FLyence ~]# lvreduce -L -5G /dev/myvg/mylv  WARNING: Reducing active logical volume to 35.00 GiB  THIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want to reduce mylv? [y/n]: y  Reducing logical volume mylv to 35.00 GiB  Logical volume mylv successfully resized[root@FLyence ~]# lvs  LV   VG   Attr   LSize  Pool Origin Data%  Move Log Cpy%Sync Convert  mylv myvg -wi-a---- 35.00g

将mylv挂载回去,查看hello文件是否完好

[root@FLyence ~]# mount /dev/myvg/mylv /mnt[root@FLyence ~]# ls /mnthello  lost+found[root@FLyence ~]# cat /mnt/hellohello lvm

数据并没有损坏,需要注意的是在缩减lv时,有风险,可能会造成数据损坏

LVM快照卷

逻辑卷管理(LVM)提供了为任何逻辑卷作一个快照的功能,目的是在一致的状态下来得到一个分区的备份.因为在备份过程中,应用程序可能访问一个分区的文件或者数据库.一些文件可能在一个状态被备份,而后面的文件可能在一个更新后被备份,导致备份的不完整。使用快照卷后,当文件发生变化时,先复制一份放到快照卷中。备份时,通过快照卷去访问分区

LVM 快照通过把文件系统的改变记录到一个快照分区,而不是对这个分区做镜像.因此当你创建一个快照分区时,你不需要使用和你正创建快照的分区一样大小的分区, 而是在做快照过程中需要改变的大小.这取决于有多少数据正在写入分区和你希望保留LVM快照多长 时间. 你保留的时间越长,在文件系统的的改变越多,更多的快照分区就会被填充改变的信息.在分区上的改变率越高,快照的平均生命期越短.如果一个LVM分区的改变量超过了快照的大小,那么快照就会被释放。

[root@FLyence ~]# lvcreate -L 500M -s -p r -n mylvsnap /dev/myvg/mylv  Rounding up size to full physical extent 504.00 MiB  Logical volume "mylvsnap" created#-L指定快照卷大小,-s创建快照卷,-p r限制快照卷为只读访问,-n指定快照卷名称

建立后以只读形式挂载快照卷

[root@FLyence ~]# mount -o ro /dev/myvg/mylvsnap /media

改动/mnt里的hello文件,然后比较/mnt和/media中hello的差异

[root@FLyence ~]# echo "hello,lvm snap" >> /mnt/hello[root@FLyence ~]# cat /mnt/hellohello lvmhello,lvm snap[root@FLyence ~]# cat /media/hellohello lvm