Linux LVM逻辑卷管理详细介绍

本文介绍了LVM的概念、作用以及使用方法,旨在帮助您了解LVM,并能够使用LVM对您的磁盘系统进行灵活的管理。

一、 什么是LVM

1.1 LVM概念 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是对磁盘分区进行管理的一种机制,建立在硬盘和分区之上的一个逻辑层,用来提高磁盘管理的灵活性。通过LVM可将若干个磁盘分区连接为一个整块的卷组(Volume Group),形成一个存储池。可以在卷组上随意创建逻辑卷(Logical Volumes),并进一步在逻辑卷上创建文件系统,与直接使用物理存储在管理上相比,提供了更好灵活性。 LVM本质上是一个虚拟设备驱动,处于物理设备和文件系统层之间,维护着逻辑盘区和物理盘区之间的映射。它将几块磁盘或者分区组合起来形成一个存储池或者卷组,LVM从卷组中划分出不同大小的逻辑卷创建新的逻辑设备。 图1是LVM结构模拟图示。

lvm
图1 LVM构成结构示意图
1.2 LVM优点
LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移。这样可以减少操作成本。
LVM与直接使用物理存储相比,有以下优点:
1.灵活的容量
当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷。
2.可伸缩的存储池
你可以使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备。
3.在线的数据再分配
你可以在线移动数据,数据可以在磁盘在线的情况下重新分配。比如,你可以在线更换可热插拔的磁盘。
4.方便的设备命名
逻辑卷可以按你觉得方便的方式来起任何名称。
5.磁盘条块化
你可以生成一个逻辑盘,它的数据可以被条块化存储在2个或更多的磁盘上。这样可以明显提升数据吞吐量。
6.镜像卷
LVM逻辑卷提供方便的方法来镜像你的数据。
7.卷快照
使用逻辑卷,你可以获得设备快照用来一致性备份或者测试数据更新效果而不影响真实数据。

二、LVM的作用

通过LVM可以方便的在线调整存储卷的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和 “sdb”。当系统添加了新的磁盘,通过LVM可以直接扩展文件系统跨越该磁盘,而不必将文件移动到新的磁盘上。
此外,LVM快照功能以及LVM镜像功能,也被普遍应用于数据的备份与恢复系统中。

三、LVM相关基本概念

