1. LVM命令简介

LVM Logical Volume Manager(逻辑卷管理)的简写,它由HeinzMauelshagenLinux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。

与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称("sales' 'development')代替物理磁盘名('sda''sdb')来标识存储卷。

 1.1. LVM组成部分

.物理卷Physical volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。 Think of physical volumes as big building blocks which can be usedto build your hard drive.

卷组Volume group (VG):将一组物理卷收集为一个管理单元。Group of physical volumes that are used as storage volume (as onedisk). They contain logical volumes. Think of volume groups as hard drives.

逻辑卷Logical volume (LV):虚拟分区,由物理区域(physical extents)组成。A "virtual/logical partition" that resides in a volumegroup and is composed of physical extents. Think of logical volumes as normalpartitions.

物理区域Physical extent (PE):硬盘可供指派给逻辑卷的最小单位(通常为4MB)。A small partof a disk (usually 4MB) that can be assigned to a logical Volume. Think ofphysical extents as parts of disks that can be allocated to any partition.

1.2 LVM基本术语

物理存储介质(Thephysical media):这里指系统的存储设备:硬盘,如:/dev/hda1/dev/sda等等,是存储系统最低层的存储单元。

物理卷PVphysical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

卷组VGVolume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

逻辑卷LVlogical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr)

PEphysical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB

LElogical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

简单来说就是:

PV:是物理的磁盘分区

VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。

LV:也就是从VG中划分的逻辑分区

1.3 PV/VG/LV三者关系图

wKiom1bWhxaRygbXAAG3pgASXEg300.jpg

2. 创建LVM

创建lv,逻辑卷之前首先要创建物理卷其后创建卷组,在卷组之上创建能够被格式化并且挂载使用的逻辑卷。

2.1 常用LVM管理命令


物理卷/PV管理命令:物理卷命令以pv开头

pvcreate:用于创建物理卷

       命令格式:pvcreate   /dev/device

pvdisplay:用于显示物理卷的详细信息

       命令格式:pvdisplay  /dev/device

pvremove:用于删除物理卷

       命令格式:pvremove /dev/device

pvscan:用于显示系统中的物理卷

pvmove:移除物理卷

卷组管理命令:卷组管理命令以vg开头

vgcreate:用于创建卷组

       命令格式:vgcreate  vgname  /dev/device

       -s:指定PE大小MB

vgscan:显示系统中的卷组

vgdisplay:显示卷组的详细信息

vgextend:扩展卷组容量

       命令格式:vgextend  vgname /dev/device

vgreduce:缩减卷组容量。缩减卷组容量之前需要先移除物理卷

       命令格式:vgreduce  vgname /dev/device

vgremove:删除卷组

逻辑卷管理命令:逻辑卷管理命令以lv开头

lvcreate:用于创建逻辑卷

       命令格式:lvcreate -L size  -n Name 卷组名

       -L:指定逻辑卷容量大小[bBsSkKmMgGtTpPeE]

       -n:指定逻辑卷名称

       -s:创建快照

       -p:指定逻辑卷权限为只读或者读写{r|rw}

lvextend:用于扩展逻辑卷容量

       命令格式:lvextend -L [+]size  /dev/卷组名/逻辑卷名

lvreduce:用于缩减逻辑卷容量

       命令格式:lvreduce -L [-]Size  /path/to/lv_device

lvdisplay:查看逻辑卷详细信息

       命令格式:lvdisplay /path/to/lv_device

lvscan:显示系统中所有逻辑卷

lvremove:删除逻辑卷

2.2 创建物理卷/PV实例

#创建两个物理卷,创建之前首先保证磁盘的分区类型为8e

[root@moban ~]# fdisk -l /dev/sdb
 
Disk /dev/sdb: 53.7 GB, 53687091200bytes
255 heads, 63 sectors/track, 6527cylinders
Units = cylinders of 16065 * 512 =8225280 bytes
Sector size (logical/physical): 512bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes /512 bytes
Disk identifier: 0xee3ae3f0
 
  Device Boot      Start         End      Blocks  Id  System
/dev/sdb1               1        2612   20980858+  8e Linux LVM
/dev/sdb2            2613        5224   20980890   8e Linux LVM
[root@moban ~]# pvcreate /dev/sdb{1,2}
 Physical volume "/dev/sdb1" successfully created
 Physical volume "/dev/sdb2" successfully created
