一、 前言
LVM是逻辑卷管理(Logical Volume Manager)的简称,他是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,和直接使用物理存储在管理上相比,提供了更好灵活性。
LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,和硬件相关的存储设置被其隐藏,你能不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样能减少操作成本.
LVM和直接使用物理存储相比,有以下好处:
1. 灵活的容量.
当使用逻辑卷时,文件系统能扩展到多个磁盘上,你能聚合多个磁盘或磁盘分区成单一的逻辑卷.
2.可伸缩的存储池.
你能使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备.
3.在线的数据再分配.
你能在线移动数据,数据能在磁盘在线的情况下重新分配.比如,你能在线更换可热插拔的磁盘.
4. 方便的设备命名
逻辑卷能按你觉得方便的方式来起所有名称.
5.磁盘条块化.
你能生成一个逻辑盘,他的数据能被条块化存储在2个或更多的磁盘上.这样能明显提升数据吞吐量.
6.映像卷
逻辑卷提供方便的方法来映像你的数据.
7.卷快照
使用逻辑卷,你能获得设备快照用来一致性备份或测试数据更新效果而不影响真实数据.
二、 LVM基本术语
前面谈到,LVM是在物理存储上添加的一个逻辑层,来为文件系统屏蔽下面的硬件存储设备,提供了一个抽象的盘卷,在盘卷上建立文件系统。首先我们
讨论以下几个LVM术语:
* 物理存储介质(The Physical Media)
这里指系统的存储设备,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
* 物理卷(PV, Physical Volume)
物理卷就是指磁盘,磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘
等)比较,却包含有和LVM相关的管理参数。当前LVM允许你在每个物理卷上保存这个物理卷的0至2份元数据拷贝.默认为1,保存在设备的开始处.为2时,
在设备结束处保存第二份备份.
* 卷组(VG, Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。能在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
* 逻辑卷(LV, Logical Volume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上能建立文件系统(比如/home或/usr等)。
*线性逻辑卷 (Linear Volumes)
一个线性逻辑卷聚合多个物理卷成为一个逻辑卷.比如,如果你有两个60GB硬盘,你能生成120GB的逻辑卷.
*条块化的逻辑卷(Striped Logical Volumes)
当你写数据到此逻辑卷中时,文件系统能将数据放置到多个物理卷中.对于大
量连接读写操作,他能改善数据I/O效率.
*映像的逻辑卷(Mirrored Logical Volumes)
映像在不同的设备上保存一致的数据.数据同时被写入原设备及映像设备.他提供设备之间的容错。
*快照卷(Snapshot Volumes)
快照卷提供在特定瞬间的一个设备虚拟映像,当快照开始时,他复制一份对当前数据区域的改动,由于他优先执行这些改动,所以他能重构当前设备的
状态。
* PE(physical extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小是可设置的,默认为4MB。
* LE(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中相同,逻辑卷及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷
组描述符区域)中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的
实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。
三、 安装LVM
首先确定系统中是否安装了lvm工具:
[root@test2 root]# rpm ?qa|grep lvm
lvm-x-x-x
如果命令结果输入类似于上例,那么说明系统已安装了LVM管理工具;如果命令没有输出则说明没有安装LVM管理工具,则需要从网络下载或从光盘
装LVM rpm工具包。
安装了LVM的RPM软件包以后,要使用LVM还需要设置内核支持LVM。RedHat默认内核是支持LVM的,如果需要重新编译内核,则需要在设置内核时,进
入Multi-device Support (RAID and LVM)子菜单,选中以选项:
Multiple devices driver support (RAID and LVM)
Device mapper support
Snapshot target (EXPERIMENTAL)
Mirror target (EXPERIMENTAL)
然后重新编译内核,即可将LVM的支持添加到新内核中。
为了使用LVM,要确保在系统启动时激活LVM,在RedHa的版本中,系统启动脚本已具有对激活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
vgchange -a y命令激活系统所有卷组。
------------------------------------------------------------------------------------------------------------------------
实验:
1.添加三块硬盘分别是1G,2G,4G。
[root@yian Desktop]# fdisk -l ------查看新添加的硬盘sdb,sdc,sdd。
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63
sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000d4ee
Device Boot Start End Blocks Id System
/dev/sda1 1 262 2097152 82 Linux swap / Solaris
Partition 1 does not end on cylinder boundary.
/dev/sda2 * 262 2611 18873344 83 Linux
Disk /dev/sdb: 1073 MB, 1073741824 bytes -------sdb是一个G。
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdc: 2147 MB, 2147483648 bytes --------sdc是两个G。
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdd: 4294 MB, 4294967296 bytes --------sdd是四个G。
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
2.创建物理卷pv:
[root@yian Desktop]# pvcreate /dev/sdb /dev/sdc /dev/sdd ----将物理磁盘设备初始化为物理卷。
Physical volume "/dev/sdb" successfully created
Physical volume "/dev/sdc" successfully created
Physical volume "/dev/sdd" successfully created
[root@yian Desktop]# pvs ----查看物理卷。
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 a-- 1.00g 1.00g
/dev/sdc lvm2 a-- 2.00g 2.00g
/dev/sdd lvm2 a-- 4.00g 4.00g
3.创建逻辑卷组vg:
[root@yian Desktop]# vgcreate vglinux /dev/sdb /dev/sdc /dev/sdd -----创建卷组,并将PV加入卷组中。
Volume group "vglinux" successfully created
[root@yian Desktop]# vgs -----查看卷组。
VG #PV #LV #SN Attr VSize VFree
vglinux 3 0 0 wz--n- 6.99g 6.99g
4.创建逻辑卷lv
[root@yian Desktop]# lvcreate -n mylv -L 1G /dev/vglinux ------基于卷组创建逻辑卷。
Logical volume "mylv" created
[root@yian Desktop]# mkfs.ext4 /dev/vglinux/mylv ------为创建好的逻辑卷创建文件系统。
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block g
roups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@yian Desktop]# mount /dev/vglinux/mylv /mnt -------将格式化好的逻辑卷挂载使用。
[root@yian Desktop]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 3.5G 14G 21% /
tmpfs 504M 224K 503M 1% /dev/shm
/dev/mapper/vglinux-mylv 1008M 34M 924M 4% /mnt
[root@yian Desktop]# lvs --------查看逻辑卷。
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
mylv vglinux -wi-ao---- 1.00g
[root@yian Desktop]# vgs
VG #PV #LV #SN Attr VSize VFree
vglinux 3 1 0 wz--n- 6.99g 5.99g
5.拉伸逻辑卷:逻辑卷的拉伸操作可以在线执行,不需要卸载逻辑卷。
[root@yian Desktop]# vgs -----查看卷组大小,保证卷组由足够的空闲空间。
VG #PV #LV #SN Attr VSize VFree
vglinux 3 1 0 wz--n- 6.99g 5.99g
[root@yian Desktop]# lvextend -L +4G /dev/vglinux/mylv -----扩展逻辑卷。
Extending logical volume mylv to 5.00 GiB
Logical volume mylv successfully resized
[root@yian Desktop]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
mylv vglinux -wi-ao---- 5.00g
[root@yian Desktop]# resize2fs /dev/vglinux/mylv ------更新文件系统。
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vglinux/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/vglinux/mylv to 1310720 (4k) blocks.
The filesystem on /dev/vglinux/mylv is now 1310720 blocks long.
[root@yian Desktop]# df -h -----查看硬盘使用情况。
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 3.5G 14G 21% /
tmpfs 504M 224K 503M 1% /dev/shm
/dev/mapper/vglinux-mylv 5.0G 34M 4.7G 1% /mnt
6.缩小逻辑卷:逻辑卷的缩写操作必须离线执行,要卸载逻辑卷。
[root@yian Desktop]# umount /dev/vglinux/mylv ------卸载已经挂载的逻辑卷。
[root@yian Desktop]# e2fsck -f /dev/vglinux/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/vglinux/mylv: 11/327680 files (0.0% non-contiguous), 29278/1310720 blocks
[root@yian Desktop]# resize2fs /dev/vglinux/mylv 3G -------缩小文件系统。
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vglinux/mylv to 786432 (4k) blocks.
The filesystem on /dev/vglinux/mylv is now 786432 blocks long.
[root@yian Desktop]# lvreduce -L -1G /dev/vglinux/mylv -----缩小lv 1G。
WARNING: Reducing active logical volume to 4.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
Reducing logical volume mylv to 4.00 GiB
Logical volume mylv successfully resized
[root@yian Desktop]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
mylv vglinux -wi-a----- 4.00g
[root@yian Desktop]# mount /dev/vglinux/mylv /mnt
[root@yian Desktop]#
7.卷组的缩小和扩展:
[root@yian Desktop]# vgs
VG #PV #LV #SN Attr VSize VFree
vglinux 3 1 0 wz--n- 6.99g 2.99g
[root@yian Desktop]# vgreduce vglinux /dev/sdb -----缩小卷组。
Removed "/dev/sdb" from volume group "vglinux"
[root@yian Desktop]# vgs
VG #PV #LV #SN Attr VSize VFree
vglinux 2 1 0 wz--n- 5.99g 1.99g
[root@yian Desktop]# vgextend vglinux /dev/sdb ------扩展卷组。
Volume group "vglinux" successfully extended
[root@yian Desktop]# vgs
VG #PV #LV #SN Attr VSize VFree
vglinux 3 1 0 wz--n- 6.99g 2.99g
[root@yian Desktop]#
8.删除逻辑卷lv:首先先卸载逻辑卷。
[root@yian Desktop]# umount /dev/vglinux/mylv ----卸载逻辑卷。
[root@yian Desktop]# lvremove /dev/vglinux/mylv
Do you really want to remove active logical volume mylv? [y/n]: y ----删除逻辑卷。
Logical volume "mylv" successfully removed
[root@yian Desktop]# lvs
[root@yian Desktop]# vgremove /dev/vglinux ----删除卷组。
Volume group "vglinux" successfully removed
[root@yian Desktop]# vgs
No volume groups found
[root@yian Desktop]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 a-- 1.00g 1.00g
/dev/sdc lvm2 a-- 2.00g 2.00g
/dev/sdd lvm2 a-- 4.00g 4.00g
[root@yian Desktop]# pvremove /dev/sdb /dev/sdc /dev/sdd ------删除物理卷。
Labels on physical volume "/dev/sdb" successfully wiped
Labels on physical volume "/dev/sdc" successfully wiped
Labels on physical volume "/dev/sdd" successfully wiped
[root@yian Desktop]# pvs