大纲
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扩展,缩减以及快照。
本文出自 “Share your knowledge” 博客,请务必保留此出处http://skypegnu1.blog.51cto.com/8991766/1431146
原文:http://skypegnu1.blog.51cto.com/8991766/1431146