首页 > 代码库 > LVM

LVM

LVM

  LVM(Logical Volume Manger),是一种磁盘分区管理机制,可以灵活的调整分区的大小。它是将多个硬盘组成卷组的形式实现的。说白了就是通过软件来实现对分区灵活管理。

  LVM是将多块硬盘组成PV,再由PV组成VG,VG再组成lv,然后在lv上创建文件系统。

  物理存储介:指的就是硬盘等,最基本的存储单元。

  PV(physical volume) 物理卷:这个卷的作用就是将多块硬盘创建为能被VG卷组直接调用的格式。

  VG (volume group) 卷组:卷组就是由多个由磁盘组成的pv构成,并且在内部创建PE,然后多个PE提供给LV,这样可以灵活的实现扩容和缩减

  LV (logical volume )逻辑卷:调用由卷组提供的PE,将其组成一个整体,以便供系统格式化调用。

  PE (physical extent),能被LVM调用的最小单元,具有唯一的编号,默认大小4MB。如文件系统中block。

  LE (logical extent),能被系统调用的最小单元,和PE大小一样

PV,VG,LV 三者关系如图

技术分享

  一、确定本机是否安装了LVM软件。没有安装,请自行yum安装。

   [root@localhost bin]# rpm -qa|grep  "lvm"     
   mesa-private-llvm-3.6.2-1.el6.x86_64   
   lvm2-2.02.143-7.el6.x86_64   
   lvm2-libs-2.02.143-7.el6.x86_64

二、创建使用工具

  上面已经说了,是通过软件来实现对分区的灵活管理。所以创建到使用都是通过一些列命令来来实现的。而这些命令又是按照PV,VG,LV三者的关系区分。三者的命令功能基本相同,方便记忆。不得不说开发人员的心思缜密和用心良苦。

1、lv系列

  pvcrate 创建physical volume 
     e.g.  pvcreate /dev/sdb{1,2,3} 
  pvs,pvdispaly 查看pv简略或者详细信息 
  pvremove 移除physical volume 
  pvmove 移动数据 (当需要缩减卷组时,首先应该执行这条命令保证数据被移到卷组的其他physical volume ) 
     e.g.  pvmove /dev/sdb3(将要被移除的physical volume)

2、vg系列

  vgcreate 创建volume group
        -s:pe大小,默认4M 
        e.g.vgcreate 卷组名(必须指定名称) /dev/sdb{1,2,3} 
  vgs,vgdispaly 查看vg简略或者详细信息 
  vgextend(扩充) 
        e.g.vgextend 卷组名 /dev/sdb4 #将pvcreate /dev/sdb4后的添加至vg卷组中
  vgremove(删除) 
        e.g.vgremove 卷组名 #移除vg整个卷组 
  vgreduce(移除,缩容) 
        e.g.vgextend 卷组名 /dev/sdb4 #移除vg卷组的中/dev/sdb4

3、lv系列

  lvcreate 创建volume group
        -n:指定名称  
        -L: 指定大小         -l:%vg|pvs|FREE,打算分配这个vg中的百分比         e.g. lvcreate -n 逻辑卷名 -L 5G 卷组名(上面指定的vg名) 
  lvs,lvdispaly 查看lv简略或者详细信息 
  lvextend(扩充) 
        -l:%vg|pvs|FREE,打算分配这个vg中的百分比 
        -L: 指定大小 
  vgremove(删除) 
        e.g.lvremove 卷组名 #移除lv整个逻辑卷组 
  vgreduce(移除,缩容) 
        用法选项同扩容一样。

三、分区修改步骤及注意事项

逻辑卷扩展的步骤: 1.先确保扩展的大小;并确保所属的卷组有足够的剩余空间 
2、扩展物理边界 
最好先卸载,然后用e2fsck 检测一下。

lvextend -L [+]size /path/to/lv_device

3、扩展逻辑边界

resize2fs /path/to/lv_devive

缩减逻辑卷的步骤: 
1、卸载卷,并执行强制检查

e2fsck -f /path/to/lv_devive

2、缩减逻辑边界

resize2fs /path/to/lv_device SIZE

3、缩减物理边界:

lvreduce -L [-]size /path/to/lv_device

4、挂载卷

扩展卷组: 1.准备要添加的物理卷
2 扩展卷组: 
添加物理卷至卷组中

   vgextend vg_name /path/to/device

缩减卷组: 
1.确定要移除的物理卷的总空间大小,要小于VG当前的可用空间大小 2.将要移除的物理卷上的所有pe移动至其他PV

   pvmove /path/to/pv_device

3.缩减vg

  vgreduce vg_name /path/to/pv/device

快照: 也是逻辑卷的一种,提供过去某一时间的元卷的通道

 lvcreate -s  -L Size -n name 卷组名 -p r,rw /path/to/lv_devsive
 -p:访问权限

四、使用范例及注意事项

下面以图片中的练习题示例。 
技术分享 
1、创建两个大小为20G的分区,创建方法不懂,自行查看关于创建分区的知识。 
技术分享

