主要内容

  • LVM的简单介绍

  • LVM的配置与管理

  • LVM快照卷


LVM的简单介绍

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

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


优点:

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


图例:

LVM的简单配置_第1张图片



名词解释

物理卷(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 /mnt
hello  lost+found
[root@FLyence ~]# cat /mnt/hello
hello 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/mylv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 3
Performing 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/mylv
e2fsck 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/mylv
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/mylv: 12/2621440 files (0.0% non-contiguous), 209555/10485760 blocks
[root@FLyence ~]# resize2fs /dev/myvg/mylv 35G
resize2fs 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 /mnt
hello  lost+found
[root@FLyence ~]# cat /mnt/hello
hello lvm

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


LVM快照卷

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

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

LVM的简单配置_第2张图片


[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/hello
hello lvm
hello,lvm snap
[root@FLyence ~]# cat /media/hello
hello lvm