> LVM,Logical Volume Manger,是Linux内核提供的一种逻辑卷管理功能,由内核驱动和应用层工具组成,它是在硬盘的分区基础上,创建了一个逻辑层,可以非常灵活且非常方便的管理存储设备。 LVM利用Linux内核的device-mapper功能来实现存储系统的虚拟化(系统分区独立于底层硬件)。 > > 通过LVM,可以实现存储空间的抽象化并在上面建立虚拟分区(Virtual Partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间,避免为正在使用的磁盘重新分区的麻烦、为调整分区而不得不移动其他分区的不便,它相比传统的分区系统可以更灵活地管理磁盘。 # 一、LVM的基本组成 LVM的基本组成如下图: ![LVM 架构][1] 从下到上依次为:`Physical Drive`(物理磁盘)-> `Partition`(物理磁盘分区) -> `Physical Volume(PV)`(物理卷) -> `Volume Group(VG)`(卷组) -> `Logical Volume(LV)`(逻辑卷) -> `File System`(文件系统) [tabs] [tab name="物理卷 (PV,Physical Volume)" active="true"]一个可供存储LVM的块设备. 如硬盘分区(MBR或GPT分区)、SAN 的硬盘、RAID 或 LUN,一个回环文件, 一个被内核映射的设备 (例如 dm-crypt),它包含一个特殊的LVM头,它是 LVM 构建的实际硬件或存储系统。[/tab] [tab name="卷组 (VG,Volume Group)"]卷组是对一个或多个物理卷的集合,并在设备文件系统中显示为 /dev/VG_NAME[/tab] [tab name="逻辑卷 (LV,Logical Volume)"]逻辑卷是可供系统使用的最终元设备,它们在卷组中创建和管理,由物理块组成,实际上就是一个虚拟分区,并显示为 /dev/VG_NAME/LV_NAME,通常在其上可以创建文件系统。[/tab] [tab name="文件系统 (FS,File System)"]文件系统是逻辑卷(LV)的格式化层,用于存储数据,常见的文件系统类型:ext4、xfs、btrfs 等。[/tab] [/tabs] # 二、LVM的优缺点 | **分类** | **优点** | **缺点** | | ---------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | **灵活性** | 支持在线动态调整逻辑卷大小(扩展/收缩),无需停机。 | 调整逻辑卷时需谨慎操作,误操作可能导致数据丢失(如缩减未预留足够空间)。 | | **资源管理** | 允许跨多个物理磁盘整合存储空间,提高存储利用率。 | 配置复杂度较高,涉及 PV(物理卷)、VG(卷组)、LV(逻辑卷)多层抽象,维护成本增加。 | | **快照功能** | 可创建逻辑卷快照,用于备份、测试或回滚,减少服务中断时间。 | 快照依赖 COW(写时复制),若快照空间不足会导致备份失败,需严格监控快照生命周期。 | | **扩展性** | 支持动态添加新物理磁盘到卷组,扩展存储容量无需重新分区。 | 移除物理磁盘操作复杂,需确保数据已迁移且卷组剩余空间足够。 | | **高可用性** | 支持逻辑卷镜像(Mirroring)、条带化(Striping)等高级功能,提升冗余或性能。 | 镜像/条带化配置复杂,且可能引入额外的性能开销(如镜像的同步写入)。 | | **文件系统支持** | 兼容主流的文件系统(如 ext4/XFS),可在线调整文件系统大小。 | 部分文件系统(如 ext4)的缩减操作风险较高,需提前卸载或严格验证。 | | **运维便利性** | 提供统一管理接口(如`lvcreate`, `lvextend` 等命令),便于自动化脚本集成。 | 依赖系统工具链(如 LVM2 软件包),老旧系统或轻量级环境可能缺乏支持。 | | **性能影响** | 条带化(Striping)可提升多磁盘场景的 I/O 性能。 | 抽象层引入额外开销,随机写入性能可能低于直接使用物理分区(尤其是快照活跃时)。 | | **兼容性** | 主流 Linux 发行版默认支持,与云平台(如 AWS/EBS)存储服务集成良好。 | 跨操作系统兼容性差(如 Windows 不支持),迁移或恢复需依赖专用工具。 | | **容灾恢复** | 逻辑卷元数据自动备份(`/etc/lvm/backup`),便于灾难恢复。 | 元数据损坏可能导致整个卷组不可用,需定期验证备份完整性。 | # 三、各层级的管理命令 使用`lsblk`命令,查看物理磁盘及分区 ![LVM 的层级][2] 可以看到只有一个硬盘名称为`sda`,硬盘`a`现有两个分区:`sda1`和`sda2`,其中`sda2`内包含两个LVM分区,分别是centos卷组的root卷、centos卷组的swap卷 ## 3.1 物理磁盘分区(Partition) ### 3.1.1 创建分区 在配置 LVM 之前,必须对存储设备进行分区,可以使用`fdisk`或者`parted`工具进行,创建分区时注意分区类型的设置(类型为`linux lvm`): - 如果使用的是MBR,设置分区类型要为`8e` - 如果使用的是GPT,设置分区类型要为`E6D6D379-F507-44C2-A23C-238F2A3DF928` 使用以下命令,进入磁盘分区工具,输入`m`可查看帮助 ```bash fdisk ``` ![fdisk 命令][3] 输入`n`新建分区,输入`p`选择分区类型为主分区,随后输入分区号(默认为最大分区号,可直接回车) ![新建分区][4] 修改新分区的格式为`Linux LVM`,输入`t`,输入分区号,输入分区类型码`8e` ![分区类型][5] 最后输入`w`写分区表退出 ![写分区表][6] 重启后即可看到结果 ![新增了一个sda3分区][7] ### 3.1.2 扩容分区 如果硬盘大小发生了变化(一般见于虚拟机下),可以通过以下步骤扩容物理磁盘分区,首先使用以下命令确认当前磁盘和分区信息(X 修改为实际硬盘号): ``` lsblk fdisk -l /dev/sdX ``` - 确认你要扩展的分区(如 `/dev/sda3`)。 - 确认磁盘上有未分配的空间。 使用 `parted` 工具扩展物理分区,`parted` 是一个支持在线调整分区大小的工具,首先启动 `parted`(X 修改为实际硬盘号): ```bash parted /dev/sdX ``` 查看分区表: ```bash (parted) print ``` 调整分区大小: - 找到想要扩展的分区号(如 `3`)。 - 使用 `resizepart` 命令扩展分区: ```bash (parted) resizepart 3 ``` - 输入新的结束位置(可以输入 `100%` 来使用所有可用空间)。 最后退出 parted: ```bash (parted) quit ``` 在调整分区大小后,更新内核的分区表(X 修改为实际硬盘号): ```bash sudo partprobe /dev/sdX ``` ## 3.2 物理卷(PV) ### 3.2.1 查看可用于PV的分区 通过`lvmdiskscan`命令列出可被用作 PV 的设备 ![lvmdiskscan][8] [scode type="yellow"]注:如果系统引导程序不支持LVM,则/boot不能置于LVM中。此刻必须创建一个独立的/boot分区并直接格式化后挂载到/boot。已知支持LVM的引导程序只有GRUB。[/scode] 从上图可以看到/dev/sda2已经是PV了,所以只有/dev/sda1、/dev/sda3可以用于创建PV,又因为/dev/sda1是boot引导区,所以下面我们可以对/dev/sda3创建PV ### 3.2.2 创建物理卷(PV) 使用`pvcreate`命令创建pv ```bash pvcreate ``` ![创建 PV][9] ### 3.2.3 查看物理卷(PV)信息 可以通过`pvs`、`pvscan`、`pvdisplay`这三个命令查看pv信息 ![查看 PV][10] [scode type="yellow"]注意: 如果你用的是未格式化过且擦除块(erase block)大小小于1M的SSD,请采用以下命令`pvcreate --dataalignment 1m /dev/sda`来设置对齐(alignment)。[/scode] ### 3.2.4 扩展物理卷(PV) 输入以下命令调整物理卷大小: ```bash sudo pvresize ``` ## 3.3 卷组(VG) ### 3.3.1 创建卷组 使用命令`vgcreate`创建卷组 ![创建卷组][11] 上图为创建卷组vg_fedora_yg,并把pv /dev/sdb1加入该卷组 ### 3.3.2 向卷组增加PV [scode type="yellow"]LVM支持将多个物理卷(PV)添加到一个卷组(VG)中,实现跨分区甚至跨硬盘的卷组[/scode] 使用命令`vgextend`向卷组增加PV(扩容卷组) ```bash vgextend <卷组名> ``` ![增加 PV][12] 上图为将/dev/sda3的空间增加到卷组centos中 ### 3.3.3 从卷组删除PV 使用命令`vgreduce`从卷组删除PV(缩小卷组) ```bash vgreduce <卷组名> ``` ![删除 PV][13] 上图为将/dev/vdb2从卷组westosvg中移除 ### 3.3.4 查看卷组信息 可以通过`vgs`、`vgscan`、`pvdisplay`这三个命令查看vg信息 ![查看卷组信息][14] ## 3.4 逻辑卷(LV) ### 3.4.1 创建逻辑卷 使用`lvcreate`命令来创建逻辑卷 ```bash lvcreate -L <卷大小> -n ``` [scode type="yellow"]<卷大小>格式示例: - 40G:卷大小为40G - +100%FREE:卷大小为100%的卷组剩余可用空间 [/scode] 例如将卷组vg_name下所有剩余空间给创建的lv_name逻辑卷 ```bash lvcreate -l +100%FREE -n ``` 例如将卷组vg_name下所有剩余空间给创建的lv_name逻辑卷 ```bash lvcreate -l 4G centos -n root ``` 该逻辑卷创建完后,你就可以通过`/dev/mapper/centos-home`或`/dev/centos/home`来访问它: ![检查 LV 结果][15] ### 3.4.2 扩容逻辑卷 通过命令`lvextend`来扩容LV: [scode type="yellow"]<卷大小>格式示例: - `40G`:卷大小调整为40G(使用-L) - `+100%FREE`:卷大小为100%的卷组剩余可用空间(使用-l) - `+20G`:卷大小增加20G(使用-L) [/scode] ```bash lvextend -L <卷大小> <逻辑卷路径> ``` 或通过命令`lvresize`来扩容LV: [scode type="red"]`lvresize`同时支持扩容及缩容,因此在使用绝对值指定卷大小时,请再三核对,缩小卷可能造成毁灭性的后果[/scode] ```bash lvresize -L <卷大小> <逻辑卷路径> ``` 例如将 VG `rl` 的 LV `root` 扩容至 VG 最大值,则输入如下命令: ```bash lvextend -l +100%FREE /dev/rl/root ``` ![扩容 LV][16] [scode type="yellow"]注意:如果扩容的逻辑卷已经挂载到具体文件系统,则需要执行resize2fs或者xfs_growfs(针对xfs文件系统)命令使修改生效,可以通过df -Th或者blkid查看lv所挂载的文件系统类型。[流程见 3.6 节](#3.6) [/scode] ### 3.4.3 缩小逻辑卷 [scode type="red"]缩小卷可能造成毁灭性的后果,请确保卷内的文件系统支持该操作[/scode] 通过命令lvreduce来缩小LV: ```bash lvreduce -L <卷大小> <逻辑卷路径> ``` 或 ```bash lvresize -L <卷大小> <逻辑卷路径> ``` [scode type="yellow"]<卷大小>格式示例: - `40G`:卷大小调整为40G - `-20G`:卷大小减少20G [/scode] ![缩小 LV][17] ### 3.4.4 查看逻辑卷 可以通过`lvs`、`lvscan`、`lvdisplay`这三个命令查看 LV 信息 ![查看逻辑卷][18] ## 3.5 格式化并挂载LV(创建逻辑卷后) 上面逻辑卷LV创建之后,通常是已经可以在`/dev/mapper/`或者`/dev/卷组名/`下面找到该逻辑卷了,如果找不到的话,可以执行如下命令: ```bash modprobe dm-mod vgscan vgchange -ay ``` 逻辑卷相当于一个虚拟的磁盘分区,因此还需要在其上创建文件系统: ```bash mkfs.<文件系统类型> /dev/mapper/<卷组名>-<逻辑卷名> ``` 例如: - 在`/dev/mapper/centos-home`上创建ext4分区 ```bash mkfs.ext4 /dev/mapper/centos-home ``` - 例如,在/dev/mapper/centos-data上创建xfs分区(推荐) ```bash mkfs.xfs /dev/mapper/centos-data ``` 随后,使用如下命令挂载分区: ```bash mount /dev/mapper/<卷组名>-<逻辑卷名> <挂载点> ``` 例如将`/dev/mapper/centos-home`挂载到`/`,则: ```bash mount /dev/mapper/centos-home /home ``` 通过`df -Th`及`lsblk`确认是否挂载成功及文件系统是否正确,随后修改`/etc/fstab`配置以持久化挂载,首先备份配置 ```bash sudo cp /etc/fstab /etc/fstab.bak ``` 随后修改配置,在文件末尾添加一行(根据实际情况替换参数): ```yaml # 使用 UUID UUID=a1b2c3d4-5678-90ef... /mnt/data xfs defaults 0 0 # 或使用设备路径 /dev/mapper/centos-home /mnt/data xfs defaults 0 0 ``` 参数解释: - UUID: 分区的唯一标识符(更稳定,避免设备名变化)。 - 挂载点: 上一步创建的目录(如 `/mnt/data`)。 - 文件系统类型: 设为 `xfs`。 - 挂载选项: `defaults` 包含 `rw,suid,dev,exec,auto,nouser,async`,也可按需调整(如 `noatime,discard`)。 - dump 标志: 设为 `0`(表示不备份)。 - fsck 顺序: 设为 `0`(XFS 不需要开机检查)。 随后验证配置,重新加载 `/etc/fstab` ```bash sudo mount -a ``` 若无报错,说明配置正确,可重启验证 ## 3.6 扩容文件系统(扩容逻辑卷后) ### 3.6.1 扩容ext文件系统 `resize2fs`命令支持调整ext2\ext3\ext4文件系统的大小。 例如,将`/dev/mapper/centos-home`的文件系统大小调整到20G: ```bash resize2fs -p /dev/mapper/centos-home 20G ``` 例如,将`/dev/mapper/centos-home`的文件系统大小调整到LV的大小: ```bash resize2fs -p /dev/mapper/centos-home ``` ![扩容 ext 文件系统][19] ### 3.6.2 扩容xfs文件系统 使用`xfs_growfs`命令增加 XFS 文件系统的大小。扩容时必须挂载 XFS 文件系统,并且底层设备上必须有可用空间。`xfs_growfs`命令的语法如下: ```bash xfs_growfs [options] mount-point ``` 以下选项可用于xfs_growfs命令: - `-d`:将文件系统的数据部分扩展到底层设备的最大大小。 - `-D [size]` : 指定扩展文件系统数据部分的大小。[size] 参数以文件系统块的数量表示。 - `-L [size]`:指定日志区域的新大小。这不会扩展大小,而是指定日志区域的新大小。因此,此选项可用于缩小日志区域的大小。您不能缩小文件系统的数据部分的大小。 - `-m [maxpct]`:指定文件系统中可分配为 inode 的最大空间百分比的新值。对于 mkfs.xfs 命令,此选项是通过–i maxpct=[value]选项指定的。 [scode type="yellow"]注意:目前无法缩小或减少 xfs 文件系统。因此,必须确保设备尺寸不大于预期尺寸。[/scode] 例如,将`/dev/mapper/centos-home`的文件系统大小调整到最大: ```bash xfs_growfs /dev/mapper/centos-home ``` ![扩容 ext 文件系统][20] # 四、整体架构 ![整体架构图][21] 参考文档:https://blog.csdn.net/weixin_42915431/article/details/121881054 [1]: https://img.judi.fun/1741574190347_image.png [2]: https://img.judi.fun/1741166684683_image.png [3]: https://img.judi.fun/1741166703696_image.png [4]: https://img.judi.fun/1741166721790_image.png [5]: https://img.judi.fun/1741166737632_image.png [6]: https://img.judi.fun/1741166757838_image.png [7]: https://img.judi.fun/1741224727712_image.png [8]: https://img.judi.fun/1741570307507_image.png [9]: https://img.judi.fun/1741570416430_image.png [10]: https://img.judi.fun/1741570511085_image.png [11]: https://img.judi.fun/1741571095751_image.png [12]: https://img.judi.fun/1741571187966_image.png [13]: https://img.judi.fun/1741571273661_image.png [14]: https://img.judi.fun/1741571343883_image.png [15]: https://img.judi.fun/1741571478966_image.png [16]: https://img.judi.fun/1741843649574_image.png [17]: https://img.judi.fun/1741572354268_image.png [18]: https://img.judi.fun/1741572412922_image.png [19]: https://img.judi.fun/1741572826459_image.png [20]: https://img.judi.fun/1741572966120_image.png [21]: https://img.judi.fun/1741572999392_image.png Loading... > LVM,Logical Volume Manger,是Linux内核提供的一种逻辑卷管理功能,由内核驱动和应用层工具组成,它是在硬盘的分区基础上,创建了一个逻辑层,可以非常灵活且非常方便的管理存储设备。 LVM利用Linux内核的device-mapper功能来实现存储系统的虚拟化(系统分区独立于底层硬件)。 > > 通过LVM,可以实现存储空间的抽象化并在上面建立虚拟分区(Virtual Partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间,避免为正在使用的磁盘重新分区的麻烦、为调整分区而不得不移动其他分区的不便,它相比传统的分区系统可以更灵活地管理磁盘。 # 一、LVM的基本组成 LVM的基本组成如下图: ![LVM 架构][1] 从下到上依次为:`Physical Drive`(物理磁盘)-> `Partition`(物理磁盘分区) -> `Physical Volume(PV)`(物理卷) -> `Volume Group(VG)`(卷组) -> `Logical Volume(LV)`(逻辑卷) -> `File System`(文件系统) <div class="tab-container post_tab box-shadow-wrap-lg"> <ul class="nav no-padder b-b scroll-hide" role="tablist"> <li class='nav-item active' role="presentation"><a class='nav-link active' style="" data-toggle="tab" aria-controls='tabs-d84f6a4163a7879729986c7ca18189b6740' role="tab" data-target='#tabs-d84f6a4163a7879729986c7ca18189b6740'>物理卷 (PV,Physical Volume)</a></li><li class='nav-item ' role="presentation"><a class='nav-link ' style="" data-toggle="tab" aria-controls='tabs-2940af13b7fee405acc022db7f6046ae441' role="tab" data-target='#tabs-2940af13b7fee405acc022db7f6046ae441'>卷组 (VG,Volume Group)</a></li><li class='nav-item ' role="presentation"><a class='nav-link ' style="" data-toggle="tab" aria-controls='tabs-96a2f438047834f2098316a3afafca8b432' role="tab" data-target='#tabs-96a2f438047834f2098316a3afafca8b432'>逻辑卷 (LV,Logical Volume)</a></li><li class='nav-item ' role="presentation"><a class='nav-link ' style="" data-toggle="tab" aria-controls='tabs-0c5aeff9b481fb6bc6794b9e81040d0a43' role="tab" data-target='#tabs-0c5aeff9b481fb6bc6794b9e81040d0a43'>文件系统 (FS,File System)</a></li> </ul> <div class="tab-content no-border"> <div role="tabpanel" id='tabs-d84f6a4163a7879729986c7ca18189b6740' class="tab-pane fade active in"> 一个可供存储LVM的块设备. 如硬盘分区(MBR或GPT分区)、SAN 的硬盘、RAID 或 LUN,一个回环文件, 一个被内核映射的设备 (例如 dm-crypt),它包含一个特殊的LVM头,它是 LVM 构建的实际硬件或存储系统。</div><div role="tabpanel" id='tabs-2940af13b7fee405acc022db7f6046ae441' class="tab-pane fade "> 卷组是对一个或多个物理卷的集合,并在设备文件系统中显示为 /dev/VG_NAME</div><div role="tabpanel" id='tabs-96a2f438047834f2098316a3afafca8b432' class="tab-pane fade "> 逻辑卷是可供系统使用的最终元设备,它们在卷组中创建和管理,由物理块组成,实际上就是一个虚拟分区,并显示为 /dev/VG_NAME/LV_NAME,通常在其上可以创建文件系统。</div><div role="tabpanel" id='tabs-0c5aeff9b481fb6bc6794b9e81040d0a43' class="tab-pane fade "> 文件系统是逻辑卷(LV)的格式化层,用于存储数据,常见的文件系统类型:ext4、xfs、btrfs 等。</div> </div> </div> # 二、LVM的优缺点 | **分类** | **优点** | **缺点** | | ---------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | **灵活性** | 支持在线动态调整逻辑卷大小(扩展/收缩),无需停机。 | 调整逻辑卷时需谨慎操作,误操作可能导致数据丢失(如缩减未预留足够空间)。 | | **资源管理** | 允许跨多个物理磁盘整合存储空间,提高存储利用率。 | 配置复杂度较高,涉及 PV(物理卷)、VG(卷组)、LV(逻辑卷)多层抽象,维护成本增加。 | | **快照功能** | 可创建逻辑卷快照,用于备份、测试或回滚,减少服务中断时间。 | 快照依赖 COW(写时复制),若快照空间不足会导致备份失败,需严格监控快照生命周期。 | | **扩展性** | 支持动态添加新物理磁盘到卷组,扩展存储容量无需重新分区。 | 移除物理磁盘操作复杂,需确保数据已迁移且卷组剩余空间足够。 | | **高可用性** | 支持逻辑卷镜像(Mirroring)、条带化(Striping)等高级功能,提升冗余或性能。 | 镜像/条带化配置复杂,且可能引入额外的性能开销(如镜像的同步写入)。 | | **文件系统支持** | 兼容主流的文件系统(如 ext4/XFS),可在线调整文件系统大小。 | 部分文件系统(如 ext4)的缩减操作风险较高,需提前卸载或严格验证。 | | **运维便利性** | 提供统一管理接口(如`lvcreate`, `lvextend` 等命令),便于自动化脚本集成。 | 依赖系统工具链(如 LVM2 软件包),老旧系统或轻量级环境可能缺乏支持。 | | **性能影响** | 条带化(Striping)可提升多磁盘场景的 I/O 性能。 | 抽象层引入额外开销,随机写入性能可能低于直接使用物理分区(尤其是快照活跃时)。 | | **兼容性** | 主流 Linux 发行版默认支持,与云平台(如 AWS/EBS)存储服务集成良好。 | 跨操作系统兼容性差(如 Windows 不支持),迁移或恢复需依赖专用工具。 | | **容灾恢复** | 逻辑卷元数据自动备份(`/etc/lvm/backup`),便于灾难恢复。 | 元数据损坏可能导致整个卷组不可用,需定期验证备份完整性。 | # 三、各层级的管理命令 使用`lsblk`命令,查看物理磁盘及分区 ![LVM 的层级][2] 可以看到只有一个硬盘名称为`sda`,硬盘`a`现有两个分区:`sda1`和`sda2`,其中`sda2`内包含两个LVM分区,分别是<span style="color:red">centos卷组</span>的<span style="color:goldenrod">root卷</span>、<span style="color:red">centos卷组</span>的<span style="color:goldenrod">swap卷</span> ## 3.1 物理磁盘分区(Partition) ### 3.1.1 创建分区 在配置 LVM 之前,必须对存储设备进行分区,可以使用`fdisk`或者`parted`工具进行,创建分区时注意分区类型的设置(类型为`linux lvm`): - 如果使用的是MBR,设置分区类型要为`8e` - 如果使用的是GPT,设置分区类型要为`E6D6D379-F507-44C2-A23C-238F2A3DF928` 使用以下命令,进入磁盘分区工具,输入`m`可查看帮助 ```bash fdisk </dev/磁盘名称> ``` ![fdisk 命令][3] 输入`n`新建分区,输入`p`选择分区类型为主分区,随后输入分区号(默认为最大分区号,可直接回车) ![新建分区][4] 修改新分区的格式为`Linux LVM`,输入`t`,输入分区号,输入分区类型码`8e` ![分区类型][5] 最后输入`w`写分区表退出 ![写分区表][6] 重启后即可看到结果 ![新增了一个sda3分区][7] ### 3.1.2 扩容分区 如果硬盘大小发生了变化(一般见于虚拟机下),可以通过以下步骤扩容物理磁盘分区,首先使用以下命令确认当前磁盘和分区信息(X 修改为实际硬盘号): ``` lsblk fdisk -l /dev/sdX ``` - 确认你要扩展的分区(如 `/dev/sda3`)。 - 确认磁盘上有未分配的空间。 使用 `parted` 工具扩展物理分区,`parted` 是一个支持在线调整分区大小的工具,首先启动 `parted`(X 修改为实际硬盘号): ```bash parted /dev/sdX ``` 查看分区表: ```bash (parted) print ``` 调整分区大小: - 找到想要扩展的分区号(如 `3`)。 - 使用 `resizepart` 命令扩展分区: ```bash (parted) resizepart 3 ``` - 输入新的结束位置(可以输入 `100%` 来使用所有可用空间)。 最后退出 parted: ```bash (parted) quit ``` 在调整分区大小后,更新内核的分区表(X 修改为实际硬盘号): ```bash sudo partprobe /dev/sdX ``` ## 3.2 物理卷(PV) ### 3.2.1 查看可用于PV的分区 通过`lvmdiskscan`命令列出可被用作 PV 的设备 ![lvmdiskscan][8] <div class="tip inlineBlock warning"> 注:如果系统引导程序不支持LVM,则/boot不能置于LVM中。此刻必须创建一个独立的/boot分区并直接格式化后挂载到/boot。已知支持LVM的引导程序只有GRUB。 </div> 从上图可以看到/dev/sda2已经是PV了,所以只有/dev/sda1、/dev/sda3可以用于创建PV,又因为/dev/sda1是boot引导区,所以下面我们可以对/dev/sda3创建PV ### 3.2.2 创建物理卷(PV) 使用`pvcreate`命令创建pv ```bash pvcreate </dev/分区名> ``` ![创建 PV][9] ### 3.2.3 查看物理卷(PV)信息 可以通过`pvs`、`pvscan`、`pvdisplay`这三个命令查看pv信息 ![查看 PV][10] <div class="tip inlineBlock warning"> 注意: 如果你用的是未格式化过且擦除块(erase block)大小小于1M的SSD,请采用以下命令`pvcreate --dataalignment 1m /dev/sda`来设置对齐(alignment)。 </div> ### 3.2.4 扩展物理卷(PV) 输入以下命令调整物理卷大小: ```bash sudo pvresize </dev/分区名> ``` ## 3.3 卷组(VG) ### 3.3.1 创建卷组 使用命令`vgcreate`创建卷组 ![创建卷组][11] 上图为创建卷组vg_fedora_yg,并把pv /dev/sdb1加入该卷组 ### 3.3.2 向卷组增加PV <div class="tip inlineBlock warning"> LVM支持将多个物理卷(PV)添加到一个卷组(VG)中,实现跨分区甚至跨硬盘的卷组 </div> 使用命令`vgextend`向卷组增加PV(扩容卷组) ```bash vgextend <卷组名> </dev/分区名> ``` ![增加 PV][12] 上图为将/dev/sda3的空间增加到卷组centos中 ### 3.3.3 从卷组删除PV 使用命令`vgreduce`从卷组删除PV(缩小卷组) ```bash vgreduce <卷组名> </dev/分区名> ``` ![删除 PV][13] 上图为将/dev/vdb2从卷组westosvg中移除 ### 3.3.4 查看卷组信息 可以通过`vgs`、`vgscan`、`pvdisplay`这三个命令查看vg信息 ![查看卷组信息][14] ## 3.4 逻辑卷(LV) ### 3.4.1 创建逻辑卷 使用`lvcreate`命令来创建逻辑卷 ```bash lvcreate -L <卷大小> <vg卷组名> -n <lv逻辑卷名> ``` <div class="tip inlineBlock warning"> <卷大小>格式示例: - 40G:卷大小为40G - +100%FREE:卷大小为100%的卷组剩余可用空间 </div> 例如将卷组vg_name下所有剩余空间给创建的lv_name逻辑卷 ```bash lvcreate -l +100%FREE <vg_name> -n <lv_name> ``` 例如将卷组vg_name下所有剩余空间给创建的lv_name逻辑卷 ```bash lvcreate -l 4G centos -n root ``` 该逻辑卷创建完后,你就可以通过`/dev/mapper/centos-home`或`/dev/centos/home`来访问它: ![检查 LV 结果][15] ### 3.4.2 扩容逻辑卷 通过命令`lvextend`来扩容LV: <div class="tip inlineBlock warning"> <卷大小>格式示例: - `40G`:卷大小调整为40G(使用-L) - `+100%FREE`:卷大小为100%的卷组剩余可用空间(使用-l) - `+20G`:卷大小增加20G(使用-L) </div> ```bash lvextend -L <卷大小> <逻辑卷路径> ``` 或通过命令`lvresize`来扩容LV: <div class="tip inlineBlock error"> `lvresize`同时支持扩容及缩容,因此在使用绝对值指定卷大小时,请再三核对,缩小卷可能造成毁灭性的后果 </div> ```bash lvresize -L <卷大小> <逻辑卷路径> ``` 例如将 VG `rl` 的 LV `root` 扩容至 VG 最大值,则输入如下命令: ```bash lvextend -l +100%FREE /dev/rl/root ``` ![扩容 LV][16] <div class="tip inlineBlock warning"> <span style="color:goldenrod">注意:如果扩容的逻辑卷</span><span style="color:red">已经挂载到具体文件系统</span>,<span style="color:goldenrod">则需要执行</span><span style="color:red">resize2fs或者xfs_growfs(针对xfs文件系统)</span><span style="color:goldenrod">命令使修改生效,可以通过</span><span style="color:red">df -Th或者blkid</span><span style="color:goldenrod">查看lv所挂载的文件系统类型。</span>[流程见 3.6 节](#3.6) </div> ### 3.4.3 缩小逻辑卷 <div class="tip inlineBlock error"> 缩小卷可能造成毁灭性的后果,请确保卷内的文件系统支持该操作 </div> 通过命令lvreduce来缩小LV: ```bash lvreduce -L <卷大小> <逻辑卷路径> ``` 或 ```bash lvresize -L <卷大小> <逻辑卷路径> ``` <div class="tip inlineBlock warning"> <卷大小>格式示例: - `40G`:卷大小调整为40G - `-20G`:卷大小减少20G </div> ![缩小 LV][17] ### 3.4.4 查看逻辑卷 可以通过`lvs`、`lvscan`、`lvdisplay`这三个命令查看 LV 信息 ![查看逻辑卷][18] ## 3.5 格式化并挂载LV(创建逻辑卷后) 上面逻辑卷LV创建之后,通常是已经可以在`/dev/mapper/`或者`/dev/卷组名/`下面找到该逻辑卷了,如果找不到的话,可以执行如下命令: ```bash modprobe dm-mod vgscan vgchange -ay ``` 逻辑卷相当于一个虚拟的磁盘分区,因此还需要在其上创建文件系统: ```bash mkfs.<文件系统类型> /dev/mapper/<卷组名>-<逻辑卷名> ``` 例如: - 在`/dev/mapper/centos-home`上创建ext4分区 ```bash mkfs.ext4 /dev/mapper/centos-home ``` - 例如,在/dev/mapper/centos-data上创建xfs分区(推荐) ```bash mkfs.xfs /dev/mapper/centos-data ``` 随后,使用如下命令挂载分区: ```bash mount /dev/mapper/<卷组名>-<逻辑卷名> <挂载点> ``` 例如将`/dev/mapper/centos-home`挂载到`/`,则: ```bash mount /dev/mapper/centos-home /home ``` 通过`df -Th`及`lsblk`确认是否挂载成功及文件系统是否正确,随后修改`/etc/fstab`配置以持久化挂载,首先备份配置 ```bash sudo cp /etc/fstab /etc/fstab.bak ``` 随后修改配置,在文件末尾添加一行(根据实际情况替换参数): ```yaml # 使用 UUID UUID=a1b2c3d4-5678-90ef... /mnt/data xfs defaults 0 0 # 或使用设备路径 /dev/mapper/centos-home /mnt/data xfs defaults 0 0 ``` 参数解释: - UUID: 分区的唯一标识符(更稳定,避免设备名变化)。 - 挂载点: 上一步创建的目录(如 `/mnt/data`)。 - 文件系统类型: 设为 `xfs`。 - 挂载选项: `defaults` 包含 `rw,suid,dev,exec,auto,nouser,async`,也可按需调整(如 `noatime,discard`)。 - dump 标志: 设为 `0`(表示不备份)。 - fsck 顺序: 设为 `0`(XFS 不需要开机检查)。 随后验证配置,重新加载 `/etc/fstab` ```bash sudo mount -a ``` 若无报错,说明配置正确,可重启验证 <a id="3.6"></a> ## 3.6 扩容文件系统(扩容逻辑卷后) ### 3.6.1 扩容ext文件系统 `resize2fs`命令支持调整ext2\ext3\ext4文件系统的大小。 例如,将`/dev/mapper/centos-home`的文件系统大小调整到20G: ```bash resize2fs -p /dev/mapper/centos-home 20G ``` 例如,将`/dev/mapper/centos-home`的文件系统大小调整到LV的大小: ```bash resize2fs -p /dev/mapper/centos-home ``` ![扩容 ext 文件系统][19] ### 3.6.2 扩容xfs文件系统 使用`xfs_growfs`命令增加 XFS 文件系统的大小。扩容时必须挂载 XFS 文件系统,并且底层设备上必须有可用空间。`xfs_growfs`命令的语法如下: ```bash xfs_growfs [options] mount-point ``` 以下选项可用于xfs_growfs命令: - `-d`:将文件系统的数据部分扩展到底层设备的最大大小。 - `-D [size]` : 指定扩展文件系统数据部分的大小。[size] 参数以文件系统块的数量表示。 - `-L [size]`:指定日志区域的新大小。这不会扩展大小,而是指定日志区域的新大小。因此,此选项可用于缩小日志区域的大小。您不能缩小文件系统的数据部分的大小。 - `-m [maxpct]`:指定文件系统中可分配为 inode 的最大空间百分比的新值。对于 mkfs.xfs 命令,此选项是通过–i maxpct=[value]选项指定的。 <div class="tip inlineBlock warning"> 注意:目前无法缩小或减少 xfs 文件系统。因此,必须确保设备尺寸不大于预期尺寸。 </div> 例如,将`/dev/mapper/centos-home`的文件系统大小调整到最大: ```bash xfs_growfs /dev/mapper/centos-home ``` ![扩容 ext 文件系统][20] # 四、整体架构 ![整体架构图][21] 参考文档:https://blog.csdn.net/weixin_42915431/article/details/121881054 [1]: https://img.judi.fun/1741574190347_image.png [2]: https://img.judi.fun/1741166684683_image.png [3]: https://img.judi.fun/1741166703696_image.png [4]: https://img.judi.fun/1741166721790_image.png [5]: https://img.judi.fun/1741166737632_image.png [6]: https://img.judi.fun/1741166757838_image.png [7]: https://img.judi.fun/1741224727712_image.png [8]: https://img.judi.fun/1741570307507_image.png [9]: https://img.judi.fun/1741570416430_image.png [10]: https://img.judi.fun/1741570511085_image.png [11]: https://img.judi.fun/1741571095751_image.png [12]: https://img.judi.fun/1741571187966_image.png [13]: https://img.judi.fun/1741571273661_image.png [14]: https://img.judi.fun/1741571343883_image.png [15]: https://img.judi.fun/1741571478966_image.png [16]: https://img.judi.fun/1741843649574_image.png [17]: https://img.judi.fun/1741572354268_image.png [18]: https://img.judi.fun/1741572412922_image.png [19]: https://img.judi.fun/1741572826459_image.png [20]: https://img.judi.fun/1741572966120_image.png [21]: https://img.judi.fun/1741572999392_image.png Last modification:March 13, 2025 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