NOTE:创建分区是,每个分区的编号一定是8e,创建分区结果如上图。

2、将两物理分区创建为PV

[root@localhost bin]# pvcreate /dev/sdb{1,2}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created

结果显示,physical volume 由/dev/sdb{1,2}成功创建 ,确保正确,我们在用pvs和pvdisplay查看一下。

[root@localhost bin]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sdb1  testvg lvm2 a--u 20.01g 20.01g
  /dev/sdb2  testvg lvm2 a--u 20.01g 20.01g

上面显示格式是PV卷名、VG卷名、卷组格式、卷组属性、PV的大小、PV空闲大小

[root@localhost bin]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1  #PV名称
  VG Name               testvg  #VG名称
  PV Size               20.01 GiB / not usable 1.12 MiB #PV大小
  Allocatable           yes  #是否可以使用
  PE Size               4.00 MiB #默认PE的大小,我们再VG的创建的时候可以修改,最小即为默认大小
  Total PE              5122 #PE的总个数
  Free PE               5122 #空闲PE的个数
  Allocated PE          0  #已经被使用的PE个数
  PV UUID               8N4eft-2rvg-jbhd-QHgb-e1iM-Oc1O-74NBM2 #PV的UUID 

  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               testvg
  PV Size               20.01 GiB / not usable 1.15 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5122
  Free PE               5122
  Allocated PE          0
  PV UUID               9pTEAr-aPBT-PwDg-BK8D-up0n-Hbn2-P27yVE
 

3、创建VG,并指定PE的大小

[root@localhost bin]# vgcreate testvg -s 16M /dev/sdb{1,2} #创建命令
  Volume group "testvg" successfully created #显示创建已经成功
[root@localhost bin]# vgs  #查看VG的简略信息
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 40.00g 40.00g #格式为:VG名称、使用PV的个数、LV的个数、SN、属性、VG的大小、空间VG的大小
[root@localhost bin]# vgdisplay #详细信息关于本机上面的所有VG
  --- Volume group ---
  VG Name               testvg  #VG名
  System ID             
  Format                lvm2  #VG格式
  Metadata Areas        2 
  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                2
  Act PV                2
  VG Size               40.00 GiB #VG大小
  PE Size               16.00 MiB #PE大小
  Total PE              2560 #PE的总个数
  Alloc PE / Size       0 / 0   #被使用的PE个数/大小
  Free  PE / Size       2560 / 40.00 GiB #空闲PE的个数/大小
  VG UUID               cAK6Jk-b44O-kTEt-eyFH-0h6n-l1er-rBCCE9 #VG的uuid

结果显示testvg这个vg卷组成功创建,接下来我们就不在需要用物理分区路径了。这里就将两个磁盘组成一个包含2560个16M的PE的VG卷组。接下来我们所使用就是这些PE了,根据需要分配一定的PE,就能实现灵活分区。

4、创建LV

[root@localhost bin]# lvcreate -n "testlv" -L 5G testvg #创建命令
  Logical volume "testlv" created. #提示创建成功
[root@localhost bin]# lvs #简略信息
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a-----  5.00g  #格式如上                   
[root@localhost bin]# lvdisplay     #详细信息                          
  --- Logical volume ---
  LV Path                /dev/testvg/testlv #创建成功系统分配的路径
  LV Name                testlv #LV名
  VG Name                testvg #VG名
  LV UUID                R6NUAZ-yOGi-s3Bz-c0Nm-43gQ-r5y7-8ubPQj #LV的UUID
  LV Write Access        read/write #可以读写
  LV Creation host, time localhost.localdomain, 2016-08-10 13:49:44 +0800 #创建时间,主机
  LV Status              available #当前状态
  # open                 0
  LV Size                5.00 GiB #LV的大小
  Current LE             320 #当前LE的个数
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

5、(自行增加的要求,目的熟悉掌握文件系统格式化命令)格式化为ext4文件系统,块大小为4096,预留块大小1%,文件系统名“testext4”,并开机挂载至/usr目录

[root@localhost bin]# mke2fs -t ext4 -L "testext4" -m 1 -b 4096 /dev/mapper/testvg-testlv #创建文件系统相关命令,
mke2fs 1.41.12 (17-May-2010)
Filesystem label=testext4......以下省略
dumpe2fs -h /dev/mapper/testvg-testlv ##查看文件系统相关信息
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   testext4
Last mounted on:          <not available>
Filesystem UUID:          9e0da4a9-03e3-4392-8188-816b165dddf7 ......以下省略
[root@localhost bin]# echo "/dev/mapper/testvg-testlv /users ext4 defaults 0 0" >>/etc/fstab ##通过echo命令追加至/etc/fstab文件,注意每个参数后面的空格
[root@localhost bin]# mount -a 自动挂载存在于/etc/fstab上面的文件系统
[root@localhost bin]# mount | grep "users" ##检查是否挂载成功
/dev/mapper/testvg-testlv on /users type ext4 (rw) 
[root@localhost bin]# cd /users #切换到新挂载的目录下
[root@localhost users]# ls 
lost+found ###出现CentOS 6 出现这个文件即代表挂载成功。

