LVM介绍
一、简介LVM是Linux操作系统对磁盘分区进行管理的一种机制。其是建立在磁盘和分区之上的一个逻辑层,以提高磁盘分...
扫描右侧二维码阅读全文
25
2010/05

LVM介绍

一、简介

LVM是Linux操作系统对磁盘分区进行管理的一种机制。其是建立在磁盘和分区之上的一个逻辑层,以提高磁盘分区管理的灵活性。在LVM中每个磁盘分区就是一个物理卷(physical volume,PV),若干个物理卷可以组成为一个卷组(volume group,VG),形成一个存储池。系统管理员可以在卷组上创建逻辑卷(logical volumes,LV),并在逻辑卷组上创建文件系统。PV、VG和LV的关系如图所示。

二、物理卷管理

1、添加物理卷

使用pvcreate命令可以创建物理卷,可以在整个磁盘上创建物理卷,也可以在一个磁盘分区上创建物理卷。例如如果要在第二块SCSI磁盘上创建物理卷,可以使用命令:pvcreate /dev/sdb

2、查看物理卷

[root@demoserver dev]# pvdisplay

  --- Physical volume ---

  PV Name           /dev/hda13                        //pv名称

  VG Name           vg_data                      //pv所属的vg名称

  PV Size             1.87 GB / not usable 1.96 MB    //pv的大小为1.87GB

  Allocatable          yes

  PE Size (KByte)     4096                          //物理块大小为4MB

  Total PE           478                         //总的物理块数

  Free PE            478                         //空闲的物理块数

  Allocated PE        0

  PV UUID            jaVtOk-rpMb-QgbM-zx1N-DmCB-yGqm-hCVmiE

  --- Physical volume ---                           //另一个pv的信息

  PV Name            /dev/hda14

  VG Name            vg_data

  PV Size             1.86 GB / not usable 2.12 MB

  Allocatable          yes

  PE Size (KByte)      4096

  Total PE            476

  Free PE             476

  Allocated PE         0

  PV UUID            VzjEpx-or1h-v3gN-zOCm-FnjC-eDOz-tp5YZg

共有两个物理卷:/dev/hda13和/dev/hda14,其中hda13的大小为1.87GB,物理块大小为4096KB,总的物理块数为478,空闲的物理块数为478,已分配的物理块数为0。而hda14的大小为1.86GB,物理块大小为4096KB,总的物理块数为476,空闲的物理块数为476,已分配的物理块数为0。

3.删除物理卷

如果物理卷不再需要,可以使用pvremove命令将其删除,如下所示。

# pvremove /dev/hda16

  Labels on physical volume "/dev/hda16" successfully wiped

物理卷被删除后,其所在的磁盘分区并不会被删除。需要被删除的物理卷必须是已经不属于任何卷组,否则将会失败,如下所示。

[root@demoserver dev]# pvremove /dev/hda13

  Can't pvremove physical volume "/dev/hda13" of volume group "vg_data" without-ff

三、卷组管理

1.添加卷组

物理卷创建完成后就可以开始创建卷组。卷组是由一个或多个物理卷所组成的存储池。例如要创建一个名为vg_data的卷组,可以使用下面的命令。

# vgcreate vg_data /dev/hda13 /dev/hda14

  Volume group "vg_data" successfully created

2.扩展卷组的容量

当卷组中的空间不足的时候,可以使用vgextend命令往卷组中添加新的物理卷,方便地扩展卷组的容量,如下所示。

# vgextend vg_data /dev/hda15

  Volume group "vg_data" successfully extended

3.查看卷组

使用vgdisplay命令可以查看卷组的信息。例如要查看上例中创建的卷组vg_data,执行的命令如下所示。

# vgdisplay vg_data

  --- Volume group ---

  VG Name               vg_data                   //vg名称

  System ID

  Format                  lvm2

  Metadata Areas         3                         //元信息区域

  Metadata Sequence No  2

  VG Access               read/write                //访问许可,可读写

  VG Status               resizable                  //VG状态

  MAX LV                  0                        //最大的LV数

  Cur LV                   0                        //当前的LV数

  Open LV                 0                        //打开的LV数

  Max PV                  0                        //最大的PV数

  Cur PV                   3                        //当前的PV数

  Act PV                   3

  VG Size                 5.59 GB                 //VG的大小为5.59GB

  PE Size                 4.00 MB                 //物理块的大小为4MB

  Total PE                1430                  //VG的物理块数为1430

  Alloc PE / Size            0 / 0            //已经使用的物理块数和大小

  Free  PE / Size         1430 / 5.59 GB          //空闲的物理块数和大小

  VG UUID                 djgPFx-LOGa-8ZOx-diNr-hxCs-qNip-vg0Hqu

