Linux LVM

Linux LVM

前言

    LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。无论在Linux或者其他类似的系统,都是 非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理 逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需重启就可以让内核知道分区的存在。

LVM分层结构

1.jpg

    图中顶部,首先是实际的物理磁盘,其划分的分区并且创建的物理卷(PV)。一个或多个物理卷可以用来创建卷组(VG)。然后基于卷组可以创建逻辑卷 (LV)。只要在卷组中有可用空间,就可以创建逻辑卷。文件系统就是在逻辑卷上创建的,然后在操作系统挂载和访问。

LVM测试说明

    本文将介绍如何在linux中创建和管理LVM卷。我们将会分成两个部分。第一个部分,我们首先要在一个硬盘上创建多个逻辑卷,然后将它们挂载在/lvm_data目录。最后将对创建好的卷调整大小。而第二部分,我们将会从另外一块硬盘增加额外的卷到LVM中。

实验步骤

(一)准备磁盘分区

    通过使用fdisk创建3个分区,分别为3G、5G、8G。分区的大小不要求一致。注意:创建LVM需要调整分区类型为'8e'。

[root@vm227 ~]# fdisk /dev/sdb
Command (m for help): n ## 新建
Command action
     e   extended
     p   primary partition (1-4)
    p ## 主分区
    Partition number (1-4): 1 ## 分区号
    First cylinder (1-1044, default 1):  ## 回车用默认的1
    Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +3G ## 大小
    ####重复上面的操作来创建另外两个分区### 
    Command (m for help): t ## 改变类型
    Selected partition 1
    Hex code (type L to list codes): 8e ## LVM 的分区代码
    Changed system type of partition 1 to 8e (Linux LVM)
    Command (m for help): p ## 显示类型
       Device Boot     Start       End      Blocks   Id    System
     /dev/sdb1            1         393      3156741   8e   LinuxLVM
    /dev/sdb2           394        1047     5253255    8e   Linux LVM
    /dev/sdb3          1048        2092     8393962+   8e   Linux LVM
    Command (m for help): w ## 保存退出
    
[root@vm227 ~]# partx -a /dev/sdb  ###使分区生效

(二)创建物理卷(PV)

    在刚创建好的分区上创建物理卷。创建PV命令:pvcreate

[root@vm227 ~]# pvcreate /dev/sdb{1,2,3}
    Physical volume "/dev/sdb1" successfully created
    Physical volume "/dev/sdb2" successfully created
    Physical volume "/dev/sdb3" successfully created
  ####使用命令pvs(简单)和pvdisplay(详细)查看物理卷的创建情况#####   
[root@vm227 ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb1      lvm2  a--   3.01g   3.01g
  /dev/sdb2      lvm2  a--   5.01g   5.01
  /dev/sdb3      lvm2  a--   8.01g   8.01g
[root@vm227 ~]# pvdisplay 
  "/dev/sdb2" is a new physical volume of "5.01 GiB"
   --- NEW Physical volume ---
   PV Name               /dev/sdb2
   VG Name              
   PV Size               5.01 GiB
   Allocatable           NO
   PE Size               0  
   Total PE              0
   Free PE               0
   Allocated PE          0
   PV UUID               N7EHil-Piij-pH85-hTTX-o5KD-iWYb-cocFA0

  ####删除物理卷使用命令:pvremove ####
[root@vm227 ~]# pvremove /dev/sdb1

(三)创建卷组(Vg)

    在刚创建好的PV上创建名为'volume-group1'的卷组,创建卷组命令:vgcreate

    vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath…]
                    -s:用指定PE大小

[root@vm227 ~]# vgcreate volume-group1 /dev/sdb{1,2,3}
  ###使用下列命令可以来验证卷组。vgs(简单) 和vgdisplay(详细)####
[root@vm227 ~]# vgdisplay
  --- Volume group ---
     VG Name               volume-group1
     System ID            
     Format                lvm2
     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               16.02 GiB
     PE Size               4.00 MiB
     Total PE              4101
     Alloc PE / Size       0 / 0  
     Free  PE / Size       4101 / 16.02 GiB
     VG UUID               Z3mTLf-44wM-ZLBM-SySO-7IZE-3xzh-mSDswO

  ###以上信息可以看出创建名为volume-group1卷组的使用量/总量信息。只要卷组中还有可用(Free)空间,就可以随意创建逻辑卷(lv)。这里没有指定PE大小,默认为4M####

####删除卷组使用vgremove####
[root@vm227 ~]# vgremove volume-group1

(四)创建逻辑卷(LV)

    在创建好的VG上创建名为'mysqldata'、大小为2GB的逻辑卷。创建卷组命令:vgcreate

    lvcreate -L #[mMgGtT] -n LV_NAME VolumeGroupName
     

            -L: 指定创建lv容量大小
     

            -n: 指定lv卷组名字

[root@vm227 ~]# lvcreate -L 2G -n mysqldata volume-group1 
  ####逻辑卷可使用lvs(简单)和lvdisplay(详细)命令查看####
