1、基础
1、基础知识
| 术语 | 说明 | |
|---|---|---|
| 物理存储介质(The physical media) | LVM存储介质可以是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用 | — | 
| 物理卷PV(physical volume) | 物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数,创建物理卷它可以用硬盘分区,也可以用硬盘本身 | — | 
| 卷组VG(Volume Group) | 一个LVM卷组由一个或多个物理卷组成,相当于池pool | 相当于一块超大硬盘 | 
| 逻辑卷LV(logical volume) | LV建立在VG之上,可以在LV之上建立文件系统 | 可以跨硬盘分区 | 
| PE(physical extents) | PV物理卷中可以分配的最小存储单元,PE的大小是可以指定的,默认为4MB | 物理卷PV的块大小 | 
| LE(logical extent) | LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应 | 逻辑卷LV的块大小 | 

2、创建步骤
- 物理磁盘被格式化为PV(空间被划分为PE)
- 将不同的物理卷PV加入到同一个卷组VG中(不同物理卷的块大小PE全部添加到卷组VG的PE池内)
- 在卷组VG中创建LV逻辑卷,基于PE创建(组成LV的PE可能来自不同的物理磁盘)
- 逻辑卷LV直接可以格式化后挂载使用
- 逻辑卷LV的变化实际上就是组成该逻辑卷LV的块大小PE数量的变化
3、LVM命令
| 功能 | PV管理命令 | VG管理命令 | LV管理命令 | 
|---|---|---|---|
| s 查看卷信息 | pvs | vgs | lvs | 
| scan 扫描所有卷 | pvscan | vgscan | lvscan | 
| create 创建 | pvcreate | vgcreate | lvcreate | 
| display显示详细信息 | pvdisplay | vgdisplay | lvdisplay | 
| remove 移除 | pvremove | vgremove | lvremove | 
| extend 扩展 | — | vgextend | lvextend | 
| reduce减少 | — | vgreduce | lvreduce | 
4、LVM创建
1、物理卷PV创建
1、添加硬盘,进行分区
 
 2、分区成4个主分区,每个分区1G大小空间,4个主分区是物理卷LV
[root@qianshuiliyu ~]# fdisk /dev/sdb 
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xfef180a0 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (2099200-41943039,默认为 2099200):
将使用默认值 2099200
Last 扇区, +扇区 or +size{K,M,G} (2099200-41943039,默认为 41943039):+1G
分区 2 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
分区号 (3,4,默认 3):
起始 扇区 (4196352-41943039,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-41943039,默认为 41943039):+1G
分区 3 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): p
已选择分区 4
起始 扇区 (6293504-41943039,默认为 6293504):
将使用默认值 6293504
Last 扇区, +扇区 or +size{K,M,G} (6293504-41943039,默认为 41943039):+1G
分区 4 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
3、物理卷PV创建
[root@qianshuiliyu ~]# pvcreate /dev/sdb{1,2,3,4}
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdb3" successfully created.
  Physical volume "/dev/sdb4" successfully created.
4、查看信息
root@qianshuiliyu ~]# pvdisplay /dev/sdb1
#pvdisplay /dev/sdb*,查看所有
  "/dev/sdb1" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               3561Dg-0yZi-A7f5-eSXE-5Ki3-1sV0-0TBORc
