LVM需手动构建PV→VG→LV三层结构,确认方法为:lsblk查看/dev/mapper/或/dev/vg_name/lv_name路径;pvdisplay/vgdisplay/lvdisplay任一无输出即对应层未就绪;df -hT看根分区Source是否为/dev/mapper/或/dev/vg_name/lv_name。

Linux系统默认不启用LVM,必须手动构建PV→VG→LV三层结构,否则所有“LVM操作”都无从谈起。
怎么确认当前系统是否用了LVM
别猜,直接查设备路径和命令输出:
-
lsblk里看到/dev/mapper/vg_name-lv_name或/dev/vg_name/lv_name这类路径,基本就是LVM - 运行
pvdisplay:返回“No physical volume found”说明没建PV - 运行
vgdisplay或lvdisplay:任一为空,就表示对应层未就绪(比如有PV但没建VG) -
df -hT /看根分区:Source列是/dev/mapper/centos-root或/dev/vg00/lv_root这种形式,就是LVM;但/dev/sda2类型为8e只代表“可用于LVM”,不代表已被初始化
新磁盘上从零建LVM的最小可行链
假设一块空盘/dev/sdb,目标是挂载到/data:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 先分区(推荐):
fdisk /dev/sdb→ 新建主分区 → 类型设为8e→ 写入,得/dev/sdb1;整盘直用也行,但pvcreate /dev/sdb风险更高 - 初始化物理卷:
pvcreate /dev/sdb1(不是/dev/sdb,除非你确定要整盘用) - 创建卷组:
vgcreate vg_data /dev/sdb1(名字不能以数字开头、不能含下划线,vg_data安全) - 创建逻辑卷:
lvcreate -L 15G -n lv_data vg_data(-L单位支持G/M,-n指定LV名) - 格式化并挂载:
mkfs.xfs /dev/vg_data/lv_data→mkdir /data→mount /dev/vg_data/lv_data /data - 注意:
LV设备路径优先用/dev/<vg_name>/<lv_name></lv_name></vg_name>,不是/dev/mapper/下的符号链接(后者由udev自动生成,脚本里不稳定)
在线扩容LV时最常漏掉的两步
只跑lvextend,df -h一定看不到新空间:
-
VG没剩余空间?先查vgdisplay vg_data看Free PE是否为0;为0就得vgextend vg_data /dev/sdc1加新PV -
LV扩了,文件系统没跟上:xfs必须用xfs_growfs /data(参数是挂载点,不是设备路径);ext4用resize2fs /dev/vg_data/lv_data(参数是设备路径) -
xfs不支持缩容,ext4缩容前必须umount+e2fsck -f+resize2fs(先缩文件系统,再lvreduce),顺序错或跳步极易丢数据
/boot为什么不能放LVM上
GRUB2早期版本无法从LVM读取/boot,即使现代发行版支持,也存在启动链依赖变长、故障排查更复杂的问题。所有生产环境都把/boot单独分出来,用普通分区(如/dev/sda1),类型83,不走LVM。
真正容易被忽略的是PE大小(默认4M)对LV最小尺寸的隐性约束——比如你用-l 1建LV,实际就是4M;-L 1M会自动向上取整到4M。这个细节在小容量测试或嵌入式场景里会突然卡住。

