卷组vg_dat格式为lvm2,访问许可为可读写,卷组大小为5.59GB,物理块大小为4MB,总的物理块数为1430,已分配的物理块数为0,空闲的物理块数为1430,大小为5.59GB。

4.从卷组中删除物理卷

通过vgreduce命令可以把VG中未被使用的PV从VG中删除,例如要从卷组vg_data中删除物理卷hda15,如下所示。

# vgreduce vg_data /dev/hda15

  Removed "/dev/hda15" from volume group "vg_data"

如果要从卷组中删除所有未被使用的物理卷,可以使用如下命令。

# vgreduce –a

5.删除卷组

当卷组不再需要的时候,可以使用vgremove命令删除。如果卷组中已经创建了LV,则系统会提示用户确认是否要进行删除,命令及运行结果如下所示。

# vgremove vg_data

Do you really want to remove volume group "vg_data" containing 2 logical volumes

? [y/n]: y

Do you really want to remove active logical volume "lv_data1"? [y/n]: y

                                             //确定删除逻辑卷lv_data1

  Logical volume "lv_data1" successfully removed

Do you really want to remove active logical volume "lv_data2"? [y/n]: y

                                             //确定删除逻辑卷lv_data2

  Logical volume "lv_data2" successfully removed

  Volume group "vg_data" successfully removed

卷组被删除后,卷组中的所有物理卷将不属于任何卷组,可以对这些物理卷进行删除,命令如下所示。

# pvdisplay /dev/hda14

  "/dev/hda14" is a new physical volume of "1.86 GB"

  --- NEW Physical volume ---

  PV Name            /dev/hda14

  VG Name               //VG Name一列为空,表示该PV不属于任何的VG

  PV Size             1.86 GB         //PV大小

  Allocatable          NO              //是否可分配

  PE Size (KByte)       0               //PE大小

  Total PE             0               //总PE数

  Free PE              0               //空闲的PE

  Allocated PE         0               //分配的PE

  PV UUID             VzjEpx-or1h-v3gN-zOCm-FnjC-eDOz-tp5Yzg

可以看到,物理卷hda14的VG Name一列为空,表示该物理卷不属于任何的卷组,用户可以删除该物理卷,或分配给其他卷组使用。

四、逻辑卷管理

逻辑卷类似于非LVM系统中的磁盘分区,在逻辑卷上可以建立文件系统,文件系统建立完成后就可以挂载到操作系统中进行使用。逻辑卷被划分为被称为LE(Logical Extents)的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

1.添加逻辑卷

当卷组创建后,可以使用lvcreate命令在卷组上创建逻辑卷。例如要在卷组vg_data上创建一个1000MB的逻辑卷lv_data1,其命令如下所示。

# lvcreate -L 1000m -n lv_data1 vg_data

  Logical volume "lv_data1" created

除了KB、MB和GB这些常规单位以外,lvcreate命令还可以使用PE数作为单位。由vgdisplay可以看到卷组vg_data的PE大小为4MB,如果要创建一个大小为1000MB的逻辑卷,则需要250个PE,命令如下所示。

# lvcreate -l 250 -n lv_data2 vg_data

  Logical volume "lv_data2" created

我们现在ppvod做LVM使用的命令是:

#lvcreate –i 4 –I 8192 –L 1600G –n lv_data2 vg_data

-i:采用条带模式的映射方式创建逻辑卷,该参数的值用于指定所创建的逻辑卷将映射在几个PV上。

-I:指定使用条带模式时所采用块的大小,单位为KB,其值必须是:2N(N≥2)。

-L:指定创建逻辑卷的大小,单位的可以用K、M、G、T表示KB、MB、GB及TB。

-n:用来指定所创建的逻辑卷名称,该名称可以根据需要随便定义。

在使用“-i”参数指定PV的个数时,一定要确认所指定的这些PV是没有完全被分配给任何逻辑卷的,否则将创建失败,其次若这些PV的大小不等,那么所创建的逻辑卷只能取最小值。

