LVM系统逻辑卷

1.lvm的来源

我们在工作中经常遇到服务器存储数据的分区磁盘空间不够的情况,尤其是当我们的业务是视频的时候,大批量用户上传和下载视频,磁盘空间需要不停的调整。如果我们作为运维每天的工作就是加硬盘是不是有点扯,而且换硬盘的速度也太慢了。

1.1 lvm工作原理

LVM是通过底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用的。

LVM 优势: 可以很方便的扩展自己的空间

分区是在一个硬盘上的连续空间,RAID具有容错功能,不过我们设想一个场景:如果一个分区sdb有100GB,当空间不够的时候,分区就毫无用武之地了。
如果我们新添加一块硬盘,如图:
image.png
新加进来的/dev/sdb1是一个独立的文件系统,无法和sda2合并。 那我们一般需要把sda2的大部分数据,转移到sdb1,然后在运行,当数据量特别大的时候,导数据的时间也会很长,而且即使我们把数据导到了sdb1有时候也会遇到问题。
LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘。
我们可以理解为: LVM是将一个或者多个硬盘的分区在逻辑上整合成一个大的硬盘来使用,当硬盘的空间不够使用的时候,可以将其他硬盘的分区加入其中,这样实现磁盘空间的动态管理。
注意: 逻辑卷的大小是可以动态调整的,而且不会丢失数据, 新加入的硬盘也不会改变上层的逻辑卷。

2.LVM的常用术语

2.1 LVM常见术语

  • The physical media (物理存储介质) : LVM 存储的介质可以是磁盘分区,也可以是整个磁盘,RAID阵列或者SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用
  • 物理卷 pv : PV就是LVM的基本存储逻辑块,但和基本的物理存储介质(比如分区,磁盘)相比,PV有与LVM相关的管理参数
  • 卷组 VG: 一个LVM卷组由一个或者多个物理卷(PV)组成
  • 逻辑卷 LV: LV建立在VG之上,可以在LV上建立文件系统。
  • PE: PV物理卷中可以分配的最小存储单元,PE大小是可以指定的,默认为4MB
  • LE: LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应
  • image.png

物理卷可以是分区可以是磁盘

2.2 常见存储单元总结

备注: 最小存储单元总结

名称 最小存储单元
硬盘 扇区(512字节)
文件系统 block(4k)
raid chunk(512K)
LVM PE(4M)

2.3 LVM元素构成图

image.png

3.LVM优点

  1. 使用卷组,可以让多个硬盘空间组合成一个大的硬盘
  2. 使用逻辑卷,可以跨多个硬盘空间的分区,sdb sdc sdf
  3. 使用逻辑卷的时候,可以自由的调节它的大小
  4. 可以在线对LV,VG,进行创建和删除,调整大小等操作
  5. 允许创建快照,可以用来保存文件系统的备份。

4.逻辑卷管理

image.png
image.png

4.1 创建LVM的基本步骤

物理磁盘被格式化为PV,(空间被划分为一个个的PE) #PV包含PE
不同的PV加入到同一个VG中,(不同PV的PE全部进入到了VG的PE池内) #VG包含PV
在VG中创建LV逻辑卷,基于PE创建,(组成LV的PE可能来自不同的物理磁盘) #LV基于PE创建
LV直接可以格式化后挂载使用 #格式化挂载使用
LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据

4.2 LVM常用命令

image.png
查看相关的命令:
image.png

5.创建使用LVM逻辑卷

5.1 创建pv

5.1.1 添加了一块磁盘sdb

本次实验实现四个分区 这四个分区就是pv(物理卷)
image.png

5.1.2 分区

本次实验实现四个分区 这四个分区就是pv(物理卷)

root@zfl ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x6a964dd2 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{
   K,M,G} (2048-41943039,默认为 41943039):+5G 
分区 1 已设置为 Linux 类型,大小设为 5 GiB




   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
/dev/sdb2        10487808    20973567     5242880   83  Linux
/dev/sdb3        20973568    31459327     5242880   83  Linux
/dev/sdb4        31459328    41943039     5241856   83  Linux