[root@vm227 ~]# lvdisplay 
 --- Logical volume ---
  LV Path                /dev/volume-group1/mysqldata
  LV Name                mysqldata
  VG Name                volume-group1
  LV UUID                EoJlyJ-DA2l-Z827-YLIU-3Rts-BJTa-SUMrUY
  LV Write Access        read/write
  LV Creation host, time vm227.happy.local, 2016-04-24 11:45:16 +0800
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  ###创建成功,命名格式为:/dev/volume-group1/mysqldata####

逻辑卷命令格式:

  在/dev目录下/dev/mapper/VG_NAME-LV_NAME和/dev/VG_NAME/LV_NAME分别为/dev/dm-# 入口

格式化挂

[root@vm227 ~]# mkfs.ext4 /dev/volume-group1/mysqldata
[root@vm227 ~]# mkdir /lvm-data
[root@vm227 ~]# mount /dev/volume-group1/mysqldata /lvm-mount/ 
[root@vm227 ~]# cd /lvm-data/
[root@vm227 lvm-data]# ll
total 16
drwx------ 2 root root 16384 Apr 24 12:59 lost+found
[root@vm227 lvm-data]# cp /etc/issue .
[root@vm227 lvm-data]# ll
total 20
-rw-r--r-- 1 root root    47 Apr 24 14:47 issue
drwx------ 2 root root 16384 Apr 24 12:59 lost+found
  ####逻辑卷挂载完成,并且可以读写了####
  ####要创建和挂载其它的逻辑卷,我们重复以上过程####
  ####使用lvremove我们可以删除逻辑卷####
[root@vm227 ~]# umount /lvm-data/
[root@vm227 ~]# lvremove /dev/volume-group1/mysqldata

(五)扩展卷组(LV)

    调整逻辑卷大小的功能是LVM最有用的功能。下面我们将会把先前创建的逻辑卷‘mysqldata’扩大至6G。扩展逻辑卷,首先扩展物理边界,然后扩展文件系统边界。

    扩展物理使用命令:vgextend

   lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME

    扩展文件系统使用命令:resize2fs

   resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

[root@vm227 ~]# lvextend -L 6G /dev/volume-group1/mysqldata 
  		Extending logical volume mysqldata to 6.00 GiB
 		Logical volume mysqldata successfully resized
[root@vm227 ~]# lvdisplay 
  	--- Logical volume ---
  	LV Path                /dev/volume-group1/mysqldata
  	LV Name                mysqldata
  	VG Name                volume-group1
 	LV UUID                EoJlyJ-DA2l-Z827-YLIU-3Rts-BJTa-SUMrUY
    LV Write Access        read/write
  	LV Creation host, time m227.happy.local, 2016-04-24 11:45:16 +0800
  	LV Status              available
	# open                 1
	LV Size                6.00 GiB
	Current LE             1536
	Segments               2
	Allocation             inherit
	Read ahead sectors     auto
	- currently set to     256
	Block device           253:1
[root@vm227 ~]# df -h
	Filesystem                            Size  Used Avail Use% Mounted on
	/dev/sda3                 				19G  1.3G   17G   8% /
	tmpfs                                 491M     0  491M   0% /dev/shm
	/dev/sda1                             194M   29M  155M  16% /boot
	/dev/mapper/volume--group1-mysqldata  2.0G   68M  1.9G   4% /lvm-data
	#####可以看到已经成功提扩展成6G了,但是文件系统还是2G,下面扩展文件系统####
[root@vm227 ~]# resize2fs /dev/volume-group1/mysqldata 6G
	resize2fs 1.41.12 (17-May-2010)
	Filesystem at /dev/volume-group1/mysqldata is mounted on /lvm-data; on-line resizing required
	old desc_blocks = 1, new_desc_blocks = 1
	Performing an on-line resize of /dev/volume-group1/mysqldata to 1572864 (4k) blocks.
	The filesystem on /dev/volume-group1/mysqldata is now 1572864 blocks long.
[root@vm227 ~]# df -h
	Filesystem                            Size  Used Avail Use% Mounted on
	/dev/sda3                  			  19G  1.3G   17G   8% /
	tmpfs                                 491M     0  491M   0% /dev/shm
	/dev/sda1                             194M   29M  155M  16% /boot
	/dev/mapper/volume--group1-mysqldata  6.0G   68M  5.6G   2% /lvm-data

	####已经成功扩成功#####

(六)缩减逻辑卷(LV)

    缩减LVM卷大小,命令的顺序相当重要。注意:缩减危险系统很高,操作请谨慎。减少逻辑卷的空间大小一定要大于储存的数据大小,否则存储在后面的数据会丢失或者损坏。

    减小逻辑卷大小使用命令:lvreduce
     lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
 

[root@vm227 ~]# df -h ###查看空间使用情况
[root@vm227 ~]# umount /dev/volume-group1/mysqldata   ###卸载挂载卷。
[root@vm227 ~]# e2fsck -f /dev/volume-group1/mysqldata ###检测磁盘错误。 
[root@vm227 ~]# resize2fs /dev/volume-group1/mysqldata 4G  #### 缩小文件系统。
[root@vm227 ~]# lvreduce -L 4G /dev/volume-group1/mysqldata   ####减少逻辑卷大小
WARNING: Reducing active logical volume to 100.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv1? [y/n]: y Reducing logical volume lv1 to mysqldata to 4.00 GiB Logical volume mysqldata successfully resized

  #####最后,验证调整后的逻辑卷大小####

