Linux-LVM的使用

LVM(Logical Volume Manager),即逻辑卷管理,它可以让一个或者多个Linux系统的磁盘(也可以是分区)虚拟称一个组,然后再虚拟出不同的磁盘,这个磁盘可以动态扩容、压缩等操作。

名词解释

下面是使用中经常接触到的三个名词,PE(physical extent)LE(logical extent)在使用中很少遇到,这里不展开叙述。

PV(physical volume):物理卷在逻辑卷管理系统最底层,可以是整个物理硬盘或是分区。

VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。

LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。

创建流程简述

  • 新建一个分区。
  • 将分区类型设置为Linux LVM,对应的类型为8e
  • pvcreate 创建PV。
  • vgcreate创建一个卷组。
  • lvcreate在卷组上创建LV
  • 格式化LV,比如用常见的ext4格式化LV
  • 挂载使用。

创建步骤

新建一个分区

root@localhost:~# fdisk /dev/sdc

Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xc92ad813.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-1048575999, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1048575999, default 1048575999): 

Created a new partition 1 of type 'Linux' and of size 500 GiB.

Command (m for help): t
Selected partition 1
Hex code or alias (type L to list all): 8e
Changed type of partition 'Linux' to 'Linux LVM'.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

root@localhost:~# 

创建PV分区

pvcreate /dev/sdc1

输出:

root@localhost:~# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created.

PV的其他操作

  • pvscan:扫描当前系统上的所有物理卷
  • pvdisplay:显示物理卷的属性
  • pvremove:将物理卷信息删除,使其不再被视为一个物理卷

创建卷组

vgcreate vgdata /dev/sdc1

其中第一个参数vgdata自定义,是vg的名字,第二个参数是上面PV所在的分区。
输出:

root@localhost:~# vgcreate vgdata /dev/sdc1
  Volume group "vgdata" successfully created

VG的其他操作

  • vgscan:查找系统中存在的LVM卷组,并显示找到的卷组列表
  • vgdisplay:显示卷组属性
  • vgextend:动态扩展LVM卷组,向卷组中添加PV来增加卷组的容量
  • vgreduce:通过删除LVM卷组中的PV来减少卷组容量
  • vgremove:删除卷组
  • vgchange:常用来设置卷组的活动状态

创建LV

lvcreate -L 500M -n lvdata vgdata

其中,-L参数指定LV大小,-n参数指定LV名称,最后一个参数是所用VG的名称。

输出:

root@localhost:~# lvcreate -L 500M -n lvdata vgdata
  Logical volume "lvdata" created.

其他LV操作

  • lvscan:扫描当前系统中的所有逻辑卷,及其对应的设备文件
  • lvdisplay:显示逻辑卷属性
  • lvextend:可在线扩展逻辑卷空间
  • lvreduce:缩减逻辑卷空间
  • lvremove:删除逻辑卷

格式化LV

mkfs.ext4 /dev/vgdata/lvdata

其中参数为lvscan里面显示的设备名称。

输出:

root@localhost:~# mkfs.ext4 /dev/vgdata/lvdata
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done                            
Creating filesystem with 128000 4k blocks and 128000 inodes
Filesystem UUID: abbce3dc-yyyy-1111-af91-xxxxxxxxx
Superblock backups stored on blocks: 
        32768, 98304

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

扩容LV

# 扩容到600M
lvextend -L 600M /dev/vgdata/lvdata
# 扩容600M,增加600M
lvextend -L +600M /dev/vgdata/lvdata
# 扩容所有PV容量到LV
lvextend -l +100%FREE /dev/vgdata/lvdata

还需要以下操作

resize2fs -p /dev/vgdata/lvdata

输出:

root@localhost:/# resize2fs -p /dev/vgdata/lvdata
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vgdata/lvdata is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 63
The filesystem on /dev/vgdata/lvdata is now 131070976 (4k) blocks long.

这时候用df -h查看,扩容生效。

开机自动挂载

vim /etc/fstab

增加以下行,其中第一个参数为你的lv名称(用lvscan查看),/data修改为你要挂载的路径。

/dev/vgdata/lvdata   /data        ext4    defaults        0       0

【务必操作】 使用以下命令验证是否成功挂载,没有输出为正常。

mount -a

-- Write by PercyC

更新于:2023年4月20日

直接扩容分区和LVM

  1. 运行 growpart 命令扩容分区(1表示第1个分区,2表示第二个分区,以此类推): growpart /dev/sdc 1

  2. 对 LVM 的 PV,VG,LV 进行扩容: pvs pvresize /dev/sdb1 pvs

vgs lvextend -l +100%free -r /dev/vgdata/lvdata vgs

df -lh resize2fs -p /dev/vgdata/lvdata df -lh

-- Write by PercyC

更新于:2023年6月15日

文章作者: PercyC
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 percy家园
Linux linux
喜欢就支持一下吧