大纲
1、LVM是什么?
2、LVM分层结构
3、LVM几个关键术语
4、实战演练
1、LVM是什么?
LVM(Logical Volume Manager)即逻辑卷管理器,它最先是在Linux 2.4内核中被集成到内核中去的,它的出现改变了传统的磁盘空间管理理念。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存在。
目前LVM已经发展到LVM2版本,须在Linux内核2.6及以上可用。
2、LVM分层结构
LVM使用分层次的结构,从概念上看如下图所示:
最顶上是实际的物理磁盘及其划分的分区,和其上的物理卷(PV)。一个或多个物理卷可以用来创建卷组(VG)。然后基于卷组可以创建逻辑卷(LV)。只要在卷组中有可用空间,就可以随心所欲的创建逻辑卷。逻辑卷就相当于普通分区一样,可以使用mke2fs创建文件系统,然后可以在操作系统挂载和访问。
3、LVM几个关键术语
PV(physical volume)
物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
VG(volume group)
卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical volume)
逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
PE(physical extent)
物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
LE(logical extent)
逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
卷组描述区域
卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。
4、实战演练
首先,我们得准备实验环境,在这里我首先创建4个1G的分区(注意,并不要求分区的大小一致),然后修改它们的分区类型为8E。
fdisk 分区:
[root@localhost ~]# fdisk -l /dev/sdb # 查看/dev/sdb上的分区 Disk /dev/sdb: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System [root@localhost ~]# fdisk /dev/sdb Command (m for help): p Disk /dev/sdb: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System ### 创建分区和修改分区类型的过程省略,调整为如下 Command (m for help): p Disk /dev/sdb: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 123 987966 8e Linux LVM # 注意类型为 8e /dev/sdb2 124 246 987997+ 8e Linux LVM /dev/sdb3 247 369 987997+ 8e Linux LVM /dev/sdb4 370 652 2273197+ 5 Extended /dev/sdb5 370 492 987966 8e Linux LVM Command (m for help): w # 写入分区表 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# partprobe /dev/sdb # 内核重新载入分区表
pvcreate 将物理分区或硬盘创建为物理卷(PV)
### pvcreate - initialize a disk or partition for use by LVM # pvcreate /dev/sdb1 # partition # pvcreate /dev/sdc # disk [root@localhost ~]# pvcreate /dev/sdb{1,2,3} # 把3个分区创建为PV Writing physical volume data to disk "/dev/sdb1" Physical volume "/dev/sdb1" successfully created Writing physical volume data to disk "/dev/sdb2" Physical volume "/dev/sdb2" successfully created Writing physical volume data to disk "/dev/sdb3" Physical volume "/dev/sdb3" successfully created [root@localhost ~]# pvs # 查看创建的PV PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 964.81M 964.81M /dev/sdb2 lvm2 a-- 964.84M 964.84M /dev/sdb3 lvm2 a-- 964.84M 964.84M ### 当然,也可以使用pvdisplay 查看更详细的信息
vgcreate 将物理卷(PV)创建为卷组(VG)
下面,我们创建一个名为myvg的卷组
### vgcreate VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] # [-s|--physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE]] # 指定PE的大小 [root@localhost ~]# vgcreate myvg /dev/sdb{1,2,3} # 创建卷组myvg Volume group "myvg" successfully created [root@localhost ~]# vgs # 显示卷组 VG #PV #LV #SN Attr VSize VFree myvg 3 0 0 wz--n- 2.82G 2.82G [root@localhost ~]# vgdisplay # 更详细的方式查看 --- Volume group --- VG Name myvg # 卷组名 System ID Format lvm2 # lvm版本 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 2.82 GB # VG的大小 PE Size 4.00 MB # 默认PE块的大小,可以使用-s选项指定 Total PE 723 # 总计PE块 Alloc PE / Size 0 / 0 # 已分配的PE Free PE / Size 723 / 2.82 GB # 剩余的PE VG UUID 99yTE0-Lc3f-b5rz-qa4F-d8YD-XBfM-U4DYoM
物理卷给卷组提供空间,那么卷组就为逻辑卷提供空间,只要在这个卷组中还有可用空间,我们就可以随意创建逻辑卷。
当创建完成VG之后,那么在底层的PV中,就形成叫做PE的存储单元。在创建PV的时候,并不会创建PE,而是在创建VG之后才会创建它。为什么呢?
因为在同一个VG中,PE的大小必须是一样的。当VG中的PE大小被确定,那么新加入VG的PV中的PE也会自动调整为相同的大小。
lvcreate 在卷组中创建逻辑卷(LV)
### lvcreate - create a logical volume in an existing volume group # lvcreate {-l|--extents LogicalExtentsNumber[%{VG|PVS|FREE}] | -L|--size LogicalVolumeSize[bBsSkKmMgGtTpPeE]} VolumeGroupName [PhysicalVolumePath[:PE[-PE]]...] # [-n|--name LogicalVolumeName] # 指定逻辑卷的名字 # [-i|--stripes Stripes [-I|--stripesize StripeSize]] # 条带模式,类似raid0 # [-m|--mirrors Mirrors] # 镜像模式,类似raid1 [root@localhost ~]# lvcreate -L 2G -n mylv1 myvg # 从myvg卷组中创建一个2G的lv Logical volume "mylv1" created [root@localhost ~]# lvdisplay --- Logical volume --- LV Name /dev/myvg/mylv1 # 注意逻辑卷的路径 VG Name myvg LV UUID D1NF1V-zPl7-cvXs-hk0c-2Fbx-WKZ1-tF49Fi LV Write Access read/write LV Status available # open 0 LV Size 2.00 GB Current LE 512 Segments 3 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 [root@localhost ~]# ls -l /dev/myvg/* lrwxrwxrwx 1 root root 22 Jun 24 03:26 /dev/myvg/mylv1 -> /dev/mapper/myvg-mylv1 ### 可以看出,我们创建的逻辑卷是一个符号链接
mke2fs,mount 格式化并挂载逻辑卷
当LV创建完成后,就可以像普通分区那样对其进行格式化和挂载操作了。
[root@localhost ~]# mke2fs -j /dev/myvg/mylv1 # 格式化操作 mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 262144 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=536870912 16 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 35 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@localhost ~]# mount /dev/myvg/mylv1 /mnt # 挂载到/mnt目录 [root@localhost ~]# mount -l # 查看挂载情况 /dev/sda3 on / type ext3 (rw) [/] proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/sda1 on /boot type ext3 (rw) [/boot] tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/mapper/myvg-mylv1 on /mnt type ext3 (rw) [root@localhost ~]# df -h # 查看磁盘容量情况 Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.6G 2.4G 5.8G 30% / /dev/sda1 190M 12M 169M 7% /boot tmpfs 62M 0 62M 0% /dev/shm /dev/mapper/myvg-mylv1 2.0G 68M 1.9G 4% /mnt
OK,我们创建的逻辑卷就可以正常使用了。下一篇将介绍LVM扩展,缩减以及快照。