运维实施36-逻辑卷管理 (LVM)

逻辑卷介绍

逻辑卷是使用逻辑卷组管理(Logic Volume Manager)创建出来的设备。

要了解逻辑卷,首先需要理解LVM中的几个核心概念:

  • 物理卷(Physical Volume, PV):物理磁盘分区 ==fdisk==。

  • 卷组(Volume Group, VG):PV的集合,是物理存储资源的池。

  • 逻辑卷(Logic Volume, LV):从VG中划分出来的一块逻辑磁盘空间。

  • 物理区域(Physical Extent, PE):每个物理卷被划分为大小相同的基本单元,默认4MB,是LVM可寻址的最小单位。

  • 逻辑区域(Logical Extent, LE):逻辑卷的基本单位,与PE大小相同并一一对应。

逻辑卷的工作流程:物理磁盘或磁盘分区转换为物理卷,一个或多个物理卷组成卷组,从卷组中划分出逻辑卷。

为什么使用逻辑卷

相比直接使用物理磁盘分区,逻辑卷主要有两个优势:

  • 大容量存储管理:可以将多个小容量的物理磁盘聚合为一个大的逻辑磁盘。例如,需要30TB的/data存储,单个物理磁盘无法满足,但多个物理磁盘组成的逻辑卷可以。

  • 动态调整容量:业务初期难以准确预估所需磁盘空间,使用逻辑卷可以根据实际需求灵活扩展或收缩容量。

磁盘与LVM的关系

逻辑卷管理中的各层次关系:

  • 硬盘 -> 分区(part) → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 格式化 → 挂载使用

数据块大小对比:

  • 硬盘读取数据最小单位:1个扇区 = 512字节

  • 操作系统读取数据最小单位:1个数据块 = 4KB = 8个扇区

  • LVM寻址最小单位:1个PE = 4MB = 1024个数据块

逻辑卷LVM应用

创建逻辑卷的思路

  1. 准备物理设备(fdisk)

  2. 将物理设备转换为物理卷

  3. 创建卷组并将物理卷加入

  4. 在卷组上创建逻辑卷

  5. 格式化逻辑卷

  6. 挂载使用

逻辑卷创建实例

需求:创建一个2.5G大小的逻辑卷

首先,将两个物理分区转换为物理卷:

==pvcreate== ==pvs== ==pvdisplay==