[root@zfl ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part 
  ├─centos-root 253:0    0   44G  0 lvm  /
  └─centos-swap 253:1    0    5G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    5G  0 part 
├─sdb2            8:18   0    5G  0 part 
├─sdb3            8:19   0    5G  0 part 
└─sdb4            8:20   0    5G  0 part 
sr0              11:0    1  4.3G  0 rom  /mnt/cdrom


5.1.3 把分区sdb1,2,3,4创建为pv

[root@zfl ~]# 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.


5.1.4 查看物理卷信息

[root@zfl ~]# pvdisplay /dev/sdb1
  "/dev/sdb1" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               vVkGXM-CvrA-s7U2-Rdvl-dxhq-RH0s-kyz32P
   
[root@zfl ~]# 

5.2 创建卷组

语法: vgcreate vg名字 pv的名字 可以跟多个pv

5.2.1 实现把/dev/sdb1 /dev/sdb2组成卷组

[root@zfl ~]#  vgcreate vg01 /dev/sdb1  /dev/sdb2
  Volume group "vg01" successfully created
[root@zfl ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <49.00g    0 
  vg01     2   0   0 wz--n-   9.99g 9.99g
[root@zfl ~]# 

[root@zfl ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/sda2  centos lvm2 a--  <49.00g     0 
  /dev/sdb1  vg01   lvm2 a--   <5.00g <5.00g
  /dev/sdb2  vg01   lvm2 a--   <5.00g <5.00g
  /dev/sdb3         lvm2 ---    5.00g  5.00g
  /dev/sdb4         lvm2 ---   <5.00g <5.00g

[root@zfl ~]# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  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               9.99 GiB
  PE Size               4.00 MiB
  Total PE              2558
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2558 / 9.99 GiB
  VG UUID               yYwZYo-i4g4-4QHb-SzIt-Sa6S-85N4-AiyoW5

5.3 创建LV(逻辑卷)

lvcreate -n 指定新逻辑卷的名称 -L指定lv大小的SIZE(M,G) (-l:小l 指定LE的数量) vgname

[root@zfl ~]# lvcreate -n lv01 -L 8G vg01
  Logical volume "lv01" created.
[root@zfl ~]# 

[root@zfl ~]# lvs   查看逻辑卷信息
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <44.00g                                                    
  swap centos -wi-ao----   5.00g                                                    
  lv01 vg01   -wi-a-----   8.00g                                                    

[root@zfl ~]# vgs   查看卷组信息
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <49.00g    0 
  vg01     2   1   0 wz--n-   9.99g 1.99g


5.4 逻辑卷的使用

5.4.1 格式化逻辑卷

在卷组下的逻辑卷

[root@zfl ~]# ls /dev/vg01/lv01 
/dev/vg01/lv01
[root@zfl ~]# 

[root@zfl ~]# mkfs.xfs /dev/vg01/lv01  格式化为XFS系统
meta-data=/dev/vg01/lv01         isize=512    agcount=4, agsize=524288 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2097152, 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
[root@zfl ~]# 

[root@zfl ~]# blkid /dev/vg01/lv01 
/dev/vg01/lv01: UUID="b5376889-fdec-4131-a5c4-44d94ac8002b" TYPE="xfs" 
[root@zfl ~]# 

5.4.2 挂载

[root@zfl ~]# mkdir /lv01     #创建挂载目录
[root@zfl ~]# 

[root@zfl ~]# mount /dev/vg01/lv01 /lv01

[root@zfl ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   44G  8.1G   36G   19% /
devtmpfs                 2.5G     0  2.5G    0% /dev
tmpfs                    2.5G     0  2.5G    0% /dev/shm
tmpfs                    2.5G   12M  2.5G    1% /run
tmpfs                    2.5G     0  2.5G    0% /sys/fs/cgroup
/dev/sr0                 4.3G  4.3G     0  100% /mnt/cdrom
/dev/sda1               1014M  147M  868M   15% /boot
tmpfs                    506M     0  506M    0% /run/user/0
/dev/mapper/vg01-lv01    8.0G   33M  8.0G    1% /lv01

[root@zfl ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        44G  8.1G   36G   19% /
devtmpfs                devtmpfs  2.5G     0  2.5G    0% /dev
tmpfs                   tmpfs     2.5G     0  2.5G    0% /dev/shm
tmpfs                   tmpfs     2.5G   12M  2.5G    1% /run
tmpfs                   tmpfs     2.5G     0  2.5G    0% /sys/fs/cgroup
/dev/sr0                iso9660   4.3G  4.3G     0  100% /mnt/cdrom
/dev/sda1               xfs      1014M  147M  868M   15% /boot
tmpfs                   tmpfs     506M     0  506M    0% /run/user/0
/dev/mapper/vg01-lv01   xfs       8.0G   33M  8.0G    1% /lv01

5.5 lv 扩容

扩容前确认下是否有可扩容空间,空间是从VG创建的。
任何逻辑卷的容量扩大都是先要扩充卷组容量

扩容命令是: extend vgextend lvgextend

5.5.1 扩容逻辑卷


因为VG01 还有1.9G空间

[root@zfl ~]# lvextend -L +1G /dev/vg01/lv01
  Size of logical volume vg01/lv01 changed from 8.00 GiB (2048 extents) to 9.00 GiB (2304 extents).
  Logical volume vg01/lv01 successfully resized.

使lv01逻辑卷变为9g

[root@zfl ~]# df -Th /lv01
文件系统              类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs   8.0G   33M  8.0G    1% /lv01
[root@zfl ~]# 

但是这会还是8g

5.5.2 更新/刷新文件系统大小

扩容后应该通知内核,否则看到的还是原来的旧大小
刷新文件系统容量
image.png

[root@zfl ~]# xfs_growfs /dev/vg01/lv01
meta-data=/dev/mapper/vg01-lv01  isize=512    agcount=4, agsize=524288 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2097152, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2097152 to 2359296


[root@zfl ~]# df -Th /lv01
文件系统              类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vg01-lv01 xfs   9.0G   33M  9.0G    1% /lv01
[root@zfl ~]# 

5.6 VG扩容

[root@zfl ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree   
  centos   1   2   0 wz--n- <49.00g       0 
  vg01     2   1   0 wz--n-   9.99g 1016.00m
[root@zfl ~]# 

[root@zfl ~]# pvcreate /dev/sdb3 /dev/sdb4
  Physical volume "/dev/sdb3" successfully created.
  Physical volume "/dev/sdb4" successfully created.
[root@zfl ~]# 

[root@zfl ~]# vgextend vg01 /dev/sdb3
  Volume group "vg01" successfully extended
[root@zfl ~]# vgs vg01
  VG   #PV #LV #SN Attr   VSize   VFree 
  vg01   3   1   0 wz--n- <14.99g <5.99g
[root@zfl ~]# 
我们可以看到之前的vg01从10个g变成15个g了  

相关推荐

  1. 逻辑LVM

    2023-12-23 03:14:02       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-23 03:14:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-23 03:14:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-23 03:14:02       82 阅读
  4. Python语言-面向对象

    2023-12-23 03:14:02       91 阅读

热门阅读

  1. 使用卷积进行数据平滑处理

    2023-12-23 03:14:02       55 阅读
  2. ubuntu20.04.3

    2023-12-23 03:14:02       64 阅读
  3. ES 索引关闭source后是否可以更新?

    2023-12-23 03:14:02       55 阅读
  4. 【大数据面试】Kafka面试题与答案

    2023-12-23 03:14:02       55 阅读
  5. GO设计模式——19、中介者模式(行为型)

    2023-12-23 03:14:02       73 阅读
  6. Centos 7.6 gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)

    2023-12-23 03:14:02       54 阅读
  7. TypeScript 常见配置项

    2023-12-23 03:14:02       70 阅读
  8. python异常之try/else分句

    2023-12-23 03:14:02       57 阅读