[root@moban ~]# pvscan
 PV /dev/sdb1         lvm2 [20.01GiB]
 PV /dev/sdb2         lvm2 [20.01GiB]
 Total: 2 [40.02 GiB] / in use: 0 [0  ] / in no VG: 2 [40.02 GiB]

2.3 创建卷组/VG实例

#创建一个卷组名称为myvg,创建在上一步创建的两个物理卷之上。

[root@moban ~]# vgcreate myvg /dev/sdb{1,2}
 Volume group "myvg" successfully created
[root@moban ~]# vgs
 VG   #PV #LV #SN Attr   VSize VFree
  myvg   2  0   0 wz--n- 40.02g 40.02g


2.4 创建逻辑卷/LV实例

#myvg卷组之上创建一个逻辑卷名为mylv1,大小为5G,并格式化为ext4文件系统,将其挂载到/users目录

[root@moban ~]# lvcreate-L 5G -n mylv1 myvg
 Logical volume "mylv1" created
[root@moban ~]# lvdisplay/dev/myvg/mylv1 
 --- Logical volume ---
 LV Path               /dev/myvg/mylv1
 LV Name                mylv1
 VG Name                myvg
 LV UUID               MsGrBc-0Sdk-DRJp-uv1Q-kOcL-bFUJ-Kw4iZi
 LV Write Access        read/write
 LV Creation host, time moban, 2016-03-02 13:38:25 +0800
 LV Status              available
 # open                 0
 LV Size                5.00 GiB
 Current LE             1280
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           253:0
[root@moban ~]# mke2fs-t ext4 /dev/myvg/mylv1 #格式化操作
[root@moban ~]# mount/dev/myvg/mylv1  /users/ 
[root@moban ~]# df-h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             6.6G  1.4G 4.9G  23% /
tmpfs                 491M     0 491M   0% /dev/shm
/dev/sda1             190M   27M 153M  16% /boot
/dev/mapper/myvg-mylv1
                      4.8G   10M 4.6G   1% /users

2.5 扩展逻辑卷实例

#将上一步创建的mylv1逻辑卷的容量从5G扩展到10G

[root@moban ~]#lvextend -L 10G /dev/myvg/mylv1 
 Size of logical volume myvg/mylv1 changed from 5.00 GiB (1280 extents) to 10.00 GiB (2560 extents).
 Logical volume mylv1 successfully resized
[root@moban ~]# df-h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             6.6G 1.4G  4.9G  23% /
tmpfs                 491M     0 491M   0% /dev/shm
/dev/sda1             190M   27M 153M  16% /boot
/dev/mapper/myvg-mylv1
                      4.8G  10M  4.6G   1% /users

#扩展器逻辑卷容量后通过df -h命令发现容量大小扔为5G并没有扩展到10G,是因为我们只将其物理边界扩大到10G,但其逻辑边界扔为5G大小。所以需要将其逻辑边界也扩大到10G。使用resize2fs命令扩展器逻辑大小。

[root@moban ~]# resize2fs/dev/myvg/mylv1 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv1 is mountedon /users; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of/dev/myvg/mylv1 to 2621440 (4k) blocks.
The filesystem on /dev/myvg/mylv1 is now2621440 blocks long.
 
[root@moban ~]# df-h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             6.6G  1.4G 4.9G  23% /
tmpfs                 491M     0 491M   0% /dev/shm
/dev/sda1             190M   27M 153M  16% /boot
/dev/mapper/myvg-mylv1
                      9.8G  12M  9.3G   1% /users
逻辑卷扩展步骤:
       1.先确定扩展的大小:并确保所属的卷组有足够的剩余空间
       2.扩展物理边界:
              #lvextend-L [+]Size /dev/卷组名/逻辑卷名
       3.扩展逻辑边界:
              #resizee2fs  /dev/卷组名/逻辑卷名

2.6 缩减逻辑卷实例

#上一步我们将mylv1这个逻辑卷扩展到10G大小,现在需要将其大小缩减为原来的5G大小。

#1.卸载逻辑卷挂载

[root@moban ~]# umount/users/


#2.对逻辑卷强制进行文件系统检测是否有错误