# 将/dev/sdb1转换为物理卷
[root@localhost ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.

# 将/dev/sdb2转换为物理卷
[root@localhost ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.

 查看物理卷信息:

# 查看所有物理卷的简要信息
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g    0
  /dev/sdb1         lvm2 ---    2.00g 2.00g
  /dev/sdb2         lvm2 ---    2.00g 2.00g

# 查看指定物理卷的详细信息
[root@localhost ~]# pvdisplay /dev/sdb1
  "/dev/sdb1" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               nrgMce-USoG-nEyH-6YT1-f2y7-V4y1-zsdRnS

创建卷组并将物理卷加入:

==vgcreate== ==vgs==

# 创建名为vg01的卷组,包含两个物理卷
[root@localhost ~]# vgcreate vg01 /dev/sdb1 /dev/sdb2
  Volume group "vg01" successfully created

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

创建逻辑卷:

==lvcreate== ==lvs== ==lvdisplay==

# 在vg01卷组上创建名为lv01的2.5G逻辑卷
[root@localhost ~]# lvcreate -n lv01 -L 2.5G vg01
  Logical volume "lv01" created.

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

# 查看块设备信息,可以看到逻辑卷的结构
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
|-sda1            8:1    0    1G  0 part /boot
`-sda2            8:2    0   19G  0 part
  |-centos-root 253:0    0   17G  0 lvm  /
  `-centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   10G  0 disk
|-sdb1            8:17   0    2G  0 part
| `-vg01-lv01   253:2    0  2.5G  0 lvm
`-sdb2            8:18   0    2G  0 part
  `-vg01-lv01   253:2    0  2.5G  0 lvm
sr0              11:0    1  9.6G  0 rom

格式化逻辑卷为ext4文件系统:

[root@localhost vg01]# mkfs.ext4 /dev/vg01/lv01
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
163840 inodes, 655360 blocks
32768 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=671088640
20 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

查看文件系统UUID并挂载:

# 查看逻辑卷的UUID和文件系统类型
[root@localhost vg01]# blkid /dev/vg01/lv01
/dev/vg01/lv01: UUID="ba4cc7c2-6190-41a0-8808-20a8312ae2a1" TYPE="ext4"

# 创建挂载点并挂载逻辑卷
[root@localhost vg01]# mkdir /u01
[root@localhost vg01]# mount /dev/vg01/lv01 /u01

# 确认挂载成功
[root@localhost vg01]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
|-sda1            8:1    0    1G  0 part /boot
`-sda2            8:2    0   19G  0 part
  |-centos-root 253:0    0   17G  0 lvm  /
  `-centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   10G  0 disk
|-sdb1            8:17   0    2G  0 part
| `-vg01-lv01   253:2    0  2.5G  0 lvm  /u01
`-sdb2            8:18   0    2G  0 part
  `-vg01-lv01   253:2    0  2.5G  0 lvm  /u01
sr0              11:0    1  9.6G  0 rom
创建逻辑卷的选项说明

逻辑卷创建时有两种指定大小的方式:

  • -L:直接指定容量大小,如-L 2.5G

  • -l:指定PE个数或剩余空间百分比

    • PE是LVM最小单位,1PE=4MB,如-l 100创建400MB的逻辑卷

    • 百分比使用,如-l 100%free使用全部剩余空间

查看卷组详细信息,了解PE分配情况:

[root@localhost vg01]# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               3.99 GiB
  PE Size               4.00 MiB
  Total PE              1022
  Alloc PE / Size       640 / 2.50 GiB
  Free  PE / Size       382 / 1.49 GiB
  VG UUID               oOMYwR-okaZ-Cbaj-FbCa-vsE2-8urR-MM9fB1

创建使用指定PE数量和全部剩余空间的逻辑卷:

# 创建100个PE大小的逻辑卷lv02
[root@localhost vg01]# lvcreate -n lv02 -l 100 vg01
  Logical volume "lv02" created.
[root@localhost vg01]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <17.00g
  swap centos -wi-ao----   2.00g
  lv01 vg01   -wi-ao----   2.50g
  lv02 vg01   -wi-a----- 400.00m

# 查看卷组剩余空间
[root@localhost vg01]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <19.00g    0
  vg01     2   2   0 wz--n-   3.99g 1.10g

# 创建使用全部剩余空间的逻辑卷lv03
[root@localhost vg01]# lvcreate -n lv03 -l100%free vg01
  Logical volume "lv03" created.
[root@localhost vg01]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <17.00g
  swap centos -wi-ao----   2.00g
  lv01 vg01   -wi-ao----   2.50g
  lv02 vg01   -wi-a----- 400.00m
  lv03 vg01   -wi-a-----   1.10g

删除逻辑卷组件

删除逻辑卷相关组件的命令:

  • lvremove:删除逻辑卷

  • vgremove:删除卷组

  • pvremove:删除物理卷

示例:删除逻辑卷lv03

[root@localhost vg01]# lvremove /dev/vg01/lv03
Do you really want to remove active logical volume vg01/lv03? [y/n]: y
  Logical volume "lv03" successfully removed

注意事项:

  • 如果逻辑卷正在使用中,需要先取消挂载再删除

  • 删除物理卷前,如存在对应卷组,需使用vgreduce从卷组中移除:vgreduce vg01 /dev/sdb2

逻辑卷动态扩容

需求:将/u01目录动态扩容到3G

扩容思路:

  1. 查看/u01目录对应的逻辑卷

  2. 检查该逻辑卷所在卷组的剩余空间是否足够

  3. 如卷组空间不够,先扩容卷组,再扩容逻辑卷

  4. 如卷组空间足够,直接扩容逻辑卷

检查当前挂载和空间情况:

[root@localhost vg01]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.8G     0  3.8G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G   13M  3.8G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  9.7G  7.4G  57% /
/dev/sda1               1014M  187M  828M  19% /boot
tmpfs                    781M   12K  781M   1% /run/user/42
tmpfs                    781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01    1.5G  4.5M  1.4G   1% /u01

使用空闲物理设备扩容卷组:

[root@localhost vg01]# vgextend vg01 /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
  Volume group "vg01" successfully extended

扩容逻辑卷:

[root@localhost vg01]# lvextend /dev/vg01/lv01 -L +1.5G
  Size of logical volume vg01/lv01 changed from 1.50 GiB (384 extents) to 3.00 GiB (768 extents).
  Logical volume vg01/lv01 successfully resized.

[root@localhost vg01]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <17.00g
  swap centos -wi-ao----   2.00g
  lv01 vg01   -wi-ao----   3.00g

调整文件系统大小以匹配逻辑卷:

[root@localhost ~]# resize2fs /dev/vg01/lv01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /u01; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg01/lv01 is now 786432 blocks long.

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.8G     0  3.8G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G   13M  3.8G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  9.7G  7.4G  57% /
/dev/sda1               1014M  187M  828M  19% /boot
tmpfs                    781M  8.0K  781M   1% /run/user/42
tmpfs                    781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01    3.0G  4.5M  2.8G   1% /u01

完成扩容后,可以看到/u01目录已从1.5G扩容到3.0G,而且是在线扩容,无需卸载文件系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值