LVM原理、创建、扩容、缩减、快照详解

LVM是什么?为什么要使用LVM?

    LVM(Logical Volume Manager):逻辑卷管理, 在日常使用或生产环境中, 我们可能会因为在规划存储时未考虑到未来数据增长的速度超乎我们的预计而措手不及,因为增加一块硬盘再将源数据移到新硬盘上很麻烦并且提高了成本还浪费硬盘空间。

    在1998年有人在开发了一个基于卷的管理方式, 在HP-UX中使用,这就是LVM,LVM可以无损扩容、缩减空间来达到应对硬盘空间不足的情况。

LVM相关原理

    LVM通过内核中的dm(device mapper)模块实现使用纯软件的方式将一个或多个底层硬件设备组织成一个或多个逻辑设备。

相关术语:

    PV:Physical Volume    #一般是物理分区 /dev/sd##…

    VG:Volume Group    #由多个PE组成,创建卷组时可指定PE大小

    PE:Physical Extent    #默认大小为4M,LVM中的最小单元

    LV:Logical Volume    #由多个PE组成

    LE:Logical Extent    #在LV中的PE称作LE

    LVM通过PV组成PV池,基于PV创建VG,VG由若干个PE组成,在VG中由多个PE组成LV,在LV中PE叫做LE。

原理图:

    File:LVM1.svg此图转自维基百科

实战:创建、扩容、缩减、快照

系统环境

当前系统分区信息,当前系统有2块新硬盘,分别为20G
[root@server2 ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002777c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      208813+  83  Linux
/dev/sda2              27        1985    15735667+  83  Linux
/dev/sda3            1986        2247     2104515   82  Linux swap / Solaris

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xdee177d5

   Device Boot      Start         End      Blocks   Id  System

Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


LVM相关命令解释

vg管理工具:
    vgs    #查看vg简要信息
    vgdisplay      #查看vg详细信息
    vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]    #创建vg
    vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]    #扩展vg容量
    vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]    #缩减vg容量
    vgremove  VolumeGroupName  #删除vg

lv管理工具:
    lvs    #查看lv简要信息
    lvdisplay    #查看lv详细信息
    lvcreate -L #[mMgGtT] -n NAME VolumeGroup    #创建lv
    lvremove /dev/VG_NAME/LV_NAME    #删除lv

扩展逻辑卷:
    lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME    #扩展逻辑卷
    resize2fs /dev/VG_NAME/LV_NAME    #重新定义文件系统大小
    
缩减逻辑卷:
    umount /dev/VG_NAME/LV_NAME    #卸载lv
    e2fsck -f /dev/VG_NAME/LV_NAME    #检查lv
    resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]    #重新定义lv大小
    lvreduce -L [-] [mMgGtT] /dev/VG_NAME/LV_NAME    #缩减lv

LVM创建

[root@server2 ~]# pvcreate /dev/sdb     #将sdb硬盘添加到PV池中
  Physical volume "/dev/sdb" successfully created
[root@server2 ~]# pvcreate /dev/sdc    #将sdc硬盘添加到PV池中
  Physical volume "/dev/sdc" successfully created
[root@server2 ~]# pvs    #查看PV池
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb        lvm2 ---  20.00g 20.00g
  /dev/sdc        lvm2 ---  20.00g 20.00g
[root@server2 ~]# vgcreate myvg /dev/sdb     #创建名称为myvg的卷组,由/dev/sdb提供PE
  Volume group "myvg" successfully created    #提示vg创建成功
[root@server2 ~]# vgs    #查看vg简要信息
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   1   1   0 wz--n- 20.00g 10.00g
[root@server2 ~]# lvcreate -L 10G -n mylv myvg    #在myvg下创建容量为10G、名称为mylv的lv
  Logical volume "mylv" created.
[root@server2 ~]# lvs    #查看lv简要信息
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a----- 10.00g 
  
[root@server2 ~]# mkfs.ext4 /dev/mapper/myvg-mylv     #格式化lv为ext4文件系统
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/    #将mylv挂载到/mnt下

[root@server2 ~]# df -lh    #查看mylv分区使用情况
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              15G  3.4G   11G  25% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             194M   36M  148M  20% /boot
/dev/mapper/myvg-mylv
                      9.8G   23M  9.2G   1% /mnt

LVM扩展

我们现在想将mylv扩展到30G该如何操作?

    应该先将myvg扩展到30G以上,在将mylv扩展到30G

