LVM逻辑卷管理

1、基础

1、基础知识

LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘
它就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作

术语说明
物理存储介质(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的块大小

RAID+LVM一起用:LVM是软件的卷管理方式,而RAID是磁盘管理的方法。对于重要的数据,使用RAID来保护物理的磁盘不会因为故障而中断业务,再用LVM用来实现对卷的良性的管理,更好的利用磁盘资源

在这里插入图片描述

2、创建步骤

  1. 物理磁盘被格式化为PV(空间被划分为PE)
  2. 将不同的物理卷PV加入到同一个卷组VG中(不同物理卷的块大小PE全部添加到卷组VG的PE池内)
  3. 在卷组VG中创建LV逻辑卷,基于PE创建(组成LV的PE可能来自不同的物理磁盘)
  4. 逻辑卷LV直接可以格式化后挂载使用
  5. 逻辑卷LV的变化实际上就是组成该逻辑卷LV的块大小PE数量的变化

3、LVM命令

功能PV管理命令VG管理命令LV管理命令
s 查看卷信息pvsvgslvs
scan 扫描所有卷pvscanvgscanlvscan
create 创建pvcreatevgcreatelvcreate
display显示详细信息pvdisplayvgdisplaylvdisplay
remove 移除pvremovevgremovelvremove
extend 扩展vgextendlvextend
reduce减少vgreducelvreduce

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 28 14:30 lvm1 -> ../dm-2
lrwxrwxrwx 1 root root 7 28 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上扩容成功,但是文件系统还是原来的大小

ext4文件系统扩容使用命令语法: resize2fs 逻辑卷名称
xfs文件系统扩容使用命令语法: xfs_growfs 挂载点
resize2fs和xfs_growfs 两者的区别是传递的参数不一样的,xfs_growfs是采用的挂载点;resize2fs是逻辑卷名称,而且resize2fs命令不能对xfs类型文件系统使用

[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

在这里别卸载或重启,及容易出问题,操作前将数据移走,重启或者卸载的确能缩小,但是文件系统变成未知的,你就有可能需要重新格式化才能使用逻辑卷LV,所以一般不缩小,

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

步骤

  1. umount卸载
  2. lvremove allLV(移除所有逻辑卷)
  3. vgremove VG(移除卷组)
  4. 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

SSM:检查关于可用硬驱和LVM卷的信息。显示关于现有磁盘存储设备、存储池、LVM卷和存储快照的信息。查看磁盘信息等等
语法:ssm create -s lv大小 -n lv名称 --fstype lv文件系统类型 -p 卷组名 设备 挂载点

安装

[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  
-------------------------------------------------------

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅水鲤鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值