[root@vm227 ~]# lvdisplay
  --- Logical volume ---
    LV Path                /dev/volume-group1/mysqldata
    LV Name                mysqldata
    VG Name                volume-group1
    LV UUID                EoJlyJ-DA2l-Z827-YLIU-3Rts-BJTa-SUMrUY
    LV Write Access        read/write
    LV Creation host, time vm227.happy.local, 2016-04-24 11:45:16 +0800
    LV Status              available
    # open                 0
    LV Size                4.00 GiB
    Current LE             1024
    Segments               2
    Allocation             inherit
    Read ahead sectors     auto
    - currently set to     256
    Block device           253:1
[root@vm227 ~]# df -h
  Filesystem               Size  Used Avail Use% Mounted on
  /dev/sda3                19G  1.3G   17G   8% /
  tmpfs                    491M     0  491M   0% /dev/shm
  /dev/sda1                194M   29M  155M  16% /boot
  /dev/mapper/volume--group1-mysqldata   4.0G   68M  5.6G   2% /lvm-data

 ####缩减成功####

(七)扩展卷组(VG)

    下面介绍扩展卷组的方法,将一个物理卷添加到卷组。假设我们的卷组'volume-group1'已经满了需要扩大。但硬盘(sdb)已经没有空闲容量,增加了另外一个硬盘(sdc),如何把sdc的分区添加到卷组以扩展。

[root@vm227 ~]# vgdisplay volume-group
 --- Volume group ---
   VG Name               volume-group1
   System ID            
   Format                lvm2
   Metadata Areas        3
   Metadata Sequence No  4
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                1
   Open LV               0
   Max PV                0
   Cur PV                3
   Act PV                3
   VG Size               16.02 GiB
   PE Size               4.00 MiB
   Total PE              4101
   Alloc PE / Size       1024 / 4.00 GiB
   Free  PE / Size       3077 / 12.02 GiB
   VG UUID                Z3mTLf-44wM-ZLBM-SySO-7IZE-3xzh-mSDswO

  ####硬盘/dev/sdc分区/dev/sdc1###
  ####如何给硬盘/dev/sdc分区,就不介绍了###

[root@vm227 ~]# # pvcreate /dev/sdc1

    物理卷已经准备好了,将它增加到已存在的卷组'volume-group1'上。

    增加VG使用命令:vgextend 

    vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath…]

[root@vm227 ~]# vgextend volume-group1 /dev/sdc1 
  ####使用vgdisplay来验证(可以看到卷组大小已经增大)####
[root@vm227 ~]# vgdisplay 
   --- Volume group ---
    VG Name               volume-group1
    System ID            
    Format                lvm2
    Metadata Areas        4
    Metadata Sequence No  5
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                1
    Open LV               0
    Max PV                0
    Cur PV                4
    Act PV                4
    VG Size               19.03 GiB
    PE Size               4.00 MiB
    Total PE              4871
    Alloc PE / Size       1024 / 4.00 GiB
    Free  PE / Size       3847 / 15.03 GiB
    VG UUID               Z3mTLf-44wM-ZLBM-SySO-7IZE-3xzh-mSDswO
 
以上看到卷组已经成功扩展了。

(八)缩减卷组(VG)

    缩减VG使用命令:vgreduce

   vgreduce之前先做pvmove 移动PE

   pvmove PhysicalDevicePath [PhysicalDevicePath…]

     vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath…]

(九)快照组(snapshot)

    快照卷是将元数据重新复制一份做为快照卷访问入口,当数据本身发生变化时,将数据复制一份到快照空间,然后修改原数据,快照卷主要用于数据备份,创建的快照卷必须要和逻辑卷在同一卷组上,并且快照卷大小要大于等于快照卷存在周期内数据增长量。

    创建快照使用命令:lvcreate

  lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name(快照卷名字) original_lv_name(原卷名字)

    -L:指定快照卷大小

    -p: 指权限,一般为只读

    -s: 指创建为快照卷

    -n:指定快照卷名字

如:# lvcreate -L 6G -p r -s -n snap_mysql /dev/volume-group1/mysqldata

    删除快照使用命令:lvremove

  lvremove  snapshot_lv_name

总结

总结一下,LVM是一个非常给力的工具,用来创建和管理可变大小的分区。本文中,我们介绍了动态分区如何在LVM中创建和使用。我们也介绍了扩展/缩小逻辑卷和卷组的方法和如何增加一个新的磁盘到LVM。

水平有限, 还有许多不足之处,以后慢慢改进,如果有错误及时指出,谢谢!!!~ 
作者: chrony QQ: 840595308 
感谢: MageEdu

原创文章,作者:chrony,如若转载,请注明出处:http://www.178linux.com/15307

评论列表(1条)

  • stanley
    stanley 2016-04-26 09:53

    最后的联系方式亮了,不担心被爬虫抓?