lvm lv pv vg
图2 PV、VG、LV的关系
3.1物理存储介质(The physical media)
这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
3.2物理卷(Physical Volume)
物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
3.3卷组(Volume Group)
卷组由物理卷组成,类似于非LVM系统中的物理硬盘,可以在卷组上创建一个或多个”LVM分区”(逻辑卷)。
3.4逻辑卷(Logical Volume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
线性逻辑卷 (Linear Volumes)
一个线性逻辑卷聚合多个物理卷成为一个逻辑卷.比如,如果你有两个60GB硬盘,你可以生成120GB的逻辑卷.
3.5条块化的逻辑卷(Striped Logical Volumes)
当你写数据到此逻辑卷中时,文件系统可以将数据放置到多个物理卷中.对于大量连接读写操作,它能改善数据I/O效率.
3.6镜像的逻辑卷(Mirrored Logical Volumes)
镜像在不同的设备上保存一致的数据.数据同时被写入原设备及镜像设备.它提供设备之间的容错。
3.7 快照卷(Snapshot Volumes)
快照卷提供在特定瞬间的一个设备虚拟映像,当快照开始时,它复制一份对当前数据区域的改变,由于它优先执行这些改变,所以它可以重构当前设备的状态。
3.8 PE(Physical Extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
3.9 LE(Logical Extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
3.10 VGDA(卷组描述符区域)
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作 时,就会根据VGDA建立的映射机制来访问实际的物理位置。

四、安装LVM

首先请确定内核支持LVM,Turbolinux发行版内核均已支持LVM。如果您的内核不支持LVM,您可以手工编译内核,在配置内核时,进入Multi-device Support (RAID and LVM)子菜单,选中以下选项:
[*] Multiple devices driver support (RAID and LVM)
然后重新编译内核,即可将LVM的支持添加到新内核中。
确定系统中是否安装了lvm工具:
# rpm -qa | grep lvm
 lvm2-2.02.16-3
如果命令结果类似于上例,说明系统已经安装了LVM管理工具;如果命令没有输出则说明没有安装LVM管理工具,则需要从网络下载或者从光盘装LVM rpm工具包。
为了使用LVM,要确保在系统启动时激活LVM,Turbolinux发行版在启动时已经具有对激活LVM的 支持,在/etc/rc.d/rc.sysinit中有以下内容:
      if [ -x /sbin/lvm.static ]; then
              action $”Setting up Logical Volume Management:” /sbin/lvm.static vgchange -a y –ignorelockingfailure
      fi
在ubuntu系统下可以使用如下命令安装LVM2:
sudo apt-get install lvm

五、创建和管理LVM

要创建一个LVM系统,一般需要经过以下步骤,参考图3所示:
1)通过fdisk 工具将磁盘转换为linux分区;
2)通过pvcreate命令将linux分区转换成物理卷(PV);
3)通过vgcreate命令将创建好的物理卷处理成卷组(VG);
4)通过lvcreate命令将卷组分成若干个逻辑卷(LV);
5)对逻辑卷进行格式化、挂载、动态调整逻辑卷的大小,并且该操作不会影响逻辑卷(Lv)上的数据。
lvm
图3 LVM创建流程图
具体步骤操作命令见如下详细介绍。
5.1、 创建分区
使用分区工具(如:fdisk等)创建LVM分区,方法和创建其他一般分区的方式是一样的,区别仅仅是LVM的分区类型为8e。当然,在lvm2版本中已经没有分区类型的限制。
fdisk -l /dev/sdb /dev/sdc
如果要将使用整块盘,可以通过下面的命令来覆盖磁盘上的原有分区信息:
#dd if=/dev/zero of=/dev/sdc bs=512 count=1
5.2、 创建物理卷
创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。将整个磁盘创建为物理卷的命令为:
# pvcreate /dev/sdb
Physical volume “/dev/sdb” successfully created
将单个分区创建为物理卷的命令为:
# pvcreate /dev/sdc1
Physical volume “/dev/sdc1” successfully created
也可以同时生成多个卷:
#pvcreate /dev/sdb /dev/sdc1
5.3、扫描块设备
通过lvmdiskscan可以看到那些设备成为了物理卷.
#lvmdiskscan
5.4、显示物理卷
可以使用pvs,pvscan,pvdisplay来显示当前系统中的物理卷.
#pvs
#pvscan
#pvdisplay
5.5、移除物理卷
#pvremove /dev/sdc
Labels on physical volume “/dev/sdc” successfully wiped
5.6、 创建卷组
创建卷组的命令为vgcreate,将使用pvcreate建立的物理卷创建为一个完整的卷组:
# vgcreate lvm_test /dev/sdc1 /dev/sdb
Volume group “lvm_test” successfully created
vgcreate命令第一个参数是指定该卷组的逻辑名:lvm_test。后面参数是指定希望添加到该卷组的所有分区和磁盘。vgcreate在创建卷组 lvm_test 以外,还设置使用大小为4 MB的PE(默认为4MB),这表示卷组上创建的所有逻辑卷都以 4 MB 为增量单位来进行扩充或缩减。PE最小为1KB ,并且必须总是1KB的 2^n 的倍数(使用-s指定,具体请参考man vgcreate)。
5.7、 激活卷组
卷组在创建时默认激活,也可以使用vgchange来激活卷组:
# vgchange -a y lvm_test
5.8、 添加新的物理卷到卷组中
当系统安装了新的磁盘或新建分区并创建了新的物理卷,而要将其添加到已有卷组时,就需要使用vgextend命令:
#fdisk -l /dev/sdc
#pvcreate /dev/sdc2
# vgextend lvm_test /dev/sdc2
这里/dev/sdc2是新的物理卷。
5.9、显示卷组
显示卷组可以使用vgs和vgdisplay.
# vgs
# vgdisplay
5.10、扫描磁盘生成缓存文件
#vgscan
5.11、 从卷组中删除一个物理卷
要从一个卷组中删除一个物理卷,首先要确认要删除的物理卷没有被任何逻辑卷正在使用,就要使用pvdisplay命令察看一个该物理卷信息:
#pvdisplay /dev/sdc2
— Physical volume —
PV Name               /dev/sdc2
VG Name               lvm_test
PV Size               1.53 GB / not usable 868.00 KB
Allocatable           yes
PE Size (KByte)       4096
Total PE              392
Free PE               392
Allocated PE          0 (表示未被使用)
PV UUID               jAiils-1vRz-Td9k-1AiD-kIJs-191z-YMz09H
如果某个物理卷正在被逻辑卷所使用,就需要将该物理卷的数据备份到其他地方,然后再删除。删除物理卷的命令为vgreduce:
# vgreduce lvm_test /dev/sdc2
Removed “/dev/sdc2” from volume group “lvm_test”
5.12、 创建逻辑卷
创建逻辑卷的命令为lvcreate:
# lvcreate -L 1500 –n test lvm_test
Logical volume “test” created
该命令就在卷组lvm_test上创建名字为test,大小为1500M的逻辑卷,并且设备入口为/dev/lvm_test/test (lvm_test为卷组名,test为逻辑卷名)。如果希望创建一个使用全部卷组的逻辑卷,则需要首先察看该卷组的PE数,然后在创建逻辑卷时指定:
# vgdisplay lvm_test| grep “Total PE”
Total PE 4731
# lvcreate -l 4731 lvm_test -n test
Logical volume “test” created
5.13、创建条块化的逻辑卷
# lvcreate -L 500M -i2 -n test lvm_test
Using default stripesize 64.00 KB
Rounding size (125 extents) up to stripe boundary size (126 extents)
Logical volume “test” created
-i2指此逻辑卷在两个物理卷中条块化存放数据,默认一块大小为64KB.
5.14、创建镜像的逻辑卷。
#lvcreate -L 52M -m1 -n test lvm_test /dev/sdb1 /dev/sdc1 /dev/sdb2
 Logical volume “test” created
