主要内容
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 /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分区的改变量超过了快照的大小,那么快照就会被释放。
[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