这样创建的LVM起到了软Raid的作用,可以使IO压力分散到各个硬盘之上,提高IO性能。

卷组和逻辑卷创建后,会在/dev目录下创建一个以VG名称命名的目录,在目录下会创建以LV名称命名的设备文件,如下所示。

#ll /dev/vg_data

total 0

lrwxrwxrwx 1 root root 28 Aug 24 22:22 lv_data1 -> /dev/mapper/vg_ data-lv_data1

lrwxrwxrwx 1 root root 28 Aug 24 22:21 lv_data2 -> /dev/mapper/vg_ data-lv_data2

2.更改逻辑卷的大小

使用lvresize命令可以更改已有逻辑卷的大小。一般情况下不建议减少逻辑卷的空间,因为这样可能会导致逻辑卷上的文件系统中的数据丢失,所以除非用户已经确定被减少空间中的数据不再需要或者已经把重要数据备份出来,否则不要减少逻辑卷的空间以免造成不可挽回的损失。如果要把逻辑卷lv_data1的大小增加为1500MB,可以使用下面的命令。

# lvresize -L 1500m /dev/vg_data/lv_data1

  Extending logical volume lv_data1 to 1.46 GB

  Logical volume lv_data1 successfully resized

3.查看逻辑卷的信息

使用lvdisplay命令可以查看指定逻辑卷的信息,例如要查看逻辑卷lv_data1的信息,命令和运行结果如下所示。

# lvdisplay /dev/vg_data/lv_data1

  --- Logical volume ---

  LV Name                 /dev/vg_data/lv_data1  //逻辑卷名称

  VG Name             vg_data                   //逻辑卷所属的卷组

  LV UUID                 3CrIH1-rZr6-UkNZ-1Z5n-gHw2-SM5T-by5fKg

  LV Write Access        read/write

  LV Status               available

  # open                  0

  LV Size                 1.46 GB                  //逻辑卷的大小

  Current LE              375                      //逻辑卷的逻辑块数

  Segments                1

  Allocation               inherit

  Read ahead sectors      auto

  - currently set to         256

  Block device             253:0

可以看到,逻辑卷/dev/vg_data/lv_data1所属的卷组为vg_data,访问许可为可读写,卷组状态为可用,逻辑卷大小为1.46GB,总的逻辑块数为375。

4.删除逻辑卷

使用lvremove命令可以删除指定的逻辑卷,删除前系统会提示用户确认。例如要删除逻辑卷lv_data2,其命令和运行结果如下所示。

# lvremove /dev/vg_data/lv_data2

Do you really want to remove active logical volume "lv_data2"? [y/n]: y

  Logical volume "lv_data2" successfully removed

删除后,逻辑卷上的所有数据均会被清除。

Last modification:November 26th, 2018 at 04:16 pm
If you think my article is useful to you, please feel free to appreciate

6 comments

  1. tagbar

    非常详细

  2. gaojinbo

    写得非常详细,很好!收藏了

  3. Serwei Xu

    @大尾巴
    恩 你说的有道理 我的应用主要是在保证数据完整性的情况下考虑磁盘IO性能,这种情况还没考虑到。
    谢谢你的解答

  4. 大尾巴

    @Serwei Xu
    非也,LVM最大意义在于动态扩展逻辑磁盘,

    例如所有的图片放在/data/www/image/ 目录下
    而该目录挂载在硬raid /dev/sdb1 上
    这时 /dev/sdb1 写满了,我们如何做?

    一般情况下 只好再热添加一个raid /dev/sdc1
    挂载在 /data/www/image2/下
    同时更改程序 令新传图放在新目录下 读取新的图片地址也在新目录下.

    如果使用LVM
    /data/www/image/ 挂载在/dev/vg0/lvm_image 上

    我们只需要热添加一个raid /dev/sdc1 设置为PV
    把它添加到 /dev/vg0 卷组内
    然后直接扩展逻辑卷 /dev/vg0/lvm_image 的大小即可

    而对应用程序来说,根本不用做任何改变.

  5. 大尾巴

    LVM最好建立在raid之上
    否则物理卷挂掉了,损失灰常之大

    1. Serwei Xu
      @大尾巴

      如果有了raid,其实LVM就没意义了,LVM目的就是把多块磁盘整合起来,Raid可以在硬件上实现这个,比LVM好多了

Leave a Comment