-m1表示只生成一个单一镜像,镜像分别放在/dev/sdb1和/dev/sdc1上,镜像日志放在/dev/sdb2上.
5.15、创建快照卷。
#lvcreate –size 10 –snapshot –name snaptest /dev/lvm_test/test
5.16、 创建文件系统
如使用ext3文件系统:
#mkfs.ext3 /dev/lvm_test/test
创建了文件系统以后,就可以加载并使用它:
# mkdir /mnt/test
# mount /dev/lvm_test/test /mnt/test
如果希望系统启动时自动加载文件系统,则还需要在/etc/fstab中添加内容:
/dev/lvm_test/test /mnt/test ext3 defaults 1 2
5.17、 删除一个逻辑卷
删除逻辑卷以前首先需要将其卸载,然后删除:
# umount /dev/lvm_test/test
# lvremove /dev/lvm_test/test
Do you really want to remove active logical volume “test”? [y/n]: y
Logical volume “test” successfully removed
5.18、 扩展逻辑卷大小
LVM提供了方便调整逻辑卷大小的能力,扩展逻辑卷大小的命令是lvextend:
# lvextend -L12G /dev/lvm_test/test
Extending logical volume test to 12.00 GB
Logical volume test successfully resized
上面的命令就实现将逻辑卷test的大小扩大为12G。
# lvextend -L+1G /dev/lvm_test/test
Extending logical volume test to 13.00 GB
Logical volume test successfully resized
上面的命令就实现将逻辑卷test的大小增加1G。
增加了逻辑卷的容量以后,就需要修改文件系统大小以实现利用扩充的空间。对于希望调整被加载的文件系统大小,使用ext2online(ext2resize) 或 resize2fs.
#df -h
# ext2online /dev/lvm_test/test
ext2online /dev/lvm_test/test
ext2online v1.1.18 – 2001/03/18 for EXT2FS 0.5b
#df -h
Filesystem            容量 已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol01         16G   11G 3.6G 76% /
/dev/sda1             494M   18M 451M   4% /boot
none                      506M     0 506M   0% /dev/shm
/dev/mapper/lvm_test-test         13G   63M   13G   1% /mnt/test
一般建议最好将文件系统卸载,调整大小,然后再加载:
# umount /dev/lvm_test/test
#resize2fs /dev/lvm_test/test
# mount /dev/lvm_test/test /mnt/test
5.19、 减少逻辑卷大小
使用lvreduce即可实现对逻辑卷的容量,同样需要首先将文件系统卸载:
# umount /mnt/test
#e2fsck -f /dev/lvm_test/test
# resize2fs /dev/lvm_test/test 11G
# lvreduce -L -1.992G /dev/lvm_test/test (少2个PE的大小)
# resize2fs /dev/lvm_test/test (通过此命令确认是否文件系统大小与收缩后的逻辑卷大小匹配)
# mount /dev/lvm_test/test /mnt/test
5.20、显示逻辑卷
通过lvscan,lvs及lvdisplay可以察看当前系统中存在的逻辑卷。
# lvdisplay
#lvscan
#lvs -o +devices
5.21、使用过滤控制LVM的设备扫描
通过编辑/etc/lvm/lvm.conf 中的filter段,来定义过滤那些设备要扫描。
filter =[ “a|/dev/sd.*|”, “a|/dev/hd.*|”, “r|.*|” ]
上面对scsi及ide设备扫描,对其它设备均不扫描。
5.22、在线数据迁移
通过pvmove可以将一个PV上的数据迁移到新的PV上,也可以将PV上的某个LV迁移到另一个PV上。
#lvs -o +devices
 LV       VG     Attr   LSize Origin Snap% Move Log Copy% Devices
 LogVol00 VolGroup00 -wi-ao 2.88G      /dev/sda2(0)
 LogVol01 VolGroup00 -wi-ao 1.00G      /dev/sda2(92)
 test     lvm_test   -wi-ao 52.00M      /dev/sdb1(0)
