LVM系统逻辑卷

发布时间:2023年12月21日

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)
raidchunk(512K)
LVMPE(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了  
文章来源:https://blog.csdn.net/xiaolong1155/article/details/135141366
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。