Lvm 的概念和基本使用详解

124次阅读
没有评论

共计 7786 个字符,预计需要花费 20 分钟才能阅读完成。

一、LVM 是什么

LVM 是 Logical Volume Manager(逻辑卷管理)的简写,它是 Linux 环境下对磁盘分区进⾏管理的⼀种机制。

安装 Linux 操作系统时遇到的⼀个常⻅的难以决定的问题就是如何正确地评估各分区⼤⼩,以分配合适的硬盘空间; 普通的磁盘分区管理⽅式在逻辑分区划分好之后就⽆法改变其⼤⼩; 随着 Linux 的逻辑卷管理功能的出现,这些问题都迎刃⽽解,⽤户在⽆需停机的情况下可以⽅便地调整各个分区⼤⼩,即动态调整磁盘容量,从⽽提⾼磁盘管理的灵活性。

相关概念:s

  • PV(Physical Volume):物理卷

处于 LVM 最底层,可以是物理硬盘或者分区,整个硬盘,或使⽤fdisk 等⼯具建⽴的普通分区,包括许多默认 4MB ⼤⼩的 PE(Physical Extent,基本单元)。

  • PE(Physical Extend):物理区域

PV 中可以⽤于分配的最⼩存储单元,可以在创建 PV 的时候制定(默认为 4MB),如 1M, 2M, 4M, 8M, 32M, 64M… 组成同⼀VG 中所有 PV 的 PE⼤⼩应该相同。

  • VG(Volume Group):卷组

建⽴在 PV 之上,可以含有⼀个到多个 PV,⼀个或多个物理卷组合⽽成的整体。

  • LV(Logical Volume):逻辑卷

建⽴在 VG 之上,相当于原来分区的概念,不过⼤⼩可以动态改变。从卷组中分割出的⼀块空间,⽤于建⽴⽂件
系统。

PV(PE)-->VG-->(PE*n)LV-->⽬录挂载

Lvm 的概念和基本使用详解

二、基础命令

序号 功能 PV 物理卷命令 VG 卷组命令 LV 逻辑卷命令
01 扫描功能 pvscan vgscan lvscan
02 建⽴功能 pvcreate vgcreate lvcreate
03 查询功能 pvdisplay vgdisplay lvdisplay
04 删除功能 pvremove vgremove lvremove
05 扩容功能 vgextend lvextend
06 缩容功能 vgreduce lvreduce

需要先使用 fdisk 命令进行一个分区设置。
演示这里使用的是两块磁盘 /dev/sdb 和 /dev/sdc 各设置一个分区。

1、pv 相关命令

  • 创建pv
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.

pvcreate 的作用就是将磁盘打散成一块块同样大小的 PE。

  • 查询pv
# 简单查看
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <31.00g  4.00m
  /dev/sdb1         lvm2 ---   <2.00g <2.00g
  /dev/sdc1         lvm2 ---   <2.00g <2.00g