[root@qianshuiliyu ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree   
  /dev/sda2  centos   lvm2 a--   <19.00g       0 
  /dev/sdb1           lvm2 ---     1.00g    1.00g
  /dev/sdb2           lvm2 ---     1.00g    1.00g
  /dev/sdb3           lvm2 ---     1.00g    1.00g
  /dev/sdb4           lvm2 ---     1.00g    1.00g
2、卷组VG创建
语法:vgcreate (-s 块大小,默认4M)vg名字 pv的名字( 可以写多个pv)
 1、创建卷组VG
[root@qianshuiliyu ~]# vgcreate vgs_pool /dev/sdb[1,2]
  Volume group "vgs_pool" successfully created
[root@qianshuiliyu ~]# vgcreate  -s 16M vgs_pool /dev/sdb[1,2]
  Volume group "vgs_pool" successfully created
  #如果存储的数据都是大文件,那么PE尽量调大,读取速度快,PE的大小只有为2的幂数,且最大为512M
2、查看
[root@qianshuiliyu ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  centos     1   2   0 wz--n- <19.00g    0 
  vgs_pool   2   0   0 wz--n-   1.99g 1.99g
[root@qianshuiliyu ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree   
  /dev/sda2  centos   lvm2 a--   <19.00g       0 
  /dev/sdb1  vgs_pool lvm2 a--  1020.00m 1020.00m
  /dev/sdb2  vgs_pool lvm2 a--  1020.00m 1020.00m
  /dev/sdb3           lvm2 ---     1.00g    1.00g
  /dev/sdb4           lvm2 ---     1.00g    1.00g
3、查看卷组VG详细信息
[root@qianshuiliyu ~]# vgdisplay vgs_pool 
  --- Volume group ---
  VG Name               vgs_pool
  System ID             
  Format                lvm2
  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               1.99 GiB
  PE Size               4.00 MiB
  Total PE              510
  Alloc PE / Size       0 / 0   
  Free  PE / Size       510 / 1.99 GiB
  VG UUID               rUITGw-IZLb-zVjC-3ug2-HumB-OEft-ffr2gj
3、逻辑卷LV创建
lvcreate -n 逻辑卷的名称 -L 指定lv大小的SIZE(M,G) (-l:小l 指定LE的数量) 卷组名字
 指定大小即是指定数量,创建的时候指定其中一个就不需要在指定另一个
 1、创建
[root@qianshuiliyu ~]# lvcreate -n lvm1 -L 1G vgs_pool 
  Logical volume "lvm1" created.

 2、查看
 
 3、指定逻辑卷LE大小(数量)
 指定数量就不需要在指定大小了
[root@qianshuiliyu ~]# lvcreate -n lvm2 -l 10 vgs_pool
  Logical volume "lvm2" created.

 4、查看划分信息
 
4、格式挂与挂载
LVM的路径在哪里,查看卷组VG中的逻辑卷信息,看结果是链接
ianshuiliyu ~]# ll /dev/vgs_pool/
总用量 0
lrwxrwxrwx 1 root root 7 2月   8 14:30 lvm1 -> ../dm-2
lrwxrwxrwx 1 root root 7 2月   8 14:37 lvm2 -> ../dm-3
1、格式化
[root@qianshuiliyu dev]# mkfs.ext4 /dev/vgs_pool/lvm1 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376
Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
2、挂载
[root@qianshuiliyu ~]# mkdir /lvm1
[root@qianshuiliyu ~]# mount /dev/vgs_pool/lvm1 /lvm1/
[root@qianshuiliyu ~]# cp /etc/passwd /lvm1/
[root@qianshuiliyu ~]# echo '/dev/vgs_pool/lvm1 /lvm1 ext4 defaults 0 0' >> /etc/fstab 
[root@qianshuiliyu ~]# reboot 
查看
```bash
[root@qianshuiliyu ~]# df -Th /dev/vgs_pool/lvm1 
文件系统                  类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vgs_pool-lvm1 ext4  976M  2.6M  907M    1% /lvm1
5、LVM动态调整
1、逻辑卷LV扩容
1、看一下是否有可用的扩容空间,因为空间是从VG里面创建的,并且LV不能跨VG扩容
[root@qianshuiliyu ~]# vgs vgs_pool 
  VG       #PV #LV #SN Attr   VSize VFree  
  vgs_pool   2   2   0 wz--n- 1.99g 976.00m
2、扩容,+30M
当前大小
[root@qianshuiliyu ~]# lvs /dev/vgs_pool/lvm1 
  LV   VG       Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvm1 vgs_pool -wi-ao---- 1.00g 
扩容
[root@qianshuiliyu ~]# lvextend -L +30M /dev/vgs_pool/lvm1 
#+30M是在原有的容量上增加30M大小,不写+,就是扩容到多少
  Rounding size to boundary between physical extents: 32.00 MiB.
  Size of logical volume vgs_pool/lvm1 changed from 1.00 GiB (256 extents) to 1.03 GiB (264 extents).
  Logical volume vgs_pool/lvm1 successfully resized.
查看大小
[root@qianshuiliyu ~]# lvs /dev/vgs_pool/lvm1 
  LV   VG       Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvm1 vgs_pool -wi-ao---- 1.03g  
3、文件系统扩容
 虽然LV上扩容成功,但是文件系统还是原来的大小
[root@qianshuiliyu ~]# df -Th /lvm1/
文件系统                  类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vgs_pool-lvm1 ext4  976M  2.6M  907M    1% /lvm1
[root@qianshuiliyu ~]# resize2fs /dev/vgs_pool/lvm1 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vgs_pool/lvm1 is mounted on /lvm1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vgs_pool/lvm1 is now 270336 blocks long.
[root@qianshuiliyu ~]# df -Th /lvm1/
文件系统                  类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vgs_pool-lvm1 ext4 1006M#容量增加了  2.6M  935M    1% /lvm1
2、卷组VG扩容
将硬盘的sdb3分区添加到VG中
当前大小
[root@qianshuiliyu ~]# vgs vgs_pool 
  VG       #PV #LV #SN Attr   VSize VFree  
  vgs_pool   2   2   0 wz--n- 1.99g 944.00m
扩容
[root@qianshuiliyu ~]# vgextend vgs_pool /dev/sdb3
  Volume group "vgs_pool" successfully extended
查看
[root@qianshuiliyu ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree 
  centos     1   2   0 wz--n- <19.00g     0 
  vgs_pool   3   2   0 wz--n-  <2.99g <1.92g
3、LVM缩小
LVM可以动态增加,也可以动态缩小,但是XFS不支持动态缩小,所以我们无法实现基于xfs的动态缩小。btrfs文件系统支持在线缩小
 卷组VG的缩减,要保证你的物理卷是否被使用,是因为它无法缩减一个正在使用的PV
1、逻辑卷LV缩小
[root@qianshuiliyu ~]# lvreduce -L -30M /dev/vgs_pool/lvm1 
  Rounding size to boundary between physical extents: 28.00 MiB.
  WARNING: Reducing active and open logical volume to 1.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vgs_pool/lvm1? [y/n]: y
  Size of logical volume vgs_pool/lvm1 changed from 1.03 GiB (264 extents) to 1.00 GiB (257 extents).
  Logical volume vgs_pool/lvm1 successfully resized.
但是文件系统的大小没变化
[root@qianshuiliyu ~]# df -Th /lvm1/
文件系统                  类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vgs_pool-lvm1 ext4 1006M  2.6M  935M    1% /lvm1
2、卷组VG缩小
正在使用的PV不能移除,没有使用的可以移除
[root@qianshuiliyu ~]# vgreduce vgs_pool /dev/sdb1 
  Physical volume "/dev/sdb1" still in use
[root@qianshuiliyu ~]# vgreduce vgs_pool /dev/sdb3 
  Removed "/dev/sdb3" from volume group "vgs_pool"
4、移动数据
[root@qianshuiliyu ~]# cp /etc/passwd /lvm1/
1、移动数据
将旧硬盘的数据移动到新硬盘
[root@qianshuiliyu ~]# pvmove /dev/sdb1 /dev/sdb3 
  /dev/sdb1: Moved: 18.43%
  /dev/sdb1: Moved: 100.00%
2、移除旧硬盘
[root@qianshuiliyu ~]# vgreduce vgs_pool /dev/sdb1 
  Removed "/dev/sdb1" from volume group "vgs_pool"

3、添加硬盘看VG扩容
5、删除LVM
步骤
- umount卸载
- lvremove allLV(移除所有逻辑卷)
- vgremove VG(移除卷组)
- pvremove PV(移除物理卷)
1、卸载
[root@qianshuiliyu ~]# umount /lvm1 
2、移除逻辑卷LV
[root@qianshuiliyu ~]# lvremove /dev/vgs_pool/lvm1 
Do you really want to remove active logical volume vgs_pool/lvm1? [y/n]: y
  Logical volume "lvm1" successfully removed
3、移除卷组VG
 如果卷组中还有lv,移出时,会提示,是否也移出
[root@qianshuiliyu ~]# vgremove vgs_pool 
  Volume group "vgs_pool" successfully removed
4、移除物理卷pv
查看物理卷
[root@qianshuiliyu ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g    0 
  /dev/sdb1         lvm2 ---    1.00g 1.00g
  /dev/sdb2         lvm2 ---    1.00g 1.00g
  /dev/sdb3         lvm2 ---    1.00g 1.00g
  /dev/sdb4         lvm2 ---    1.00g 1.00g
移除
[root@qianshuiliyu ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped.
[root@qianshuiliyu ~]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped.
[root@qianshuiliyu ~]# pvremove /dev/sdb3
  Labels on physical volume "/dev/sdb3" successfully wiped.
6、ssm工具的使用
创建环境:使用sdb1,sdb2创建LVM
安装
[root@qianshuiliyu ~]#  yum -y install system-storage-manager
1、创建,一步完成所有操作,自动创建挂载点,自动挂载
[root@qianshuiliyu ~]# ssm create -s 1G -n lv01 --fstype xfs -p vgs_pool /dev/sdb[1,2] /lv01
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Volume group "vgs_pool" successfully created
WARNING: ext4 signature detected on /dev/vgs_pool/lv01 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/vgs_pool/lv01.
  Logical volume "lv01" created.
meta-data=/dev/vgs_pool/lv01     isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Directory '/lv01' does not exist! Create (Y/n/q) ? Y
2、查看
[root@qianshuiliyu ~]# df -Th /lv01/
文件系统                  类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vgs_pool-lv01 xfs  1014M   33M  982M    4% /lv01
1、查看设备信息
[root@qianshuiliyu ~]# ssm list dev
------------------------------------------------------------------
Device           Free        Used     Total  Pool      Mount point
------------------------------------------------------------------
/dev/sda                           20.00 GB                       
/dev/sda1                           1.00 GB            /boot      
/dev/sda2     0.00 KB    19.00 GB  19.00 GB  centos               
/dev/sdb                           20.00 GB                       
/dev/sdb1     0.00 KB  1020.00 MB   1.00 GB  vgs_pool             
/dev/sdb2  1016.00 MB     4.00 MB   1.00 GB  vgs_pool             
/dev/sdb3                           1.00 GB                       
/dev/sdb4                           1.00 GB                       
------------------------------------------------------------------
2、查看池信息
[root@qianshuiliyu ~]# ssm list pool
-------------------------------------------------------
Pool      Type  Devices        Free      Used     Total  
-------------------------------------------------------
centos    lvm   1           0.00 KB  19.00 GB  19.00 GB  
vgs_pool  lvm   2        1016.00 MB   1.00 GB   1.99 GB  
-------------------------------------------------------