操作过程

[root@server2 ~]# vgextend myvg /dev/sdc    #扩展myvg,将sdc的空间也提供给myvg
  Volume group "myvg" successfully extended
  
[root@server2 ~]# vgs    #查看vg当前信息,myvg大小为40G
  VG   #PV #LV #SN Attr   VSize  VFree 
  myvg   2   1   0 wz--n- 39.99g 29.99g
  
[root@server2 ~]# umount /mnt/    #卸载mylv

[root@server2 ~]# lvextend -L 30G /dev/myvg/mylv     #扩展lv到30G
  Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 30.00 GiB (7680 extents).
  Logical volume mylv successfully resized
  
[root@server2 ~]# lvs    #查看当前lv信息,mylv为30G
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a----- 30.00g 
[root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/    #挂载mylv到/mnt目录

[root@server2 ~]# df    ##注意:这里显示mylv大小只有10G,这是因为我们没有进行重新定义
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/sda2             15357672 3527844  11043048  25% /
tmpfs                   502384       0    502384   0% /dev/shm
/dev/sda1               198123   36589    151094  20% /boot
/dev/mapper/myvg-mylv
                      10190136   23028   9642820   1% /mnt
[root@server2 ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              15G  3.4G   11G  25% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             194M   36M  148M  20% /boot
/dev/mapper/myvg-mylv
                      9.8G   23M  9.2G   1% /mnt
                      
[root@server2 ~]# resize2fs /dev/mapper/myvg-mylv     #使用resize2fs可以重新定义分区的大小
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/myvg-mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/mapper/myvg-mylv to 7864320 (4k) blocks.
The filesystem on /dev/mapper/myvg-mylv is now 7864320 blocks long.
[root@server2 ~]# df -lh    #现在mylv大小终于恢复正常了
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              15G  3.4G   11G  25% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             194M   36M  148M  20% /boot
/dev/mapper/myvg-mylv
                       30G   28M   28G   1% /mnt

LVM缩减

    缩减mylv到10G

操作过程

[root@server2 ~]# umount /mnt/    #先卸载挂载目录
[root@server2 ~]# resize2fs /dev/mapper/myvg-mylv 8G    
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/mapper/myvg-mylv' first.    #提示需先使用e2fsck命令检查文件系统
[root@server2 ~]# e2fsck -f /dev/mapper/myvg-mylv     #检查mylv文件系统
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/myvg-mylv: 11/1966080 files (0.0% non-contiguous), 167409/7864320 blocks

[root@server2 ~]# resize2fs /dev/mapper/myvg-mylv 8G    #使用resize2fs命令重新定义mylv分区大小
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/myvg-mylv to 2097152 (4k) blocks.
The filesystem on /dev/mapper/myvg-mylv is now 2097152 blocks long.

[root@server2 ~]# lvreduce -L 8G /dev/myvg/mylv     #将mylv大小缩减成8G
  WARNING: Reducing active logical volume to 8.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 30.00 GiB (7680 extents) to 8.00 GiB (2048 extents).
  Logical volume mylv successfully resized
  
[root@server2 ~]# lvs    #查看mylv信息
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-ao---- 8.00g 
[root@server2 ~]# mount /dev/mapper/myvg-mylv /mnt/    重新挂载
[root@server2 ~]# df -lh    #查看分区大小
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              15G  3.4G   11G  25% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             194M   36M  148M  20% /boot
/dev/mapper/myvg-mylv
                      7.8G   36M  7.4G   1% /mnt

LVM快照创建

    LVM快照简单来说就是将所快照源分区一个时间点所有文件的元数据进行保存,如果源文件没有改变,那么访问快照卷的相应文件则直接指向源分区的源文件,如果源文件发生改变,则快照卷中与之对应的文件不会发生改变。快照卷主要用于辅助备份文件。  这里只简单介绍,点击查看详细介绍

操作过程

[root@server2 mnt]# df    
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/sda2             15357672 3527924  11042968  25% /
tmpfs                   502384       0    502384   0% /dev/shm
/dev/sda1               198123   36589    151094  20% /boot
/dev/mapper/myvg-mylv
                       8125880   36852   7669600   1% /mnt
[root@server2 mnt]# pwd    #当前在mylv的分区中
/mnt
[root@server2 mnt]# cp -rf /etc/{grub.conf,sysconfig} ./    #复制/etc/sysconfig,/etc/grub.conf到当前目录(mylv中)
[root@server2 mnt]# ls    #查看当前分区中的文件
grub.conf  lost+found  sysconfig
[root@server2 mnt]# lvcreate -s -n mylv-snap -L 8G /dev/myvg/mylv    #创建mylv的快照卷mylv-snap
  Logical volume "mylv-snap" created.
[root@server2 mnt]# lvs    #查看lv的信息,出现了mylv-snap
  LV        VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv      myvg owi-aos--- 8.00g                                                    
  mylv-snap myvg swi-a-s--- 8.00g      mylv   0.00                                   
[root@server2 mnt]# mkdir /mylv-snap    #创建mylv-snap目录
[root@server2 mnt]# mount /dev/myvg/mylv-snap /mylv-snap/    #将mylv-snap挂载到/mylv-snap
[root@server2 mnt]# ll /mylv-snap/    #查看分区中的文件,和/mnt下一样
total 20
lrwxrwxrwx. 1 root root    22 Jan  4 16:01 grub.conf -> ../boot/grub/grub.conf
drwx------. 2 root root 16384 Jan  4 15:44 lost+found
drwxr-xr-x. 7 root root  4096 Jan  4 16:02 sysconfig
[root@server2 mnt]# cp /etc/rc.d/init.d/functions ./    #复制/etc/rc.d/init.d/functions到/mnt目录中
[root@server2 mnt]# ls    #查看当前目录(/mnt,即是mylv)中的文件
functions  grub.conf  lost+found  sysconfig
[root@server2 mnt]# ll /mylv-snap/    #查看/mylv-snap(即是mylv-snap)中的文件,发现并没有functions
total 20
lrwxrwxrwx. 1 root root    22 Jan  4 16:01 grub.conf -> ../boot/grub/grub.conf
drwx------. 2 root root 16384 Jan  4 15:44 lost+found
drwxr-xr-x. 7 root root  4096 Jan  4 16:02 sysconfig

总结

    LVM虽然很好用,但是因为在硬件上使用纯软件方式进行管理,所以误删除数据恢复更加困难,LVM缩减分区大小风险较大,况且现在btrfs已经很稳定了,功能更加强大,并不推荐使用LVM对磁盘分区进行管理。

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

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-03-09
下一篇 2016-03-09

相关推荐

  • LVS

    LVS概述 1.LVS:Linux Virtual Server全称叫做linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。四层路由器(交换),根据请求报文的目标IP和目标协议及端口将其调度转发至后端主机集群中的某台RealServer(真实服务器),根据调度算法来挑选RS; 主要有…

    Linux干货 2016-11-07
  • zabbix之报警功能的实现

    一、注册微信公众号 首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的 申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号。 就可以看到用户数了,接下来的就要使用的用户的微信ID号了。点击用户查看用户的微信ID号。在浏览器查看用户的微信ID号。就是那个红色的ID了。 h…

    2014-11-12
  • 马哥教育21期网络班—第11周课程+练习—-成长进行时–不退步–下

    3、描述DNS查询过程以及DNS服务器类别。 DNS查询过程主机—>查找互联网上的主机 www.magedu.com—>联系到自己指向的DNS服务器—>DNS服务器—>找根 .—>根返回给DNS服务器—>DNS找.com—>com返回给DNS—->DNS找ma…

    Linux干货 2016-09-19
  • Hadoop新增datanode与SecondaryNameNode

    无论是新增namenode还是SecondaryNameNode,操作方法大致相同 一、如果新增datanode,需要保证namenode能无密码ssh连接到新datanode 如果是添加SecondaryNameNode,则需保证其能无密码ssh连接至各datanode和namenode,namenode也需要能无密码连接到新SecondaryNameNo…

    Linux干货 2015-03-08
  • Linux软件包管理及相关命令

    rpm命令,yum命令

    2018-03-12
  • 堡垒机-麒麟开源堡垒机苹果 Mac支持版本发布

      近日,麒麟开源堡垒机团队开发测试了支持Mac OS苹果操作系统的Web插件,苹果系统用户可以直接和Windows用户一样,登录到Web平台,使用点击的方式调动运维工具并且登录到目标系统进行操作运维。 Mac OS插件支持ssh、telnet、rdp、vnc、x11、sftp、ftp、应用发布等所有协议。   注:麒…

    Linux干货 2016-05-19

评论列表(2条)

  • stanley
    stanley 2016-03-09 10:16

    16岁文章已经写成这样,让我等汗颜呀~