# 详细查看
[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <31.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              7935
  Free PE               1
  Allocated PE          7934
  PV UUID               EXKt0P-ICEf-iwsx-zZAI-I3G1-JZNX-DdXKxl

  "/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               cLIVA5-V3Rg-YOen-TIlu-AanQ-BlRP-92y7Uw

  "/dev/sdc1" is a new physical volume of "<2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               <2.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               aKMxlM-XGO1-JnlM-cPS0-8xH6-oyml-AXwUSR

/dev/sda2 是系统本身就存在的 pv。/dev/sdb1/dev/sdc1 都是设置的 2g 大小的硬盘,这里提示小于 2g 是因为存自身数据占用了一部分,大概 4M。

  • 扫描pv
[root@localhost ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<31.00 GiB / 4.00 MiB free]
  PV /dev/sdb1                      lvm2 [<2.00 GiB]
  PV /dev/sdc1                      lvm2 [<2.00 GiB]
  Total: 3 [34.99 GiB] / in use: 1 [<31.00 GiB] / in no VG: 2 [<4.00 GiB]
  • 删除pv
[root@localhost ~]# pvremove /dev/sdb1 /dev/sdc1
  Labels on physical volume "/dev/sdb1" successfully wiped.
  Labels on physical volume "/dev/sdc1" successfully wiped.

2、vg 相关命令

  • 创建vg

为了演示扩容,先用一个 pv 来创建 vg。

[root@localhost ~]# vgcreate vg1 /dev/sdb1
  Volume group "vg1" successfully created
  • 查询vg
# 简单查询
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <31.00g  4.00m
  vg1      1   0   0 wz--n-  <2.00g <2.00g
# 详细查询
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1
  System ID
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               <2.00 GiB
  PE Size               4.00 MiB
  Total PE              511
  Alloc PE / Size       0 / 0
  Free  PE / Size       511 / <2.00 GiB
  VG UUID               BOlSmN-nujL-ydgL-LPlP-qLgs-WcDK-VCrf0p

  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  9
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <31.00 GiB
  PE Size               4.00 MiB
  Total PE              7935
  Alloc PE / Size       7934 / 30.99 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               K2WSC3-MlER-hHUD-t2rZ-SDLE-bJnM-Xq8Wdd
  • 删除vg

vg 在没用使用的情况下可以直接删除。

[root@localhost ~]# vgremove vg1
  Volume group "vg1" successfully removed

如果使用 vg 创建了 lv,同时删除 lv。

[root@localhost ~]# vgremove vg1
Do you really want to remove volume group "vg1" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume vg1/lvol0? [y/n]: y
  Logical volume "lvol0" successfully removed
  Volume group "vg1" successfully removed

3、lv 相关命令

  • 创建lv
# 1、使用 -l 参数,使用vg1空闲100%创建一个新的lv
[root@localhost ~]# lvcreate -l +100%FREE /dev/vg1
  Logical volume "lvol0" created.
# 2、通过 vgdisplay 命令查询到空闲空间大小,PE大小 * 剩余PE数量
[root@localhost ~]# lvcreate -L +2024M /dev/vg1
  Logical volume "lvol0" created.

这里直接创建一个新的lv,占用100%的vg,如果想需要再增加空间必须扩展vg的大小。

挂载前需要进行格式化

[root@localhost ~]# mkfs.ext4 /dev/vg1/lvol0

挂载

[root@localhost ~]# mount /dev/vg1/lvol0 /mnt/
  • 查询 lv
[root@localhost ~]# lvs
  LV    VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  centos -wi-ao---- 28.99g
  swap  centos -wi-ao----  2.00g
  lvol0 vg1    -wi-a----- <2.00g
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                Ca5lMo-NfBk-Ag1C-nKmM-ekFz-1B00-Okm5FC
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-09-07 17:13:31 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                G2S2Aw-a22b-fQMc-uj2O-2D0h-VRvn-uUcFA5
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-09-07 17:13:31 +0800
  LV Status              available
  # open                 1
  LV Size                28.99 GiB
  Current LE             7422
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/vg1/lvol0
  LV Name                lvol0
  VG Name                vg1
  LV UUID                4GiMpd-hVhJ-wHbS-nsVa-ORKT-qq7n-bAlCOg
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2022-11-07 11:14:10 +0800
  LV Status              available
  # open                 0
  LV Size                <2.00 GiB
  Current LE             511
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
  • 扫描lv
[root@localhost ~]# lvscan
  ACTIVE            '/dev/centos/swap' [2.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [28.99 GiB] inherit
  ACTIVE            '/dev/vg1/lvol0' [<2.00 GiB] inherit
  • 删除lv
# 没有进行挂载可以直接删除
[root@localhost ~]# lvremove /dev/vg1/lvol0
Do you really want to remove active logical volume vg1/lvol0? [y/n]: y
  Logical volume "lvol0" successfully removed
# 已经挂载的,需要先 umount
[root@localhost ~]# lvremove /dev/vg1/lvol0
  Logical volume vg1/lvol0 contains a filesystem in use.
[root@localhost ~]# umount /dev/vg1/lvol0
[root@localhost ~]# lvremove /dev/vg1/lvol0
Do you really want to remove active logical volume vg1/lvol0? [y/n]: y
  Logical volume "lvol0" successfully removed

三、扩容

前面都是最基础的创建、删除、查看等操作,接下来看看扩容怎么操作。

之前创建 lv 使用了 vg1 的全部空间,可以使用 vgdisplay 命令查看。

[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <31.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              7935
  Free PE               1
  Allocated PE          7934
  PV UUID               EXKt0P-ICEf-iwsx-zZAI-I3G1-JZNX-DdXKxl

  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg1
  PV Size               <2.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              511
  Free PE               0
  Allocated PE          511
  PV UUID               5QwCbX-mNJb-Gfe3-hQju-sTiR-TP1t-i1EofG

  "/dev/sdc1" is a new physical volume of "<2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               <2.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               qFAJ34-6Ef7-0PEw-letM-4Asq-sp0j-sKNuFn

可以看见 vg1 没有空闲的 PE。

此时如果直接对 lv 进行扩容,则会出现如下提示:

[root@localhost ~]# lvextend -L +2000M /dev/vg1/lvol0
  Insufficient free space: 500 extents needed, but only 0 available

提示扩容需要 500 数量的 PE,但是0个可用。(1个PE大小为4M)

如果 vg 的空间大小足够,则不需要扩容 vg,直接使用 resize2fs

  1. 扩容 vg
[root@localhost ~]# vgextend vg1 /dev/sdc1
  Volume group "vg1" successfully extended
  1. 扩容 lv
[root@localhost ~]# lvextend -L +2000M /dev/vg1/lvol0
  Size of logical volume vg1/lvol0 changed from <2.00 GiB (511 extents) to <3.95 GiB (1011 extents).
  Logical volume vg1/lvol0 successfully resized.

查看磁盘空间。

[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 908M     0  908M    0% /dev
tmpfs                    919M     0  919M    0% /dev/shm
tmpfs                    919M  8.6M  911M    1% /run
tmpfs                    919M     0  919M    0% /sys/fs/cgroup
/dev/mapper/centos-root   29G  1.5G   28G    6% /
/dev/sda1               1014M  189M  826M   19% /boot
tmpfs                    184M     0  184M    0% /run/user/0
/dev/mapper/vg1-lvol0    2.0G  6.0M  1.9G    1% /mnt

发现 /dev/mapper/vg1-lvol0的空间还是2g。

此时不能使用 mkfs.ext4 命令,否则原来的文件会丢失。

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

[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 908M     0  908M    0% /dev
tmpfs                    919M     0  919M    0% /dev/shm
tmpfs                    919M  8.6M  911M    1% /run
tmpfs                    919M     0  919M    0% /sys/fs/cgroup
/dev/mapper/centos-root   29G  1.5G   28G    6% /
/dev/sda1               1014M  189M  826M   19% /boot
tmpfs                    184M     0  184M    0% /run/user/0
/dev/mapper/vg1-lvol0    3.9G  8.0M  3.7G    1% /mnt

注意:

如果是 xfs 文件系统,需要使用 xfs_growfs

[root@localhost /]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=1900032 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=7600128, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=3711, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 7600128 to 8124416

提醒:本文发布于507天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 
阿蛮君
版权声明:本站原创文章,由 阿蛮君 2022-11-07发表,共计7786字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2022-2024 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 无忧云 提供安全防护和加速服务