[root@moban ~]# e2fsck-f /dev/myvg/mylv1 
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, andsizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summaryinformation
/dev/myvg/mylv1: 11/655360 files (0.0%non-contiguous), 76783/2621440 blocks

#3.缩减其逻辑大小到5G

[root@moban ~]# resize2fs/dev/myvg/mylv1 5G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on/dev/myvg/mylv1 to 1310720 (4k) blocks.
The filesystem on /dev/myvg/mylv1 is now1310720 blocks long.

#4.缩减其物理大小到5G

[root@moban ~]# lvreduce-L 5G /dev/myvg/mylv1 
 WARNING: Reducing active logical volume to 5.00 GiB
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv1?[y/n]: y
 Size of logical volume myvg/mylv1 changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
 Logical volume mylv1 successfully resized
[root@moban ~]# lvdisplay/dev/myvg/mylv1 
 --- Logical volume ---
 LV Path               /dev/myvg/mylv1
 LV Name                mylv1
 VG Name                myvg
 LV UUID               MsGrBc-0Sdk-DRJp-uv1Q-kOcL-bFUJ-Kw4iZi
 LV Write Access        read/write
 LV Creation host, time moban, 2016-03-02 13:38:25 +0800
 LV Status              available
 # open                 0
 LV Size                5.00 GiB
 Current LE             1280
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           253:0

缩减逻辑卷的步骤:
       1、卸载卷,并执行强制检测
              #e2fsck -f /path/to/lv_device
       2、缩减逻辑边界:
              #resize2fs /path/to/lv_device SIZE
       3、缩减物理边界:
              # lvreduce -L [-]Size/path/to/lv_device

3.1 LVM快照概述

    LVM机制还提供了对LV做快照的功能,以此来获得文件系统的状态一致性备份。LVM采用写时复制技术(Copy-On-WriteCOW),不用停止服务或将逻辑卷设为只读就可以进行备份,使用LVM快照功能既可以获得一致备份,又不会影响服务器的可用性。

LVM采用的写时复制,是指当LVM快照创建的时候,仅复制原始卷中数据的元数据。换句话说,也就是在创建LVM逻辑卷的时候,并不会发生数据的物理复制。再换句话说,复制元数据,不复制物理数据,够清楚了吧?因此快照的创建几乎是实时的。当原始卷上有写的操作执行时,快照会跟踪原始卷中块的改变,这个时候原始卷上将要改变的数据会在改变之前拷贝到快照预留的空间。

快照卷:逻辑卷的一种,通常为只读

3.2 创建快照命令格式

命令格式:
       lvcreate-s -L Size -n name -p r  /dev/卷组名/逻辑卷名

3.3 创建快照实例

需求1. 将逻辑卷mylv1挂载至/users/目录,复制一些文件到/users目录内然后对mylv1做快照,查看快照中内容是否与/users目录中内容一致。

需求2. 修改/users/目录下文件内容,验证快照中文件内容是否也被修改。

#1.挂载mylv1/users/目录

[root@moban ~]# df-h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             6.6G  1.4G 4.9G  23% /
tmpfs                 491M     0 491M   0% /dev/shm
/dev/sda1             190M   27M 153M  16% /boot
/dev/mapper/myvg-mylv1
                      4.8G   10M 4.6G   1% /users

#2.复制文件或者创建文件

[root@moban ~]# cd/users/
[root@moban users]# cp /etc/issue /etc/fstab ./
 [root@mobanusers]# echo "2016-03-02" >>test.txt 
[root@moban users]# cat test.txt 
2016-03-02


#3.mylv1创建快照,快照名为snap-mylv1,快照大小为50M,权限为只读

[root@moban ~]#lvcreate -s -L 50M -n snap-mylv1 -p r /dev/myvg/mylv1 
 Rounding up size to full physical extent 52.00 MiB
 Logical volume "snap-mylv1" created
[root@moban ~]# lvs
 LV         VG   Attr      LSize  Pool Origin Data%  Meta% Move Log Cpy%Sync Convert
 mylv1      myvg owi-aos---  5.00g                                                   
  snap-mylv1 myvgsri-a-s--- 52.00m      mylv1  0.02

 

#4.挂载快照snap-mylv1/mnt目录下并查看快照中文件完整性

