首页 > 代码库 > 磁盘管理-LVM(1)

磁盘管理-LVM(1)

大纲

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使用分层次的结构,从概念上看如下图所示:

wKioL1OjovHycTz2AABXSvlSHNY273.jpg

    最顶上是实际的物理磁盘及其划分的分区,和其上的物理卷(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