#pvmove -n test /dev/sdb1 /dev/sdc1
#lvs -o +devices
 LV       VG      Attr   LSize Origin Snap% Move Log Copy% Devices
 LogVol00 VolGroup00 -wi-ao 2.88G          /dev/sda2(0)
 LogVol01 VolGroup00 -wi-ao 1.00G           /dev/sda2(92)
 test     lvm_test   -wi-ao 52.00M           /dev/sdc1(0)
5.23、删除卷组
按照顺序卸载文件系统,删除逻辑卷,然后删除卷组。
#umount /mnt/test
# lvremove /dev/lvm_test/test
Do you really want to remove active logical volume “test”? [y/n]: y
Logical volume “test” successfully removed
#vgremove lvm_test
 Volume group “lvm_test” successfully removed
5.24、故障排查
通过在命令后加 -v,-vv,-vvv或-vvvv来获得更详细的命令输出。
通过在lvs,vgs后加-P可以更好的查看失败设备.
#vgs -a -o +devices -P
 Partial mode. Incomplete volume groups will be activated read-only.
 VG        #PV #LV #SN Attr   VSize    VFree   Devices
 VolGroup00   1   2   0 wz–n-    3.88G      0 /dev/sda2(0)
 VolGroup00   1   2   0 wz–n-    3.88G      0 /dev/sda2(92)
 lvm_test     2   2   0 wz–n- 1016.00M 896.00M pvmove0(0)
 lvm_test   2   2   0 wz–n- 1016.00M 896.00M /dev/sdb(0),/dev/sdc(0)
#lvs -a -o +devices -P
 Partial mode. Incomplete volume groups will be activated read-only.
 Failure parsing mirror status fraction: 1 core
 Failure parsing mirror status fraction: 1 core
 LV    VG    Attr   LSize Origin Snap% Move    Log Copy% Devices
 LogVol00 VolGroup00 -wi-ao 2.88G            /dev/sda2(0)
 LogVol01 VolGroup00 -wi-ao 1.00G            /dev/sda2(92)
 [pvmove0] lvm_test  p-C-ao 60.00M  /dev/sdb /dev/sdb(0),/dev/sdc(0)
 test      lvm_test   -wI-a- 60.00M            pvmove0(0)

六、LVM操作的相关命令

6.1、物理卷命令
pvcreate    创建LVM物理卷
pvdisplay   显示已创建的物理卷信息
pvchange   设置PV的性能,允许或拒绝从这个磁盘上分配置另外的PE。
pvmove    在一个卷组中从源到目的移动已经分配的PE
pvremove:删除一个物理卷(也就是从物理卷中删除一个LVM标签)
6.2、卷组命令
vgcreate    创建卷组
vgdisplay   显示卷组的信息
vgchange   激活或者撤消卷组,允许卷组使用或不使用quorum来挂载
vgchange -a y :激活所有卷组 (开机执行,redhat可在/etc/rc.d/rc.sysinit系统启动初始化脚本里可以找到)
vgchange -a n :关闭所有卷组(提示:必须在umount所有的文件系统后,才能成功执行
vgextend    通过添加磁盘扩充卷组
vgreduce   删除物理卷缩减卷组,vgscan 扫描所有磁盘寻找卷组
vgsync     同步镜像
remove     删除卷组
vgexport   从系统中删除一个卷组,但不修改在基于物理卷的信息
vgimport   通过扫描使用vgexport命令输出的物理卷在系统中增加一个
Vgcfgbackup 保存卷组的配置信息,记住一个卷组有一个或多个物理卷组成
vgcfgrestore 恢复卷的配置信息
vgscan:读取系统中创建的所有卷组
6.3、逻辑卷命令
lvcreate   生成逻辑卷
lvdisplay 显示逻辑卷的信息
lvchange   改变逻辑卷的特性,包括可用性、调度策略、权限、块重定
位、分配策略、镜像缓存的可用性lvextend 增加逻辑卷的空间
extendfs 扩展文件系统的大小
lvreduce 减少逻辑卷的空间
lvremove 删除逻辑卷
lvsplit   分割镱像的逻辑卷
lvmerge   合并lvsplit过的逻辑卷
lvsync    同步逻辑卷
lvmmigrate 在一个分区中为逻辑卷迁移准备一个ROOT文件
lvlnboot   用来建立root,primary swap ,or dump逻辑卷
lvlnboot   删除lvlnboot建立的逻辑卷
6.4、其他命令
fdisk -l :查看系统中都认到了那些物理硬盘
mkfs:基于逻辑卷创建一个相应类型的文件系统
mkdir -p $mount_piont:创建一个挂载目录
创建好的文件系统位于:
/dev/create_vg_name/lv_name
mount /dev/create_vg_name/lv_name $mount_piont:挂载文件系统

链接:Linux LVM逻辑卷管理详细介绍

https://lzw.me/a/linux-lvm.html

发表回复