[root@moban ~]# mount/dev/myvg/snap-mylv1 /mnt/
mount: block device/dev/mapper/myvg-snap--mylv1 is write-protected, mounting read-only
[root@moban ~]# ls/mnt/
fstab issue  lost+found  test.txt
[root@moban ~]#cat /mnt/test.txt 
2016-03-02


#5.修改原数据中内容查看快照中内容是否被修改

[root@moban ~]# echo"new line" >>/users/test.txt 
[root@moban ~]# cat/users/test.txt
2016-03-02
new line


#6.查看快照中test.txt文件内容

[root@moban ~]# cat /mnt/test.txt
2016-03-02

3.4 小结

通过上面可以说明,当我们对元数据制作快照后修改元数据的内容并不会修改其快照中的内容。当我们需要备份某个数据但又不能终止其业务时可以使用快照的功能。

3.5 LVM快照功能及命令练习

1、创建一个由两个物理卷组成大小为20G的卷组myvg,要求PE大小16M;而后新建 大小为7G逻辑卷mylv1,要求其文件系统为ext4,块大小为2048,且开机能自动挂载至/users

[root@moban ~]# pvcreate /dev/sdb{1,2}
 Physical volume "/dev/sdb1" successfully created
 Physical volume "/dev/sdb2" successfully created
[root@moban ~]# pvs
 PV         VG   Fmt Attr PSize  PFree
 /dev/sdb1       lvm2 ---  20.01g 20.01g
 /dev/sdb2       lvm2 ---  20.01g 20.01g
[root@moban ~]# vgcreate myvg  -s 16M /dev/sdb{1,2}
Volume group "myvg"successfully created
[root@moban ~]# lvcreate -L 7G -n mylv1myvg
 Logical volume "mylv1" created
[root@moban ~]# lvs
 LV    VG   Attr      LSize Pool Origin Data%  Meta% Move Log Cpy%Sync Convert
 mylv1 myvg -wi-a----- 7.00g 
[root@moban ~]# mke2fs -t ext4 -b 2048/dev/myvg/mylv1
[root@moban ~]# mkdir /users
[root@moban ~]# tail -1 /etc/fstab
/dev/myvg/mylv1         /users                  ext4   defautls        0 0
[root@moban ~]# mount /dev/myvg/mylv1/users/

2、新建用户openstack,其家目录为/users/openstack,而后切换至openstack用户,复制一些文件至其家目录中;

[root@moban ~]# useradd -d/users/openstack openstack
[root@moban ~]# su - openstack
[openstack@moban ~]$ cp /etc/issue/etc/fstab ./
[openstack@moban ~]$ ls
fstab issue

3、缩减mylv15G大小;而后切换至openstack用户,确保其数据没有丢失;

[root@moban ~]# umount /users/
[root@moban ~]# e2fsck -f/dev/myvg/mylv1
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, andsizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summaryinformation
/dev/myvg/mylv1: 18/458752 files (0.0%non-contiguous), 96263/3670016 blocks
 
[root@moban ~]# resize2fs/dev/myvg/mylv1 5G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on/dev/myvg/mylv1 to 2621440 (2k) blocks.
The filesystem on /dev/myvg/mylv1 is now2621440 blocks long.
 
[root@moban ~]# lvreduce -L 5G/dev/myvg/mylv1
  WARNING: Reducing active logical volume to5.00 GiB
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv1?[y/n]: y
 Size of logical volume myvg/mylv1 changed from 7.00 GiB (448 extents) to5.00 GiB (320 extents).
 Logical volume mylv1 successfully resized
[root@moban ~]# lvs
 LV    VG   Attr      LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 mylv1 myvg -wi-a----- 5.00g 
[root@moban ~]# mount /dev/myvg/mylv1/users/
[root@moban ~]# su - openstack
[openstack@moban ~]$ ls
fstab issue

4、对mylv1创建快照卷snap-mylv1,并通过其备份数据至/tmp/user.tar.bz2

[root@moban ~]# lvcreate -s -L 50M -nsnap-mylv1 /dev/myvg/mylv1
[root@moban ~]# mount/dev/myvg/snap-mylv1 /media/
[root@moban ~]# ls /media/
lost+found  openstack
[root@moban ~]# cd /
[root@moban /]# tar jcf/tmp/user.tar.bz2 media/
[root@moban /]# ls /tmp/
media media.tar.xz  user.tar.bz2