6、新新建用户archlinux,并且家目录为/users/archlinux,而后切换用户,并将/etc/pam.d拷贝至家目录下。

[root@localhost users]# useradd -d /users/archlinux archlinux #创建家目录为指定家目录的用户
[root@localhost users]# su - archlinux #切换用户
[archlinux@localhost ~]$ ls
[archlinux@localhost ~]$ pwd #显示当前路径
/users/archlinux
[archlinux@localhost ~]$ cp -r /etc/pam.d /users/archlinux/ #拷贝文件
[archlinux@localhost ~]$ ls #查看文件是否成功
pam.d

7、扩展testlv为7G,要求archliunx的文件不能丢失。 [archlinux@localhost ~]$ su - root #切换为root用户 [root@localhost users]# lvextend -L 7G /dev/mapper/testvg-testlv #扩张为7G Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents). Logical volume testlv successfully resized.#显示已经成功。 为了安全起见,我们最好再用vgs和vgdisplay

[root@localhost users]# lvs
LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
testlv testvg -wi-ao----  7.00g  #成功了
[root@localhost users]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                R6NUAZ-yOGi-s3Bz-c0Nm-43gQ-r5y7-8ubPQj
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-08-10 13:49:44 +0800
  LV Status              available
  # open                 1
  LV Size                7.00 GiB  #成功了。
  Current LE             448
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

在切换至archliunx用户,到自己的家目录下面查看。。这里就不展示结果,因为扩张损坏数据的可能性几乎为0,我也在本机查看了,未损失。若你的不行损失,请检查步骤和自己的RP。

8、收缩至3G,要求数据不损失。

在收缩时一定需要先取消挂载,并且 e2fsck -f 强制检查,收缩完毕后再一次强行检查。注意查看检测结果

[root@localhost ~]# e2fsck -f /dev/mapper/testvg-testlv
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
testext4: 76/327680 files (0.0% non-contiguous), 55962/1310720 blocks

下面开始缩减文件系统大小,此操作慎重。(缩减)

[root@localhost ~]# resize2fs  /dev/mapper/testvg-testlv 3G  #缩减文件系统
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/testvg-testlv to 786432 (4k) blocks.
The filesystem on /dev/mapper/testvg-testlv is now 786432 blocks long.

继续缩减lv的大小,先执行上面的操作,不然会造成不可恢复的错误,不相信你可试试。

[root@localhost ~]# lvreduce -L 3G /dev/mapper/testvg-testlv 
  WARNING: Reducing active logical volume to 3.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testvg/testlv? [y/n]: y
  Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents).
  Logical volume testlv successfully resized.

自行查看用lvs和lvdisply查看修改后的LV大小 
再次强制检查此分区

e2fsck -f /dev/mapper/testvg-testlv 
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/testvg-testlv: 75/196608 files (0.0% non-contiguous), 47863/786432 blocks

检查无错误,若出现错误请仔细对照每一步的操作。然后进行挂载和查看数据是否还在。

[root@localhost pam.d]# ls
abrt-cli-root   eject                other             runuser-l          su-l
atd             fingerprint-auth     passwd            setup              system-auth
authconfig      fingerprint-auth-ac  password-auth     smartcard-auth     system-auth-ac
authconfig-gtk  gdm                  password-auth-ac  smartcard-auth-ac  system-config-authentication
authconfig-tui  gdm-autologin        polkit-1          smtp               system-config-date
chfn            gdm-fingerprint      poweroff          smtp.postfix       system-config-kdump
chsh            gdm-password         ppp               sshd               system-config-keyboard
config-util     gnome-screensaver    reboot            ssh-keycat         system-config-network
crond           halt                 remote            su                 system-config-network-cmd
cups            login                run_init          sudo               system-config-users
cvs             newrole

一切正常。 
9、创建快照,并备份,和验证快照的功能。因为前面VG还有空间没有完,因此这里直接就用VG剩余的大小。

[root@localhost ~]# lvcreate -s -L 3G -n testlv.backup -p r  /dev/testvg/testlv  #创建一个大小和原文件相同备份分区
  Logical volume "testlv.backup" created. ##提示成功
[root@localhost ~]# mke2fs -t ext4 /dev/mapper/testvg-testlv.backup 挂载分区
mke2fs 1.41.12 (17-May-2010)
/dev/mapper/testvg-testlv.backup: Operation not permitted while setting up superblock
[root@localhost ~]# mount /dev/mapper/testvg-testlv.backup /mnt
mount: block device /dev/mapper/testvg-testlv.backup is write-protected, mounting read-only
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
archlinux  lost+found   #查看文件存在


本文出自 “11539909” 博客,请务必保留此出处http://11549909.blog.51cto.com/11539909/1843876

LVM