逻辑卷管理器(英语:Logical Volume Manager,缩写为LVM),又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume management)功能。它在硬盘的硬盘分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。最先由IBM开发,在AIX系统上实现,OS/2 操作系统与 HP-UX也支持这个功能。在1998年,Heinz Mauelshagen 根据在 HP-UX 上的逻辑卷管理器,写作出第一个 Linux 版本的逻辑卷管理器。——维基百科
这是我们“我的地盘我做主”系列的第二季,讲述的是可爱又可恨的LVM,它能够实现我们的存储空间动态的在不重启和关机的情况下增加或缩减。这个功能这么强大为什么会可恨呢?因为如果我们的数据丢失那么在LVM级别找回数据要比直接在磁盘级别难的多的多,所以有些管理员就不太提倡使用LVM,不过话又说回来,“恨”难道不是因为“爱”吗?
通常情况下来说我们的LVM包括三部分:物理卷(PV),卷组(VG),逻辑卷(LV)。在实际操作中他是五个层次,在PV之下得有磁盘分区,在LV之上得有文件系统。LVM工作的原理是:
1、通过创建PV可以实现向PV之中动态的添加物理磁盘分区来控制PV的大小;
2、创建VG,可以把PV等分成多个物理扩展单元(PE),通过向VG中动态添加PE的形式来控制VG的大小;
3、创建LV,通过向LV中添加逻辑扩展单元(LE)来控制LV的大小;
4、通过伸展文件系统的方式,动态控制文件系统的大小。
在LVM中可以把PV理解为磁盘,把VG理解为扩展分区,把LV理解为扩展分区下的磁盘分区,但只是比喻。使用LVM还有一个好处就是可以创建快照,快照是LVM的一个特性,相当于访问原磁盘的另一个入口,能够热备份磁盘数据。它的原理是:创建快照的一瞬间扫描所对应磁盘的元数据区,并将时间戳停留在创建快照的时刻,如果在备份的过程中有文件被改变则事先将被改变的文件复制到快照区域内,然后备份从快照入口进行而不是直接从原磁盘进行。快照必须和被备份的数据在同一个LV之中。
接下了我们就通过一个实例来见证一下LVM的创建、动态增减和备份的过程(由于时间关系,今天还有两个博客没写呢555,就只复制命令及显示效果不再截图了):
## 创建PV
## 准备块设备,调整类型8e,不要格式化
## fdisk /dev/sdb|sdc
## [root@bogon ~]# pvcreate /dev/{sdb8,sdc1}
## Physical volume "/dev/sdb8" successfully created
## Physical volume "/dev/sdc1" successfully created
## [root@bogon ~]# pvs
## PV VG Fmt Attr PSize PFree
## /dev/sda2 vg0 lvm2 a-- 59.99g 7.99g
## /dev/sdb8 lvm2 --- 8.93g 8.93g
## /dev/sdc1 lvm2 --- 10.00g 10.00g
## [root@bogon ~]# pvdisplay [/dev/sdb8]
## --- Physical volume ---
## PV Name /dev/sda2
## VG Name vg0
## PV Size 60.00 GiB / not usable 8.00 MiB
## Allocatable yes
## PE Size 8.00 MiB
## Total PE 7679
## Free PE 1023
## Allocated PE 6656
## PV UUID EtliVS-uMl7-Cofz-oJdT-4ci8-PkeO-i9HtPI
##
## "/dev/sdb8" is a new physical volume of "8.93 GiB"
## --- NEW Physical volume ---
## PV Name /dev/sdb8
## VG Name
## PV Size 8.93 GiB
## Allocatable NO
## PE Size 0
## Total PE 0
## Free PE 0
## Allocated PE 0
## PV UUID aQypnH-kaw0-iNLf-tc4s-EDOk-2lF1-a8rsLh
##
## "/dev/sdc1" is a new physical volume of "10.00 GiB"
## --- NEW Physical volume ---
## PV Name /dev/sdc1
## VG Name
## PV Size 10.00 GiB
## Allocatable NO
## PE Size 0
## Total PE 0
## Free PE 0
## Allocated PE 0
## PV UUID z3VxUx-xs9y-IuQw-oXys-oBha-dISA-20NVn7
## yb,zb 更大的度量单位
## [root@bogon ~]# vgcreate myvg /dev/{sdb8,sdc1} --> 不指定PE大小默认为4M
## [root@bogon ~]# vgremove -t myvg --> 测试能否删除,去掉-t直接删除
## [root@bogon ~]# vgcreate -s 16M myvg /dev/{sdb8,sdc1} --> PE越大浪费空间越多,增加缩减LV越粗糙
## Volume group "myvg" successfully created
## [root@bogon ~]# vgdisplay
## --- Volume group ---
## VG Name myvg
## System ID
## Format lvm2
## Metadata Areas 2
## 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 2
## Act PV 2
## VG Size 18.92 GiB
## PE Size 16.00 MiB
## Total PE 1211
## Alloc PE / Size 0 / 0
## Free PE / Size 1211 / 18.92 GiB
## VG UUID uzQfZt-uFEg-2tm2-Mwe1-cXrd-zi9C-bi7rBQ
##
## 当在缩减VG时应当先把要去除的PV上的有数据的PE移动到(move)同VG中其他PV当中,而不能直接移除(remove)PV
## [root@bogon ~]# pvmove /dev/sdb8
## No data to move for myvg
## [root@bogon ~]# vgreduce myvg /dev/sdb8
## Removed "/dev/sdb8" from volume group "myvg"
## 扩展vg:通过向VG中添加更多的PV实现
## [root@bogon ~]# vgextend myvg /dev/sdb8
## Volume group "myvg" successfully extended
## 移除PV:首先要reduces VG然后再remove PV
## [root@bogon ~]# pvremove /dev/sdb8
## Labels on physical volume "/dev/sdb8" successfully wiped
##
## 创建LV:
## -l:指定PE的个数
## -L:直接指定大小(但必须是PE的整数倍)
## [root@bogon scrips]# lvcreate -L 3G -n mylv myvg
## Logical volume "mylv" created
##
## [root@bogon ~]# lvs
## LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
## mylv myvg -wi-a----- 2.00g
## [root@bogon ~]# lvdisplay
## --- Logical volume ---
## LV Path /dev/myvg/mylv
## LV Name mylv
## VG Name myvg
## LV UUID 3wwSaO-MyyT-jTQa-hVyq-nxoR-cX8v-ufFaiL
## LV Write Access read/write
## LV Creation host, time bogon, 2015-04-04 12:53:03 +0800
## LV Status available
## # open 0
## LV Size 2.00 GiB
## Current LE 128
## Segments 1
## Allocation inherit
## Read ahead sectors auto
## - currently set to 256
## Block device 253:4
## 逻辑卷LV的路径:两个链接路径,一个实际路径
## [root@bogon ~]# ll /dev/myvg/mylv
## lrwxrwxrwx 1 root root 7 Apr 4 12:53 /dev/myvg/mylv -> ../dm-4
## [root@bogon ~]# ll /dev/mapper/myvg-mylv
## lrwxrwxrwx 1 root root 7 Apr 4 12:53 /dev/mapper/myvg-mylv -> ../dm-4
##
## 创建文件系统:移除LV操作不可逆,移除后LV上的所有数据都会删除
## [root@bogon ~]# mke2fs -t ext4 /dev/myvg/mylv
## [root@bogon ~]# mount /dev/myvg/mylv /users/
## 移除LV:要先卸载,再移除
## [root@bogon ~]# lvremove -t /dev/myvg/mylv --> 去掉-t则为真正移除
##
## 扩展LV:先扩展物理边界,再扩展逻辑边界
## 1、扩展物理边界-->这里使用的是LVextend
## [root@bogon ~]# lvextend -L 5G /dev/myvg/mylv
## Size of logical volume myvg/mylv changed from 2.00 GiB (128 extents) to 5.00 GiB (320 extents).
## Logical volume mylv successfully resized
## [root@bogon ~]# df -h /dev/myvg/mylv
## Filesystem Size Used Avail Use% Mounted on
## /dev/mapper/myvg-mylv
## 2.0G 3.1M 1.9G 1% /users
## df -h 可以查看使用情况和挂载情况,逻辑边界仍没改变
## 2、扩展逻辑边界
## [root@bogon ~]# resize2fs /dev/myvg/mylv
## resize2fs 1.41.12 (17-May-2010)
## Filesystem at /dev/myvg/mylv is mounted on /users; on-line resizing required
## old desc_blocks = 1, new_desc_blocks = 1
## Performing an on-line resize of /dev/myvg/mylv to 1310720 (4k) blocks.
## The filesystem on /dev/myvg/mylv is now 1310720 blocks long.
##
## [root@bogon ~]# df -h /dev/myvg/mylv
## Filesystem Size Used Avail Use% Mounted on
## /dev/mapper/myvg-mylv
## 4.9G 4.0M 4.7G 1% /users
## 逻辑边界已经扩展了
## lvresize既能缩减又能扩展
## 缩减lv:切记要离线进行,先缩减文件系统大小,再缩减lv大小,并且缩减后的大小要能够容纳现有的所有数据
## [root@bogon ~]# du -sh /users/ --> 确保缩减后的容量能够装下现有数据
## 24K /users/
## [root@bogon ~]# umount /users/ --> 卸载要缩减的lv
## [root@bogon ~]# e2fsck -f /dev/myvg/mylv --> 强制检查lv,并且没有报错
## 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/327680 files (0.0% non-contiguous), 37983/1310720 blocks
##
## [root@bogon ~]# resize2fs /dev/myvg/mylv 3G --> 缩减文件系统至3G
## resize2fs 1.41.12 (17-May-2010)
## Resizing the filesystem on /dev/myvg/mylv to 786432 (4k) blocks.
## The filesystem on /dev/myvg/mylv is now 786432 blocks long.
##
## [root@bogon ~]# lvreduce -L 3G /dev/myvg/mylv --> 缩减物理边界至3G
## WARNING: Reducing active logical volume to 3.00 GiB
## THIS MAY DESTROY YOUR DATA (filesystem etc.)
## Do you really want to reduce mylv? [y/n]: y
## Size of logical volume myvg/mylv changed from 5.00 GiB (320 extents) to 3.00 GiB (192 extents).
## Logical volume mylv successfully resized
## [root@bogon ~]# lvs /dev/myvg/mylv
## LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
## mylv myvg -wi-a----- 3.00g
##
## 创建快照卷
## 快照卷应该是只读的,不能人为的向上面写东西
## 1、快照卷要与原卷在同一卷组中,因此创建快照卷无需指定卷组,而且原卷中要有足够的空间来创建快照卷
## [root@bogon ~]# lvcreate -L 50M -n mylv-snap -p r -s /dev/myvg/mylv
## --> -L指定大小,如果不是pe的整数倍则是大于指定数的最小整数,-n指定快照名称,-p指定权限r只读,-s指定为创建快照卷,/dev/myvg/mylv指定对谁创建快照卷
## Rounding up size to full physical extent 64.00 MiB
## Logical volume "mylv-snap" created
## 2、挂载快照卷
## [root@bogon ~]# mount -r /dev/myvg/mylv-snap /backup/
## [root@bogon ~]# ll /backup/
## total 20
## drwx------ 2 root root 16384 Apr 4 16:09 lost+found
## -rw-r--r-- 1 root root 3427 Apr 4 16:10 passwd
## 3、修改原卷,快照卷中的内容不会更新,如果实时修改需要用到在线备份工具或冗余工具
## 4、要通过快照卷备份原卷,备份过之后就可以卸载删掉快照卷
## 逻辑卷不会简单的使用,因为物理设备坏的几率会变大,通常会把LVM放到RAID上以降低物理设备坏的几率
## LVM一般都是放的操作系统,如果坏了重装个系统就可以了
OK,希望本文能够给您带来帮助,如有错误敬请指出,拜谢!
本文出自 “Linuxlove” 博客,请务必保留此出处http://linuxlover.blog.51cto.com/2470728/1631540
原文地址:http://linuxlover.blog.51cto.com/2470728/1631540