)
目录一、LVM的基本概念和组成部分二、关于在扩容前是否需要进行分区操作1.核心结论2.为什么许多教程推荐先分区(1) 历史与兼容性(2) 管理习惯与安全性(3) 企业环境实践3.直接使用整盘作为 PV 的场景4.分区 vs 直接使用整盘的对比5.操作示例下面示例会进行演示(1) 使用分区创建 PV(2) 直接使用整盘创建 PV6.总结建议三、lvm方式下的扩容流程1.逻辑卷扩容简要流程2.LVM相关命令四、扩容实操三个案例一卷组、逻辑卷扩容到已有的挂载路径1.选择添加硬盘2.识别新增硬盘块3.添加物理卷4.查看根分区的所在的卷组类似于存储池的概念5.将新增的物理卷扩展的默认的卷组中6.查看当前逻辑卷的空间状态7.使用 lvcreate8.刷新根分区并查看状态二直接扩展待扩展磁盘进行lvm扩容1.确认待扩容块设备2.对对应的块设备加阔10G空间3.借助parted工具将sda2分区填满4.调整物理卷大小5.扩展逻辑卷6.扩展文件系统三卷组、逻辑卷的操作挂载到指定路径1.创建分区fdisk /dev/硬盘名2.创建物理卷同上。3.创建卷组4.创建逻辑卷5.查看分区信息6.格式化文件系统7.挂载与使用挂载到前面所创建的 /database_log目录下8.扩展逻辑卷操作9.设置开机自动挂载10.重启查看五、关键注意事项1.文件系统类型2.根分区是否选用lvm管理方式一、LVM的基本概念和组成部分LVM的方式扩容LVMLogical Volume Manager逻辑卷管理是一种在Linux环境下对磁盘分区进行管理的管理机制。它通过在硬盘和分区之上创建一个逻辑层提供了一种更为灵活和动态的磁盘管理方式。在虚拟机扩容中新增一块硬盘和直接在原有硬盘基础上扩容是一样的只不过在原有硬盘上扩容需要关机才可以执行LVM主要由以下几个部分组成物理卷Physical Volume, PVLVM的基本存储逻辑块可以是硬盘分区或整个硬盘。卷组Volume Group, VG由一个或多个物理卷组成的存储池类似于非LVM系统中的物理硬盘。逻辑卷Logical Volume, LV在卷组上创建的逻辑磁盘类似于非LVM系统中的硬盘分区但具有更高的灵活性。物理扩展PEPE是LVM的最小存储单元默认大小为4M。二、关于在扩容前是否需要进行分区操作使用 LVM 之前是否需要先进行分区操作取决于具体场景和需求。以下是详细解释1.核心结论LVM 可以直接使用整个磁盘无需分区但通常推荐先分区再使用 LVM原因包括兼容性、管理习惯、安全隔离等。关键区分物理卷PVLVM 直接管理的存储单元可以是整个磁盘如/dev/sdb或分区如/dev/sdb1。是否分区由用户决定但分区更常见。2.为什么许多教程推荐先分区(1) 历史与兼容性引导需求早期系统无法从 LVM 启动需单独分区存放 /boot引导文件。虽然现代系统支持 LVM 启动但仍有场景需要独立分区。工具兼容性某些工具如旧版fdisk对未分区的磁盘处理不够友好分区可避免潜在问题。(2) 管理习惯与安全性明确标记用途分区类型设置为Linux LVM文件系统类型代码 8e 明确标识该分区专用于 LVM避免误操作。隔离风险若磁盘有其他用途如预留空间或与其他系统共享分区可划分明确边界。(3) 企业环境实践灵活扩展分区后可通过 LVM 跨多个磁盘/分区合并空间如将 /dev/sdb1 和 /dev/sdc1) 加入同一卷组。避免整盘占用若磁盘未完全用于 LVM分区可划分多用途区域如部分给 LVM部分给其他文件系统。3.直接使用整盘作为 PV 的场景专用磁盘若整块磁盘完全用于 LVM可直接创建物理卷bashpvcreate /dev/sdb # 直接使用整块磁盘优势简化操作无需分区。避免分区表占用空间但现代磁盘分区表开销可忽略。4.分区 vs 直接使用整盘的对比场景分区后再用 LVM直接使用整盘 LVM兼容性高兼容旧系统/工具低某些工具可能不识别未分区磁盘用途标识明确分区类型标记为Linux LVM无明确标记多用途磁盘支持可划分多个分区不支持整盘专用于 LVM管理复杂度稍高需分区步骤低直接操作整盘适用场景通用场景、企业环境专用磁盘、简单环境5.操作示例下面示例会进行演示(1) 使用分区创建 PV[rootlocalhost ~]# fdisk /dev/sdc p # 查看分区信息 n # 创建分区 p # 选择主分区 回车默认默认会将所有剩余空间都划入该分区 t # 修改分区格式 L # 列出所有分区格式信息 8e # 创建分区并标记为 Linux LVM类型 8e8e为lvm类型的hex代码 p # 查看分区信息 w # 保存并退出 # 创建物理卷 sudo pvcreate /dev/sdb1(2) 直接使用整盘创建 PV# 直接操作整块磁盘无需分区 sudo pvcreate /dev/sdb6.总结建议推荐先分区除非磁盘完全专用于 LVM否则分区能提高兼容性和管理灵活性。例外情况若磁盘仅用于 LVM 且环境支持如现代 Linux 系统可直接使用整盘。三、lvm方式下的扩容流程1.逻辑卷扩容简要流程建立物理卷 --- pv --- 类似于硬盘域的概念建立卷组 --- vg --- 类似于存储池的概念建立逻辑卷 --- lv --- 对标lun卷格式化安装文件系统 --- mkfs挂载 --- mount2.LVM相关命令功能物理卷管理卷组管理逻辑卷管理Scan扫描pvscanvgscanIvscanCreate建立pvcreatevgcreatelvcreateDisplay显示pvdisplayvgdisplayIvdisplayRemove删除pvremovevgremovelvremoveExtend扩展-vgextendIvextendReduce减少-vgreduceIvreduce四、扩容实操三个案例一卷组、逻辑卷扩容到已有的挂载路径1.选择添加硬盘2.识别新增硬盘块物理插入磁盘后系统通常会自动识别但仍需手动操作lsblk # 查看磁盘及分区结构确认新磁盘是否加载成功如 /dev/sdb注lsblk用于列出系统中所有可用的块设备如硬盘、分区、LVM、RAID、光驱等。它以树状图的方式显示设备之间的关系而不显示它们的文件系统详细信息这使得lsblk在快速查看系统的存储层次结构时非常有用。3.添加物理卷注物理卷只能从新增加的硬盘中进行挑选语法pvcreate 硬盘的位置4.查看根分区的所在的卷组类似于存储池的概念注新安装的操作系统如果使用lvm管理磁盘空间的话默认会存在一个根目录卷组名vg_centos6的卷组。5.将新增的物理卷扩展的默认的卷组中格式 vgextend vg_centos6 物理卷名将物理卷/dev/sdb扩展到卷组centos【上一步提到的根目录卷组名】)6.查看当前逻辑卷的空间状态7.使用 lvcreate格式Ivcreate [选项] 逻辑卷名 卷组名# 将卷组中的空闲空间扩展到根分区逻辑卷lvextend -l 100%FREEdev/vg_centos6/lv_root# 若想指定大小分配则可以使用lvcreate -L 2GB -n LV_Name VG_NAME常用参数-l指的是按照比例来进行配置-L指定大小-n的作用是指定新创建的逻辑卷Logical Volume的名称。8.刷新根分区并查看状态注刷新分区之前需要查看分区类型格式如ext4、xfs。查看方式如下方式一使用df -TH来进行查看方式二使用blkid查看所有盘符信息注df命令用于显示文件系统的磁盘空间使用情况。常用选项-T表示以易读的格式显示,-h表示使用人类可读的格式。# 若磁盘格式是xfs则执行如下命令xfs_growfs /dev/vg_centos6/lv_root# 若磁盘格式是ext4则执行如下命令resize2fs /dev/vg_centos6/lv_root二直接扩展待扩展磁盘进行lvm扩容1.确认待扩容块设备lsblk查看发现sda块设备下的sda2分区空间不够2.对对应的块设备加阔10G空间3.借助parted工具将sda2分区填满4.调整物理卷大小分区扩展完成之后需完成其中最重要的一步就是进行pvresize /dev/sda2这步操作主要是使用 pvresize 命令来调整物理卷的大小以匹配新的分区大小。如果不执行将会出现如下现象执行pvresize /dev/sda25.扩展逻辑卷6.扩展文件系统整体过程[rootlocalhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 29G 0 part ├─centos-root 253:0 0 27G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 1G 0 disk └─sdb1 8:17 0 1023M 0 part /history_data sdc 8:32 0 25G 0 disk └─sdc1 8:33 0 25G 0 part /dmdata2 sr0 11:0 1 4.4G 0 rom [rootlocalhost ~]# parted /dev/sda GNU Parted 3.1 Using /dev/sda Welcome to GNU Parted! Type help to view a list of commands. (parted) help align-check TYPE N check partition N for TYPE(min|opt) alignment help [COMMAND] print general help, or help on COMMAND mklabel,mktable LABEL-TYPE create a new disklabel (partition table) mkpart PART-TYPE [FS-TYPE] START END make a partition name NUMBER NAME name partition NUMBER as NAME print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition quit exit program rescue START END rescue a lost partition near START and END resizepart NUMBER END resize partition NUMBER rm NUMBER delete partition NUMBER select DEVICE choose the device to edit disk_set FLAG STATE change the FLAG on selected device disk_toggle [FLAG] toggle the state of FLAG on selected device set NUMBER FLAG STATE change the FLAG on partition NUMBER toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER unit UNIT set the default unit to UNIT version display the version number and copyright information of GNU Parted (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sda: 42.9GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 1075MB 1074MB primary xfs boot 2 1075MB 32.2GB 31.1GB primary lvm (parted) resizepart 2 100% (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sda: 42.9GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 1075MB 1074MB primary xfs boot 2 1075MB 42.9GB 41.9GB primary lvm (parted) quit Information: You may need to update /etc/fstab. [rootlocalhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 39G 0 part ├─centos-root 253:0 0 27G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 1G 0 disk └─sdb1 8:17 0 1023M 0 part /history_data sdc 8:32 0 25G 0 disk └─sdc1 8:33 0 25G 0 part /dmdata2 sr0 11:0 1 4.4G 0 rom [rootlocalhost ~]# [rootlocalhost ~]# pvresize /dev/sda2 Physical volume /dev/sda2 changed 1 physical volume(s) resized or updated / 0 physical volume(s) not resized [rootlocalhost ~]# [rootlocalhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 39.00g 10.00g [rootlocalhost ~]# [rootlocalhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 39.00g 10.00g [rootlocalhost ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- 39.00g 10.00g [rootlocalhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 26.99g swap centos -wi-ao---- 2.00g [rootlocalhost ~]# blkid /dev/sda1: UUIDf5c128eb-513e-47c6-a725-564c557e05af TYPExfs /dev/sda2: UUIDI3JO1t-Tqpj-3F5B-hlSt-lIgS-nY3p-cux7mc TYPELVM2_member /dev/sdb1: UUIDa927f23c-f9bc-4b2e-8e2e-d369e8f9b176 TYPExfs /dev/sdc1: UUIDd176f4c4-c540-41f3-9ec3-3d079c323c7d TYPEext4 /dev/sr0: UUID2020-11-04-11-36-43-00 LABELCentOS 7 x86_64 TYPEiso9660 PTTYPEdos /dev/mapper/centos-root: UUID75b0fa64-e099-430f-a143-706f8fcc0209 TYPExfs /dev/mapper/centos-swap: UUIDa8d4df56-dad9-41ba-85e3-a7063645cc80 TYPEswap [rootlocalhost ~]# lvextend -l 100%FREE /dev/centos/root Size of logical volume centos/root changed from 26.99 GiB (6910 extents) to 37.00 GiB (9471 extents). Logical volume centos/root successfully resized. [rootlocalhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 39G 0 part ├─centos-root 253:0 0 37G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 1G 0 disk └─sdb1 8:17 0 1023M 0 part /history_data sdc 8:32 0 25G 0 disk └─sdc1 8:33 0 25G 0 part /dmdata2 sr0 11:0 1 4.4G 0 rom [rootlocalhost ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 898M 0 898M 0% /dev tmpfs 910M 0 910M 0% /dev/shm tmpfs 910M 9.6M 901M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 27G 24G 3.1G 89% / /dev/sdb1 1020M 33M 988M 4% /history_data /dev/sdc1 25G 8.5G 15G 37% /dmdata2 /dev/sda1 1014M 151M 864M 15% /boot tmpfs 182M 0 182M 0% /run/user/0 [rootlocalhost ~]# [rootlocalhost ~]# blkid /dev/sda1: UUIDf5c128eb-513e-47c6-a725-564c557e05af TYPExfs /dev/sda2: UUIDI3JO1t-Tqpj-3F5B-hlSt-lIgS-nY3p-cux7mc TYPELVM2_member /dev/sdb1: UUIDa927f23c-f9bc-4b2e-8e2e-d369e8f9b176 TYPExfs /dev/sdc1: UUIDd176f4c4-c540-41f3-9ec3-3d079c323c7d TYPEext4 /dev/sr0: UUID2020-11-04-11-36-43-00 LABELCentOS 7 x86_64 TYPEiso9660 PTTYPEdos /dev/mapper/centos-root: UUID75b0fa64-e099-430f-a143-706f8fcc0209 TYPExfs /dev/mapper/centos-swap: UUIDa8d4df56-dad9-41ba-85e3-a7063645cc80 TYPEswap [rootlocalhost ~]# xfs_ xfs_admin xfs_copy xfs_estimate xfs_fsr xfs_info xfs_logprint xfs_metadump xfs_ncheck xfs_repair xfs_bmap xfs_db xfs_freeze xfs_growfs xfs_io xfs_mdrestore xfs_mkfile xfs_quota xfs_rtcp [rootlocalhost ~]# xfs_growfs /dev/mapper/centos-root meta-data/dev/mapper/centos-root isize512 agcount4, agsize1768960 blks sectsz512 attr2, projid32bit1 crc1 finobt0 spinodes0 data bsize4096 blocks7075840, imaxpct25 sunit0 swidth0 blks naming version 2 bsize4096 ascii-ci0 ftype1 log internal bsize4096 blocks3455, version2 sectsz512 sunit0 blks, lazy-count1 realtime none extsz4096 blocks0, rtextents0 data blocks changed from 7075840 to 9698304 [rootlocalhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 39G 0 part ├─centos-root 253:0 0 37G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 1G 0 disk └─sdb1 8:17 0 1023M 0 part /history_data sdc 8:32 0 25G 0 disk └─sdc1 8:33 0 25G 0 part /dmdata2 sr0 11:0 1 4.4G 0 rom [rootlocalhost ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 898M 0 898M 0% /dev tmpfs 910M 0 910M 0% /dev/shm tmpfs 910M 9.6M 901M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 37G 24G 14G 65% / /dev/sdb1 1020M 33M 988M 4% /history_data /dev/sdc1 25G 8.5G 15G 37% /dmdata2 /dev/sda1 1014M 151M 864M 15% /boot tmpfs 182M 0 182M 0% /run/user/0 [rootlocalhost ~]#此过程中需要注意文件系统格式否则会报出如下错误完成上述操作我们就成功针对空间不足的问题进行解决了三卷组、逻辑卷的操作挂载到指定路径注这里新创建一个database_log目录用于测试1.创建分区fdisk /dev/硬盘名注依次执行即可[rootlocalhost ~]# fdisk /dev/xvdbp # 查看分区信息n # 创建分区p # 选择主分区回车默认默认会将所有剩余空间都划入该分区t # 修改分区格式L # 列出所有分区格式信息8e # 创建分区并标记为 Linux LVM类型 8e8e为lvm类型的hex代码p # 查看分区信息w # 保存并退出pvcreate /dev/sdb1 # 使用分区名如/dev/sdb12.创建物理卷同上。3.创建卷组4.创建逻辑卷5.查看分区信息6.格式化文件系统注格式化之前先确定逻辑卷的信息及文件系统是什么格式方式一使用df -TH来进行查看方式二使用blkid查看所有盘符信息EXT4文件系统下的格式化XFS文件系统下的格式化7.挂载与使用挂载到前面所创建的 /database_log目录下8.扩展逻辑卷操作如果扩展的是一个挂载的文件系统可以直接运行resize2fs命令。resize2fs命令来自于英文词组“resize to filesystem”的缩写其功能是用于同步文件系统容量到内核。如对ext3、ext4、XFS等设备卷容量进行了调整则需要使用resize2fs命令同步信息到系统内核如果是非挂载文件系统需要先挂载文件系统。xfs_growfs与resize2fs之间的主要区别是为识别文件系统而传递的参数。xfs_growfs命令将挂载点作为参数resize2fs命令则将LV名称作为参数。xfs_growfs命令仅支持联机调整大小而resize2fs命令同时支持联机和脱机调整大小。您可以调大或调小ext4文件系统的大小但只能调大XFS文件系统的大小。1、对于Ext4文件系统可以使用resize2fs命令。语法格式: resize2fs [参数] 设备。egresize2fs /dev/mapper/vg_ storage_test/lv_storage_test。2、对于XFS文件系统xfs_growfs可以直接扩展已经挂载的文件系统。语法格式xfs_growfs [参数] 设备。egxfs_growfs /dev/vg_data/lv_data。3、注意事项在操作卷组VG和逻辑卷LV时通常不需要手动执行同步命令如 sync 或 partprobe因为 LVM逻辑卷管理的创建和挂载流程由内核自动处理。操作步骤是否需要同步命令备注创建 PV/VG/LV否内核自动生效格式化文件系统否mkfs直接写入设备挂载/卸载否mount/umount直接生效扩展 LV 或文件系统否需文件系统工具如xfs_growfs如上所说所以这里使用同步命令之后报出已经做过同步不需要做其他操作。9.设置开机自动挂载注名称格式不能写错否则可能开不了机# echo /dev/mapper/vg_database_log-lv_database_log /database_log ext4 defaults 0 0 /etc/fstab# cat /etc/fstab(etc/fstab一个系统配置文件用于定义文件系统的静态挂载信息确保系统启动时自动挂载指定的存储设备或分区)。10.重启查看五、关键注意事项1.文件系统类型XFS 仅支持扩容不支持缩容ext4 可通过resize2fs调整大小2.根分区是否选用lvm管理方式在 CentOS 7 系统中如果根分区未使用 LVM逻辑卷管理则无法直接通过卷组VG动态扩容。但若系统已使用 LVM默认安装通常会创建名为 centos 的卷组只需按标准 LVM 流程扩容即可。