LVM -- 基本命令总结

# LVM -- 基本命令总结

LVM : logical volume management 通过LVM,可以方便的对磁盘空间进行管理。我们首先将一个磁盘或多个磁盘的多个分区设置为LVM类型。接下来,这些LVM类型的分区可以分别创建为physical volume(pv)。多个pv可以组成一个或多个volume group(vg)。在vg中,我们可以建立多个logical volume(lv),而这些lv就是后续根目录、交换空间等结构的挂载点。

此处需要注意的是,在lvm模式下,RedHat (opens new window)推荐/boot目录单独挂载到非lvm的分区中,理由是boot loader无法读取lvm中的内容。不过并不是强制的,可以根据实际需要选择,因为对于GRUB2,已经可以读取lvm了,不过在安装完boot loader,生成"/boot/grub/grub.cfg"文件前,需要修改相关的配置文件"/etc/default/grub" (opens new window),让lvm模块预先加载。

在多系统环境中,如果有Windows类型的系统,那么更好的方式应该是/boot目录单独挂载到非lvm分区上。因为Windows平台无法读取lvm中的内容,/boot目录在lvm中会导致Windows的引导出现错误。

以下内容都是在机械硬盘上进行的实验,SSD慎重参考,未分区的SSD,要先进行数据对齐操作 (opens new window)

显示所有适合用于pv的设备:  lvmdiskscan

# PV

# 显示pv

pvdisplay

# 创建pv

pvcreate /dev/sda1  (针对分区)
pvcreate /dev/sda  (针对磁盘)

# 移除pv

pvremove -v /dev/sda1  (针对分区)
pvremove -v /dev/sda  (针对磁盘)

# 转移pv

将一个pv上的数据转移到同vg中的另一个pv上

pvmove -v /dev/xxxx

PS: 此时原有的pv可以在vg中移除,不影响数据

# VG

# 显示vg

vgdisplay

PS: 如果有vg丢失,可以使用vgscan,扫描存在的vg

# 创建vg

vgcreate <vg-name> <pv-device/partition>

# 扩展vg

vgextend <vg-name> <pv-device/partition>

# 缩减vg

vgreduce <vg-name> <pv-device/partition>

PS: 如果相关pv中存在数据,且有保存数据的需求,需要配合pvmove使用

# LV

# 显示lv

lvdisplay

PS: 如果有lv丢失,可以使用lvscan,扫描存在的lv

# 创建lv

lvcreate -L <size,例如:10G> <vg-name> -n <lv-name>  (指定大小)
lvcreate -l 100%FREE <vg-name> -n <lv-name>  (剩余空间百分比)

# 扩展lv

lvextend -L 500M /dev/vg-name/lv-name  (将lv扩展到500M)
lvextend -L +350M /dev/vg-name/lv-name  (将lv在原有的基础上增加350M)

PS: 以上思路也适合剩余空间百分比的方式

# 缩减lv

lvreduce -L 150M /dev/vg-name/lv-name

PS: 其它缩减方式,可以结合扩展lv部分,发散思维

缩减lv的时候,首先要缩减文件系统:

umount /mnt/data
e2fsck -f /dev/vg-name/lv-name
resize2fs /dev/vg-name/lv-name 150M

# 移除lv

lvremove /dev/vg-name/lv-name

PS: 在lv已经挂载的情况下,首先要通过umount卸载,然后通过lvchange改变lv的状态。

umount /dev/vg-name/lv-name
lvchange -a n /dev/vg-name/lv-name

PS: 以上大部分内容参考自Gentoo WiKi - LVM (opens new window), 部分内容参考自Arch WiKi - LVM (opens new window)。 关于lv的缩减,还有一步到位的命令,过程和原理,与上面提到的方式差不多,具体可以参考Red Hat Docs (opens new window)