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用来实现对卷的良性的管理,更好的利用磁盘资源

LVM逻辑卷管理_第1张图片

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 查看卷信息 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、添加硬盘,进行分区
LVM逻辑卷管理_第2张图片
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.

LVM逻辑卷管理_第3张图片
2、查看
在这里插入图片描述
3、指定逻辑卷LE大小(数量)
指定数量就不需要在指定大小了

[root@qianshuiliyu ~]# lvcreate -n lvm2 -l 10 vgs_pool
  Logical volume "lvm2" created.

在这里插入图片描述
4、查看划分信息
LVM逻辑卷管理_第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"

LVM逻辑卷管理_第5张图片

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

你可能感兴趣的:(网络,linux,运维)