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

相关推荐

  • 马哥教育网络21期+第四周练习博客

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel/ /home/tuser1 [root@localhost ~]# chmod&n…

    Linux干货 2016-08-02
  • LVS

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

    Linux干货 2016-11-07
  • Kickstart+PXE自动部署CentOS6.6

        生产环境中对于部署大量的相同系统的服务器,如果逐台安装操作系统的话是非常浪费时间的工作,还好CentOS提供了无人值守安装系统的功能,下面就详细介绍一下配置步骤。 一、配置本机的yum源     因为需要安装一些软件来达到我们的目的,所以最好先把yum源配置好。 &nbs…

    Linux干货 2015-05-12
  • sed使用小结

    sed使用小结 Stream EDitor  行编辑器       sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,…

    Linux干货 2016-08-12
  • 文件系统管理

                                高级文件系统管理 磁盘配额 控制用户在一个分区上使用多大的空间。 操作步骤: 1、创建一个10G的分区 /dev/sdc1并将其格式化,挂载 2、如果是新…

    Linux干货 2016-08-29
  • N25第十周博客作业

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)        (1)post:加电自检                主要是bios完成,检查主机各个组件是否完好,能否达到运行要求;    &…

    Linux干货 2017-03-10

评论列表(2条)

  • stanley
    stanley 2016-03-09 10:16

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