lvm简单使用
2024-8-5
·
hexer

lvm是什么

逻辑卷管理器(Logical Volume Manager)是一个用来管理linux磁盘的工具,它可以轻易的将新加入的硬盘的容量,置于旧的已经满的分区中以此实现扩容

主要用途:

  • 动态调整逻辑卷的大小
  • 热插拔硬盘(不停机的情况下添加和更换硬盘)

安装

现在所说的lvm都是指lvm2

一般来说包管理器直接安装就行了,有些发行版是自带的

# 在 Debian/Ubuntu 上
sudo apt-get install lvm2

# 在 Red Hat/CentOS 上
sudo yum install lvm2

# 在 Fedora 上
sudo dnf install lvm2

基本命令

传统的磁盘分区系统,以磁盘分区管理磁盘

而lvm以物理卷卷组逻辑卷管理磁盘

可以在磁盘上直接使用lvm,但一般在系统建立分区之后再在这些分区上建立lvm逻辑卷

/boot分区不能位于逻辑卷组,因为引导程序无法读取lvm

名词解释
物理卷(Physical Volume,PV)lvm管理的基本单位
卷组(Volume Group,VG)卷组是由一个或多个物理卷组成的组合
逻辑卷(Logical Volume,LV)逻辑卷是从卷组中分配出来的存储空间

一个物理卷只能属于一个卷组,一个卷组内有多个逻辑卷,相同卷组的逻辑卷的容量可以随意移动分配

Diagram

pv

pv可以是

  • 整个硬盘(/dev/sda)
  • 一个硬盘分区(/dev/sda1)
  • 一个RAID阵列

查看pv

粗略查看:

pvs

详细查看:

pvdisplay

创建pv

将整个硬盘设置为物理卷:

sudo pvcreate /dev/sda

将某个硬盘分区设置为物理卷:

sudo pvcreate /dev/sda1

将 RAID 设备设置为物理卷:

sudo pvcreate /dev/md0

vg

将多个物理卷组合在一起,形成卷组。卷组的可用空间可以轻易的灵活的分配给不同的逻辑卷

  • 创建卷组:可以使用vgcreate命令将一个或多个物理卷加入一个卷组
  • 扩展卷组:可以使用vgextend命令向现有卷组中添加更多的物理卷

查看vg

粗略查看:

vgs

详细查看:

vgdisplay

创建vg

# 创建vg
sudo vgcreate my_volume_group /dev/sda1 ...[更多物理卷]

# 扩展vg
sudo vgextend my_volume_group /dev/sdc1

lv

逻辑卷可以看作是传统分区(sda1,sda2这种)的替代品

可以做到:

  • 灵活调整大小
  • 创建逻辑卷的快照,用于备份和恢复
  • RAID阵列支持

查看lv

粗略查看:

lvs

详细查看:

lvdisplay

创建lv

sudo lvcreate -n my_logical_volume -L 10G my_volume_group

扩展lv

sudo lvextend -L +5G /dev/my_volume_group/my_logical_volume

缩减lv大小

sudo lvreduce -L -5G /dev/my_volume_group/my_logical_volume

删除lv

sudo lvremove /dev/my_volume_group/my_logical_volume

显示lv

sudo lvdisplay /dev/my_volume_group/my_logical_volume

实践:对ao/root逻辑卷进行扩容

/dev/ao/home/dev/mapper/ao-home 实际上是同一个逻辑卷的不同表示方式1,所以后文两种表达方式可能会相互替换。

先查看系统,发现有一个卷组ao,底下有两个逻辑卷ao-rootao-home,分别对应着系统里的//home目录,ao-root即将爆满,目标是给ao-root扩容

LV   VG Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
home ao -wi-ao----   144.15g
root ao -wi-ao---- < 70.00g
swap ao -wi-ao----    7.83g

1 确定lv的大小

lvs

2 检查文件系统的大小

df -h

3 查看文件系统类型

blkid

根据文件系统的不同,缩减的命令不一样,例如ext4可以用resize2fs,xfs需要用xfs_growfs,而本次示例就是xfs

ext4的扩容相对简单,而本文所讲的xfs麻烦一些,它不支持在线缩减,故需要删除逻辑卷后再重新创建

要减少逻辑卷/dev/ao/home的容量,一般是备份逻辑卷后删除逻辑卷,然后重新创建新的小一点的逻辑卷,并挂载后,随后将卷组的余量分配/dev/ao/root中,再恢复数据

4 备份数据

重要的文件需要进行备份(注意,如果有正在运行的程序需要停止)

tar --exclude='*.symlink' -cvf /备份压缩包.tar /需要备份的文件夹

5 删除逻辑卷home

sudo lvremove /dev/ao/home

6 创建逻辑卷home

在ao卷组中创建70G大小的逻辑卷home

sudo lvcreate -n home -L 70G ao

新的逻辑卷需要重新创建文件系统:

sudo mkfs.xfs /dev/ao/home

7 挂载逻辑卷

编辑/etc/fstab

vim /etc/fstab

这个编辑不一定需要

/etc/fstab 是一个配置文件,用于定义系统启动时需要挂载的文件系统和设备。我是扩容,且创建的lv和原来的容器卷同名,挂载的地方也相同,所以可以不改

然后挂载

mount /dev/ao/home /home
# sudo mount /home # 也可以,作用是直接根据/etc/fstab的配置挂载/home

我在实践时这里发生了报错:

[root@localhost /]# sudo mount /home
mount: /home: wrong fs type, bad option, bad superblock on /dev/mapper/ao-home, missing codepage or helper program, or other error.
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.

所以之后是需要执行 sudo systemctl daemon-reload

查看 df -h 信息,看看是否挂载成功

8 分配卷组余量

将剩下的容器卷的所有空余分配给 /dev/ao/root 扩容

sudo lvextend -l +100%FREE /dev/ao/root

/dev/ao/root 扩容到100G

sudo lvextend -L 50G /dev/ao/root

/dev/ao/root 在原有基础上扩容100G

sudo lvextend -L +10G /dev/ao/root

当逻辑卷增大后,需要用 xfs_growfs 扩大xfs文件系统

sudo xfs_growfs /dev/ao/root

最后,用 vgdisplay ao 查看卷组信息,并用 df -h 查看信息,查看是否正常

9 恢复数据

恢复原来被删除的卷中的数据

tar -xvf 备份压缩包.tar -C 要恢复到的目标文件夹

参考链接:

Footnotes

  1. /dev 是虚拟文件目录,用于存储设备文件,/dev/ao/home 是传统的lvm表达方式, /dev/mapper/ao-home 是逻辑卷的设备映射路径,lvm会默认的纳入设备管理器管理(设备管理器就是lvm的组成部分)。 /dev/mapper/ 就是设备管理器的目录,它还可以管理快照,RAID设备等