Day 5-4 存储管理与 LVM 逻辑卷管理
课程目标
- 使用 parted 工具创建和管理 GPT/MBR 分区,掌握 XFS 和 EXT4 文件系统的格式化与挂载。
- 配置
/etc/fstab实现文件系统永久挂载,创建和管理交换空间(分区/LVM/文件方式)。 - 理解 LVM 架构(PV/VG/LV),完成从创建到挂载的完整 LVM 部署流程。
- 在线扩展逻辑卷和卷组,安全删除 LVM 组件(备份 → 卸载 → 删除 LV → 删除 VG → 删除 PV)。
一、存储管理基础
1.1 初识硬盘
HDD(机械硬盘):像一张不断旋转的黑胶唱片,用唱臂(磁头)来读写数据。技术成熟、容量大、价格便宜,但速度慢、怕震动。
SSD(固态硬盘):像一个超大号的 U 盘,使用闪存芯片来存储数据。速度快、抗震、安静、轻便,但价格较贵,寿命有理论限制。



1.2 磁盘设备命名
在 Rocky 10 中,磁盘设备根据接口和驱动类型有不同的命名方式:
# 物理硬盘(SCSI/SATA/SAS)
/dev/sd[a-z] # 如 /dev/sda、/dev/sdb
# KVM 半虚拟化(virtio 驱动)
/dev/vd[a-z] # 如 /dev/vda、/dev/vdb
# NVMe 固态硬盘(PCIe 高速 SSD)
/dev/nvme0n1p1
- 0:第 0 号 NVMe 控制器。
- n1:该控制器上的第 1 个命名空间(Namespace)。
- p1:该磁盘上的第一个分区(Partition)。
nvme0n1 是整块硬盘,相当于 sda、vda;nvme0n1p1 是这块硬盘的第一个分区,相当于 sda1、vda1。
设备命名规则:
| 存储类型 | 设备名格式 | 说明 |
|---|---|---|
| 本地 SAS/SATA/SCSI | /dev/sda、/dev/sdb | 服务器本地磁盘 |
| KVM 半虚拟化 | /dev/vda、/dev/vdb | virtio 驱动 |
| NVMe 固态硬盘 | /dev/nvme0n1 | 控制器 0,命名空间 1 |
| NVMe 分区 | /dev/nvme0n1p1 | 第一个分区 |
1.3 MBR 与 GPT 分区表
磁盘分区将一个硬盘驱动器划分为多个逻辑存储分区。您可以根据不同的要求使用分区来划分存储,这种划分提供了许多好处:
- 限制应用或用户的可用空间。
- 将操作系统和程序文件与用户文件分隔开。
- 创建用于内存交换的单独区域。
- 限制磁盘空间使用,以提高诊断工具和备份镜像的性能。
在 x86 系统上,有两种主要分区方案,分别是主引导记录(MBR)和 GUID 分区表(GPT)。
主引导记录(MBR)分区方案

主引导记录(MBR)分区方案是运行基本输入/输出系统(BIOS)固件的系统上的标准方案。此方案支持最多四个主分区。在 Linux 系统上,可以使用扩展分区和逻辑分区来创建最多 15 个分区。对于 32 位分区大小,使用 MBR 分区的磁盘的大小最多可达 2 TiB。
2 TiB 磁盘和分区大小限制目前是常见的限制。因此,传统的 MBR 方案已被 GUID 分区表(GPT)分区方案取代。
GUID 分区表(GPT)分区方案

对于运行统一可扩展固件接口(UEFI)固件的系统,GUID 分区方案(GPT)是磁盘分区的标准,解决了 MBR 方案的限制。GPT 方案最多可提供 128 个分区。GPT 方案为逻辑块地址分配 64 位,以支持最多 8 泽字节(ZiB)或 80 亿太字节(TiB)的分区和磁盘。
与 MBR 方案相比,GPT 方案提供了额外的功能和优势。GPT 使用全局唯一标识符(GUID)来识别每个磁盘和分区。此方案使分区表变得冗余,主要分区位于磁盘的开头,备份次要分区则位于磁盘的末尾。此方案使用校验和来检测 GPT 头和分区表中的错误。
1.4 Ubuntu 26.04 差异
| 项目 | Rocky 10 | Ubuntu 26.04 |
|---|---|---|
| 默认文件系统 | XFS | EXT4 |
| 默认 Swap 方式 | 分区或 LVM | swap 文件(/swap.img) |
| NVMe 设备命名 | /dev/nvme0n1 | 相同 |
| parted 版本 | 3.6 | 3.5+ |
| /etc/fstab 格式 | 相同 | 相同 |
在学习存储管理之前,首先需要在虚拟机中添加新的硬盘。
1.5 VMware 添加硬盘
编辑虚拟机设置,点击“添加”,选择硬盘设备。

选择 SATA 磁盘类型。

选择“创建新虚拟磁盘”。

示例磁盘大小为 20 GB,选择“将虚拟磁盘拆分成多个文件”。

完成后,在虚拟机设置中确认新增硬盘。

1.6 验证新硬盘
lsblk

1.7 如果是 NVMe 固态硬盘
在添加硬盘时选择 NVMe 类型,进入系统后用 lsblk 核对设备名称。


二、使用 parted 管理分区
parted 是 Rocky 10 中管理分区的标准命令行工具,同时支持 MBR 和 GPT,替代了传统的 fdisk 命令。
2.1 parted 交互模式
查看分区表:
[root@magedu ~]# parted /dev/sda
GNU Parted 3.6
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sda: 64.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 630MB 629MB fat32 EFI System Partition boot, esp
2 630MB 1704MB 1074MB xfs bls_boot
3 1704MB 64.4GB 62.7GB lvm
[root@magedu ~]# parted /dev/sdb
GNU Parted 3.6
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
(parted) print
Error: /dev/sdb: unrecognised disk label
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
2.2 创建 GPT 分区:交互式
操作流程:
# 1. 写入 GPT 磁盘标签
[root@magedu ~]# parted /dev/sdb
GNU Parted 3.6
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt # 写入 GPT 磁盘标签
(parted) print # 查看磁盘信息
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
# 2. 创建分区
(parted) mkpart
Partition name? []? data # GPT 分区必须指定名称
File system type? [ext2]? xfs # 仅作标记,不实际格式化
Start? 2048s # 从 2048 扇区开始(确保对齐)
End? 10GB # 结束位置
(parted) mkpart
Partition name? []? logs
File system type? [ext2]? xfs
Start? 10GB
End? 20GB
# 3. 查看分区表
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdb: 20.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.0GB 10.0GB data
2 10.0GB 20.0GB 10.0GB logs
# 4. 退出
(parted) quit
Information: You may need to update /etc/fstab.
# 5. 向内核注册新分区,此命令会等待系统检测新分区并在 /dev 目录下创建关联的设备文件
[root@magedu ~]# udevadm settle
2.3 删除分区
# 1. 进入交互模式
[root@magedu ~]# parted /dev/sdb
(parted) print
Number Start End Size File system Name Flags
1 1049kB 10.0GB 10.0GB data
2 10.0GB 20.0GB 10.0GB logs
# 2. 删除分区(使用分区编号)
(parted) rm 2
(parted) print
Number Start End Size File system Name Flags
1 1049kB 10.0GB 10.0GB data
# 3. 退出
(parted) quit
2.4 创建 GPT 分区:非交互式
[root@magedu ~]# parted /dev/sdb mklabel gpt # 如果前面写入过 GPT 磁盘标签,则不需重复做
[root@magedu ~]# parted /dev/sdb mkpart data xfs 2048s 10GB
[root@magedu ~]# parted /dev/sdb mkpart logs xfs 10GB 20GB
[root@magedu ~]# parted /dev/sdb print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.0GB 9999MB data
2 10.0GB 20.0GB 9999MB logs
# 提示:写入 MBR 磁盘标签
[root@magedu ~]# parted /dev/sdb mklabel msdos
# 非交互式删除
[root@magedu ~]# parted /dev/sdb print
[root@magedu ~]# parted /dev/sdb rm 1
# 再来一遍
[root@magedu ~]# parted /dev/sdb mkpart data xfs 2048s 10GB
[root@magedu ~]# parted /dev/sdb mkpart logs xfs 10GB 20GB
2.5 查看分区信息
# lsblk 查看分区信息
[root@magedu ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 9.3G 0 part
└─sdb2 8:18 0 9.3G 0 part
[root@magedu ~]# lsblk --fs /dev/sdb
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb
├─sdb1
└─sdb2
# blkid 查看 UUID 和文件系统类型
[root@magedu ~]# blkid /dev/sdb1
/dev/sdb1: PARTLABEL="data" PARTUUID="9c9e30a3-9cbc-4886-9e1f-7664ac4817f1"
# parted 查看详细信息
[root@magedu ~]# parted /dev/sdb print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.0GB 9999MB data
2 10.0GB 20.0GB 9999MB logs
三、创建和管理文件系统
3.1 文件系统概述
文件系统是操作系统用于在存储设备上组织和存储数据的方法。Rocky 10 支持多种文件系统类型:
- XFS:Rocky 10 的默认和推荐文件系统,特别适合大文件和高性能场景。
- EXT4:通用文件系统,向后兼容性好。
- 其他:支持 FAT32、NTFS 等(需额外安装软件包)。
3.2 XFS 文件系统
XFS 是 Rocky 10 的默认和推荐文件系统,特别适合大文件和高性能场景。
# 创建 XFS 文件系统
[root@magedu ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=610304 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=1
= reflink=1 bigtime=1 inobtcount=1 nrext64=1
= exchange=0
data = bsize=4096 blocks=2441216, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1, parent=0
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
3.3 EXT4 文件系统
EXT4 是通用文件系统,向后兼容性好,适合需要与旧系统兼容的场景。
# 创建 EXT4 文件系统
[root@magedu ~]# mkfs.ext4 /dev/sdb2
mke2fs 1.47.1 (20-May-2024)
Creating filesystem with 2441216 4k blocks and 610800 inodes
Filesystem UUID: 2b24a215-f6c3-430b-be9f-c2ccbedb6e6f
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
3.4 文件系统选择建议

文件系统详细对比(保留原文):
| 特性 | XFS | EXT4 | FAT32/exFAT |
|---|---|---|---|
| 最大文件大小(单个文件) | 8 EB | 16 TB | 4 GB(FAT32)/ 16 EB(exFAT) |
| 最大文件系统大小(整个分区) | 8 EB | 1 EB | 2 TB(FAT32)/ 128 PB(exFAT) |
| 日志功能 | 支持 | 支持 | 不支持 |
| 延迟分配 | 支持 | 支持 | 不支持 |
| 扩展区 | 支持 | 支持 | 不支持 |
| 在线扩展 | 支持 | 支持 | 不支持 |
| 在线缩减 | 不支持 | 支持 | 不支持 |
| ACL 支持 | 支持 | 支持 | 不支持 |
| SELinux 上下文 | 支持 | 支持 | 不支持 |
| 跨平台兼容 | 仅 Linux | 仅 Linux | 全平台 |
| RHEL 推荐 | 默认 | 备选 | 数据交换 |
| Ubuntu 默认 | 备选 | 默认 | 数据交换 |
原文“EXT4 在线缩减:支持”有误。EXT4 缩减需要卸载后离线操作;不要据此直接缩减已挂载文件系统或底层逻辑卷。
选择建议:
| 场景 | 推荐文件系统 | 理由 |
|---|---|---|
| 数据库服务器 | XFS | 大文件性能优异,高并发表现好 |
| 媒体服务器 | XFS | 大文件顺序读写性能高 |
| 通用 Web 服务器 | XFS / EXT4 | 两者均可,根据发行版默认选择 |
| 邮件服务器 | XFS | 大量小文件,XFS 的 B+ 树管理更高效 |
| 桌面/个人电脑 | EXT4 | Ubuntu 默认,兼容性好 |
| 嵌入式系统 | EXT4 | 稳定成熟,资源占用适中 |
| 跨平台数据交换 | exFAT | Windows/macOS/Linux 全兼容 |
| U 盘/移动硬盘 | exFAT | 无 4 GB 文件限制,全平台支持 |
四、挂载文件系统
把一个文件系统(分区)和一个目录关联起来的行为,称为挂载 mount。
该目录称为挂载点 mount point,是访问分区的入口。
4.1 临时挂载(使用 mount 命令)
# 创建挂载点
[root@magedu ~]# mkdir -p /mnt/data /mnt/logs
# 临时挂载
[root@magedu ~]# mount /dev/sdb1 /mnt/data
[root@magedu ~]# mount /dev/sdb2 /mnt/logs
# 查看挂载情况
[root@magedu ~]# mount | grep sdb
/dev/sdb1 on /mnt/data type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/sdb2 on /mnt/logs type ext4 (rw,relatime,seclabel)
[root@magedu ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/rl_bogon-root xfs 38G 1.9G 36G 5% /
devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
efivarfs efivarfs 256K 75K 177K 30% /sys/firmware/efi/efivars
tmpfs tmpfs 725M 9.1M 716M 2% /run
tmpfs tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service
/dev/sda2 xfs 960M 231M 730M 25% /boot
/dev/sda1 vfat 599M 8.4M 591M 2% /boot/efi
/dev/mapper/rl_bogon-home xfs 19G 394M 19G 3% /home
tmpfs tmpfs 1.0M 0 1.0M 0% /run/credentials/getty@tty1.service
tmpfs tmpfs 363M 4.0K 363M 1% /run/user/0
/dev/sdb1 xfs 9.3G 214M 9.1G 3% /mnt/data
/dev/sdb2 ext4 9.1G 24K 8.6G 1% /mnt/logs
[root@magedu ~]# df -Th /mnt/data/
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 xfs 9.3G 214M 9.1G 3% /mnt/data
# 使用挂载选项
[root@magedu ~]# mount -o ro,noexec /dev/sdb1 /mnt/data
[root@magedu ~]# mount -o remount,rw /mnt/data # 在线切换为读写
# 卸载
[root@magedu ~]# umount /mnt/data
[root@magedu ~]# umount /dev/sdb2 # 使用设备名或挂载点均可
4.2 永久挂载(/etc/fstab)
挂载配置流程图:

操作步骤:
# 1. 获取设备 UUID
[root@magedu ~]# blkid /dev/sdb1
/dev/sdb1: UUID="0cc51738-f869-4864-b861-6d5449f6a4bc" BLOCK_SIZE="512" TYPE="xfs" PARTLABEL="data" PARTUUID="9c9e30a3-9cbc-4886-9e1f-7664ac4817f1"
[root@magedu ~]# lsblk --fs /dev/sdb1
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb1 xfs 0cc51738-f869-4864-b861-6d5449f6a4bc
[root@magedu ~]# lsblk --fs /dev/sdb2
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb2 ext4 1.0 2b24a215-f6c3-430b-be9f-c2ccbedb6e6f
# 2. 编辑 /etc/fstab
[root@magedu ~]# vim /etc/fstab
# 使用 UUID 挂载(强烈推荐)
UUID="0cc51738-f869-4864-b861-6d5449f6a4bc" /mnt/data xfs defaults 0 0
UUID="2b24a215-f6c3-430b-be9f-c2ccbedb6e6f" /mnt/logs ext4 defaults 0 0
# 3. 重新加载 systemd 并挂载所有
[root@magedu ~]# systemctl daemon-reload
[root@magedu ~]# mount -a
# 4. 验证
[root@magedu ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb1 9699328 218832 9480496 3% /mnt/data
/dev/sdb2 9509056 24 9004408 1% /mnt/logs
[root@magedu ~]# mount | grep sdb
/dev/sdb1 on /mnt/data type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/sdb2 on /mnt/logs type ext4 (rw,relatime,seclabel)
关于 systemctl daemon-reload:
在 /etc/fstab 文件中添加或删除条目时,请运行 systemctl daemon-reload 命令或重启服务器,以确保 systemd 守护进程加载并使用新配置。对于 Ubuntu 26.04,同样使用 systemd 作为 init 系统,修改 fstab 后也需要执行 systemctl daemon-reload。
/etc/fstab 字段详解:

| 列 | 字段 | 图中的说明 |
|---|---|---|
| 1 | 设备 | 推荐 UUID=xxx;不推荐 /dev/sdb1 |
| 2 | 挂载点 | 如 /mnt/data,目录必须存在 |
| 3 | 文件系统 | xfs / ext4 / swap |
| 4 | 挂载选项 | defaults、ro / noexec |
| 5 | dump 备份 | 0=不备份,1=备份 |
| 6 | fsck 顺序 | 0=不检查,1=根分区,2=其他 |
4.3 常见挂载选项
| 选项 | 含义 | 说明 |
|---|---|---|
| defaults | 默认选项集 | rw, suid, dev, exec, auto, nouser, async |
| rw / ro | 读写 / 只读 | 控制文件系统访问模式 |
| exec / noexec | 允许/禁止执行二进制文件 | noexec 可提高安全性 |
| auto / noauto | 自动/手动挂载 | 控制 mount -a 是否挂载 |
| remount | 在线重新挂载 | 不卸载即可改变选项 |
# 临时配置挂载选项
[root@tianyun ~]# mount -o ro,noexec /deb/sdb1 /mnt/data/
# 永久配置挂载选项(在 fstab 中)
UUID="0cc51738-f869-4864-b861-6d5449f6a4bc" /mnt/data xfs ro,noexec 0 0
# 查看挂载选项
[root@magedu ~]# mount | grep data
/dev/sdb1 on /mnt/data type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
[root@magedu ~]# findmnt /mnt/data
TARGET SOURCE FSTYPE OPTIONS
/mnt/data /dev/sdb1 xfs rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota
原文命令中的
/deb/sdb1为笔误,应为/dev/sdb1。
五、交换空间管理
5.1 Swap 概述
交换空间是磁盘上的特殊区域,用作虚拟内存:
- 物理内存不足时,将不活跃的内存页写入 Swap。
- 防止 OOM(Out Of Memory)导致进程被内核杀死。
- Swap 在磁盘上,速度远慢于 RAM。
Rocky 10 的 Swap 大小建议:

| RAM | 交换空间 | 允许休眠时的交换空间 |
|---|---|---|
| 2 GB 或更少 | RAM 的两倍 | RAM 的三倍 |
| 2 GB 到 8 GB | 与 RAM 相同 | RAM 的两倍 |
| 8 GB 到 64 GB | 至少 4 GB | RAM 的 1.5 倍 |
| 64 GB 以上 | 至少 4 GB | 不建议休眠 |
笔记本电脑和台式机的休眠功能会在关闭系统电源之前使用交换空间来保存 RAM 内容。重新打开系统时,内核将从交换空间恢复 RAM 内容,无需完整启动。对于这些系统而言,交换空间必须比 RAM 大。
5.2 查看当前 Swap
# 查看总 Swap 大小
[root@magedu ~]# free -h
total used free shared buff/cache available
Mem: 3.5Gi 521Mi 3.0Gi 9.1Mi 247Mi 3.0Gi
Swap: 2.0Gi 0B 2.0Gi
# 查看 Swap 详细分布
[root@magedu ~]# swapon --show
NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 2G 0B -2
[root@magedu ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2109436 0 -2
5.3 创建 Swap 分区
原文此节标作“3.3 创建 Swap 分区”。Swap 创建流程图:

操作步骤:
# 1. 创建分区(使用 parted)
[root@magedu ~]# parted /dev/sdc mklabel gpt
[root@magedu ~]# parted /dev/sdc mkpart swap1 linux-swap 2048s 513MiB
[root@magedu ~]# udevadm settle
# 2. 查看分区
[root@magedu ~]# lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 512M 0 part
# 3. 格式化为交换空间(mkswap)
[root@magedu ~]# mkswap /dev/sdc1
Setting up swapspace version 1, size = 512 MiB (536866816 bytes)
no label, UUID=4a95d78d-7474-411c-a9ff-ce3a0de96d48
# 4. 手动激活
[root@magedu ~]# swapon /dev/sdc1
# 5. 验证
[root@magedu ~]# swapon --show
NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 2G 0B -2
/dev/sdc1 partition 512M 0B -3
# 6. 永久激活(/etc/fstab)
[root@magedu ~]# blkid /dev/sdc1
/dev/sdc1: UUID="4a95d78d-7474-411c-a9ff-ce3a0de96d48" TYPE="swap" PARTLABEL="swap1" PARTUUID="16c6a954-32e0-40ca-ba91-bac7db9d77c4"
[root@magedu ~]# echo 'UUID="4a95d78d-7474-411c-a9ff-ce3a0de96d48" swap swap defaults 0 0' >> /etc/fstab
# 7. 重新加载 systemd
[root@magedu ~]# systemctl daemon-reload
# 8. 激活所有 fstab 中的 Swap
[root@magedu ~]# swapon -a
# 9. 停用 Swap
[root@magedu ~]# swapoff /dev/sdc1
5.4 创建 Swap 逻辑卷
使用 LVM 创建 Swap 更加灵活,支持在线扩展。待学习完逻辑卷后再创建。
# 1. 创建逻辑卷
[root@magedu ~]# lvcreate -L 2G -n swap_lv vg01
Logical volume "swap_lv" created.
# 2. 格式化为 Swap
[root@magedu ~]# mkswap /dev/vg01/swap_lv
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
UUID=3a7b5c8d-9e0f-1a2b-3c4d-5e6f7a8b9c0d
# 3. 添加到 fstab
[root@magedu ~]# echo '/dev/vg01/swap_lv swap swap defaults 0 0' >> /etc/fstab
# 4. 重新加载 systemd
[root@magedu ~]# systemctl daemon-reload
# 5. 激活
[root@magedu ~]# swapon -a
原文“支持在线扩展”描述的是 LVM 的容量调整能力。已启用 Swap 的扩容还涉及停用、重建 Swap 头和重新启用,不能直接套用普通文件系统的在线扩容步骤。
5.5 创建 Swap 文件(备选方案)
# 1. 创建大文件
[root@magedu ~]# dd if=/dev/zero of=/swapfile bs=1G count=2
2+0 records in
2+0 records out
2147483648 bytes (2.1 GB) copied, 15.2 s, 141 MB/s
# 2. 设置安全权限
[root@magedu ~]# chmod 0600 /swapfile
# 3. 格式化为 Swap
[root@magedu ~]# mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
UUID=73417d34-b4d4-4f66-9b5f-4aad16ded399
# 4. 激活
[root@magedu ~]# swapon /swapfile
# 5. 永久激活(/etc/fstab)
[root@magedu ~]# echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
[root@magedu ~]# systemctl daemon-reload
5.6 Swap 优先级设置
# 在 fstab 中使用 pri 选项设置优先级(数值越高优先级越高)
UUID="6e7d5c01-4584-4421-a9b0-b3d73ea7acb1" swap swap defaults,pri=10 0 0
/dev/vg01/swap_lv swap swap defaults,pri=20 0 0
# 查看优先级
[root@magedu ~]# swapon --show
NAME TYPE SIZE USED PRIO
/dev/vg01/swap_lv partition 2G 0 20
/dev/sdc1 partition 512M 0 10
六、逻辑卷管理器(LVM)
6.1 LVM 概述
什么是 LVM?
LVM(Logical Volume Manager,逻辑卷管理器)是 Linux 环境下对磁盘分区进行管理的一种高级机制。它在物理磁盘和文件系统之间添加了一个抽象层,提供了比传统分区更灵活的磁盘管理能力。
为什么要用 LVM?
传统分区方案中,一旦分区创建完成,其大小就固定了。如果分区空间不足,需要备份数据、删除分区、重新创建更大的分区、恢复数据——整个过程需要停机。LVM 解决了这个问题,允许在不中断服务的情况下在线扩展存储空间。
上述为原文对比。传统分区也存在可在线扩展的情况,是否需要停机取决于分区布局、内核及文件系统支持。
LVM 的核心组件:
| 组件 | 缩写 | 说明 | 示例 |
|---|---|---|---|
| 物理卷 | PV | 物理磁盘或分区,LVM 的底层存储单元 | /dev/sdb1、/dev/sdc |
| 卷组 | VG | 一个或多个 PV 组成的存储池 | vg_data |
| 逻辑卷 | LV | 从 VG 中划分的逻辑存储单元 | /dev/vg_data/lv_home |
| 物理区块 | PE | LVM 最小管理单元(默认 4 MB) | 每个 PV 划分为多个 PE |
LVM 的工作流程:
物理磁盘 → 物理卷(PV)→ 卷组(VG)→ 逻辑卷(LV)→ 文件系统 → 挂载使用

6.2 LVM 架构图

6.3 LVM vs 传统分区
| 特性 | LVM | 传统分区 |
|---|---|---|
| 空间管理 | 可动态调整 | 固定大小 |
| 在线扩展 | 无需卸载 | 需离线操作 |
| 跨磁盘存储 | 支持 | 不支持 |
| 快照功能 | 支持 | 不支持 |
| 条带化 | 支持 | 不支持 |
| 存储池管理 | 支持 | 不支持 |
七、创建 LVM 完整流程
7.1 创建流程图

7.2 步骤 1:准备物理设备
# 方案一:使用整块硬盘
root@magedu:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sdf 8:80 0 20G 0 disk
# 方案二:使用分区
# 1. 使用 parted 创建分区
[root@magedu ~]# parted /dev/sdb mklabel gpt
[root@magedu ~]# parted /dev/sdb mkpart pv1 2048s 10GB
[root@magedu ~]# parted /dev/sdb set 1 lvm on # 标记为 LVM 类型
[root@magedu ~]# parted /dev/sdc mklabel gpt
[root@magedu ~]# parted /dev/sdc mkpart pv2 2048s 100%
[root@magedu ~]# parted /dev/sdc set 1 lvm on
# 2. 向内核注册新分区
[root@magedu ~]# udevadm settle
# 3. 查看分区
[root@magedu ~]# lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 10G 0 part
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 20G 0 part
7.3 步骤 2:创建物理卷(PV)
以下实验基于整块硬盘。
# 创建 PV
root@magedu:~# pvcreate /dev/sd{d..f}
Physical volume "/dev/sdd" successfully created.
Physical volume "/dev/sde" successfully created.
Physical volume "/dev/sdf" successfully created.
# 查看 PV
root@magedu:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sdd lvm2 --- 20.00g 20.00g
/dev/sde lvm2 --- 20.00g 20.00g
/dev/sdf lvm2 --- 20.00g 20.00g
root@magedu:~# pvdisplay /dev/sdd
"/dev/sdd" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID XiSaGT-xv0f-h7v2-b8RB-AtQK-SGu7-IOLM6p
7.4 步骤 3:创建卷组(VG)
# 创建 VG
root@magedu:~# vgcreate vg_data /dev/sd{d..f}
Volume group "vg_data" successfully created
# 查看 VG
root@magedu:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg_data 3 0 0 wz--n- <59.99g <59.99g
root@magedu:~# vgdisplay vg_data
--- Volume group ---
VG Name vg_data
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size <59.99 GiB # VG 大小 60G
PE Size 4.00 MiB # 创建逻辑卷时的最小分配单元
Total PE 15357 # 总共有 15357 个 PE
Alloc PE / Size 0 / 0 # 已分配 PE 数量 / 已分配容量
Free PE / Size 15357 / <59.99 GiB # 未分配 PE 数量 / 未分配容量
VG UUID ouwWWM-qAZF-F6zD-L3oB-mU4O-zu3r-gEYsx0
提示:创建 VG 时,可指定 PE size:
root@magedu:~# vgcreate -s 16M vg_data /dev/sd{d..f}
7.5 步骤 4:创建逻辑卷(LV)
# 创建 LV:指定大小(-L)
root@magedu:~# lvcreate -n lv_data -L 10G vg_data
Logical volume "lv_data" created.
# 创建 LV:指定 PE 数量(-l,每个 PE=4 MB)
root@magedu:~# lvcreate -n lv_logs -l 1280 vg_data # 1280 × 4M = 5G
Logical volume "lv_logs" created.
# 查看 LV
root@magedu:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_data vg_data -wi-a----- 10.00g
lv_logs vg_data -wi-a----- 5.00g
root@magedu:~# lvscan
ACTIVE '/dev/vg_data/lv_data' [10.00 GiB] inherit
ACTIVE '/dev/vg_data/lv_logs' [5.00 GiB] inherit
# 计算方法:要分 5G
yangge@magedu:~$ echo $[5 * 1024 / 4]
1280
7.6 步骤 5:格式化并挂载
# 格式化
[root@magedu ~]# mkfs.xfs /dev/vg_data/lv_data
[root@magedu ~]# mkfs.ext4 /dev/vg_data/lv_logs
# 创建挂载点
[root@magedu ~]# mkdir -p /opt/ruoyi /opt/ruoyi/log
# 永久挂载(/etc/fstab)
[root@magedu ~]# echo '/dev/vg_data/lv_data /opt/ruoyi xfs defaults 0 0' >> /etc/fstab
[root@magedu ~]# echo '/dev/vg_data/lv_logs /opt/ruoyi/log ext4 defaults 0 0' >> /etc/fstab
[root@magedu ~]# systemctl daemon-reload
root@magedu:~# mount /dev/vg_data/lv_data /opt/ruoyi
root@magedu:~# mkdir -p /opt/ruoyi/log
root@magedu:~# mount -a
# 验证
root@magedu:~# df -Th
文件系统 类型 大小 已用 可用 已用% 挂载点
/dev/mapper/vg_data-lv_data xfs 10G 228M 9.8G 3% /opt/ruoyi
/dev/mapper/vg_data-lv_logs ext4 4.9G 24K 4.6G 1% /opt/ruoyi/log
root@magedu:~# cp -rf /etc /opt/ruoyi/
root@magedu:~# cp -rf /etc /opt/ruoyi/log/
父、子目录嵌套挂载时,子挂载点必须存在于父文件系统里。上面先挂父卷,再建立子目录并用 mount -a 挂子卷,避免提前创建的子目录被父挂载遮住。
八、LVM 扩展管理
8.1 扩展逻辑卷(在线扩展)
扩展流程图:

场景一:将 lv_data 从 10 GB 扩展到 15 GB
# 1. 检查 VG 是否有可用空间(Free >= 5G)
root@magedu:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg_data 3 2 0 wz--n- <59.99g <44.99g # 有 45G 空闲
# 2. 扩展逻辑卷(两种方式)
# 方式 A:指定最终大小
[root@magedu ~]# lvextend -L 15G /dev/vg_data/lv_data
# 方式 B:增加 5 GB
[root@magedu ~]# lvextend -L +5G /dev/vg_data/lv_data
# 3. 查看 LV 已扩展
root@magedu:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_data vg_data -wi-ao---- 15.00g
lv_logs vg_data -wi-ao---- 5.00g
# 4. 扩展文件系统
root@magedu:~# df -Th /opt/ruoyi/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_data xfs 10G 257M 9.7G 3% /opt/ruoyi
root@magedu:~# xfs_growfs /opt/ruoyi # 文件系统为 XFS
# 5. 验证
root@magedu:~# df -Th /opt/ruoyi/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_data xfs 15G 355M 15G 3% /opt/ruoyi
两种 lvextend 方式选择其一。
场景二:将 lv_logs 从 5 GB 扩展到 20 GB
原文此场景标题写作 lv_log,命令实际操作 lv_logs。
# 1. 检查 VG 是否有可用空间(Free >= 15G)
root@magedu:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg_data 3 2 0 wz--n- <59.99g <39.99g # 有 40G 空闲
# 2. 扩展逻辑卷 + 扩文件系统(-r)
root@magedu:~# lvextend -r -L +15G /dev/vg_data/lv_logs
File system ext4 found on vg_data/lv_logs mounted at /opt/ruoyi/log.
Size of logical volume vg_data/lv_logs changed from 5.00 GiB (1280 extents) to 20.00 GiB (5120 extents).
Extending file system ext4 to 20.00 GiB (21474836480 bytes) on vg_data/lv_logs...
resize2fs /dev/vg_data/lv_logs
resize2fs 1.47.1 (20-May-2024)
Filesystem at /dev/vg_data/lv_logs is mounted on /opt/ruoyi/log; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 3
The filesystem on /dev/vg_data/lv_logs is now 5242880 (4k) blocks long.
resize2fs done
Extended file system ext4 on vg_data/lv_logs.
Logical volume vg_data/lv_logs successfully resized.
# 3. 验证
root@magedu:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_data vg_data -wi-ao---- 15.00g
lv_logs vg_data -wi-ao---- 20.00g
root@magedu:~# df -Th /opt/ruoyi/log/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_data-lv_logs ext4 20G 31M 19G 1% /opt/ruoyi/log
如果前面扩展逻辑卷时未使用 -r,则需要手动扩展文件系统:
- XFS:
xfs_growfs 挂载点。 - EXT4:
resize2fs 设备名,如/dev/vg_data/lv_logs。
8.2 扩展卷组(添加新 PV)
从本节起的 lv_home、/home、/dev/sdb1 属于另一组分区 PV 示例,其建立过程已补入第十二章。它与前文整盘实验的 lv_data、/opt/ruoyi 分开执行,不能混用设备和路径。
场景:VG 空间不足,需要添加新磁盘。
# 1. 添加新硬盘(/dev/sdd)并创建 PV
[root@magedu ~]# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
# 2. 扩展 VG
[root@magedu ~]# vgextend vg_data /dev/sdd
Volume group "vg_data" successfully extended
# 3. 查看 VG 空间
[root@magedu ~]# vgs vg_data
VG #PV #LV #SN Attr VSize VFree
vg_data 3 2 0 wz--n- 49.98g 37.98g # 增加了 20G
# 4. 现在可以继续扩展 LV 了
[root@magedu ~]# lvextend -r -L +20G /dev/vg_data/lv_home
8.3 从卷组中移除物理卷
场景 1:PV 未被使用,直接移除
[root@magedu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg_data lvm2 a-- 10.00g 0 # 全部已使用
/dev/sdc1 vg_data lvm2 a-- 20.00g 18.00g # 有 18G 空闲
/dev/sdd vg_data lvm2 a-- 20.00g 20.00g # 完全未使用
# 从 VG 中移除未使用的 PV
[root@magedu ~]# vgreduce vg_data /dev/sdd
Removed "/dev/sdd" from volume group "vg_data"
# 删除 PV 元数据
[root@magedu ~]# pvremove /dev/sdd
Labels on physical volume "/dev/sdd" successfully wiped.
场景 2:PV 已使用,需要迁移数据后移除
# 1. 查看 PV 使用情况
[root@magedu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg_data lvm2 a-- 10.00g 0 # 全部已使用
/dev/sdc1 vg_data lvm2 a-- 20.00g 18.00g # 有 18G 空闲
# 2. 将 /dev/sdb1 上的数据迁移到其他 PV
[root@magedu ~]# pvmove /dev/sdb1
/dev/sdb1: Moved: 100.00%
# 或指定目标 PV
[root@magedu ~]# pvmove /dev/sdb1 /dev/sdc1
# 3. 验证数据已迁移
[root@magedu ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg_data lvm2 a-- 10.00g 10.00g # 现在全部空闲
/dev/sdc1 vg_data lvm2 a-- 20.00g 8.00g # 数据已迁移至此
# 4. 从 VG 中移除
[root@magedu ~]# vgreduce vg_data /dev/sdb1
Removed "/dev/sdb1" from volume group "vg_data"
# 5. 删除 PV 元数据
[root@magedu ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped.
九、删除 LVM 组件
警告:lvremove、vgremove、pvremove 命令是不可逆的破坏性操作。
9.1 删除流程图

9.2 操作步骤
# 1. 备份数据
[root@magedu ~]# cp -a /home/ /backup/home_backup/
# 2. 卸载文件系统
[root@magedu ~]# umount /home
[root@magedu ~]# umount /var/log_custom
# 3. 从 /etc/fstab 中删除相关条目
[root@magedu ~]# vim /etc/fstab
# 删除以下行:
# /dev/vg_data/lv_home /home xfs defaults 0 0
# /dev/vg_data/lv_logs /var/log_custom xfs defaults 0 0
# 4. 重新加载 systemd
[root@magedu ~]# systemctl daemon-reload
# 5. 删除逻辑卷
[root@magedu ~]# lvremove /dev/vg_data/lv_home
Do you really want to remove active logical volume vg_data/lv_home? [y/n]: y
Logical volume "lv_home" successfully removed
[root@magedu ~]# lvremove /dev/vg_data/lv_logs
Do you really want to remove active logical volume vg_data/lv_logs? [y/n]: y
Logical volume "lv_logs" successfully removed
# 6. 删除卷组
[root@magedu ~]# vgremove vg_data
Volume group "vg_data" successfully removed
# 7. 删除物理卷
[root@magedu ~]# pvremove /dev/sdb1 /dev/sdc1
Labels on physical volume "/dev/sdb1" successfully wiped.
Labels on physical volume "/dev/sdc1" successfully wiped.
十、常用命令速查
10.1 分区命令
| 命令 | 用途 |
|---|---|
| parted /dev/sdX mklabel gpt | 创建 GPT 分区表 |
| parted /dev/sdX mkpart name fs start end | 创建分区 |
| parted /dev/sdX set N lvm on | 标记分区为 LVM 类型 |
| parted /dev/sdX rm N | 删除分区 |
| parted /dev/sdX unit MiB print | 以 MiB 为单位查看分区 |
| udevadm settle | 向内核注册新分区 |
10.2 文件系统命令
| 命令 | 用途 |
|---|---|
| mkfs.xfs /dev/sdX | 创建 XFS 文件系统 |
| mkfs.xfs -L label /dev/sdX | 创建 XFS 并指定卷标 |
| mkfs.ext4 /dev/sdX | 创建 EXT4 文件系统 |
| blkid /dev/sdX | 查看设备 UUID |
| lsblk --fs | 查看文件系统信息 |
10.3 挂载命令
| 命令 | 用途 |
|---|---|
| mount /dev/sdX /mnt | 临时挂载 |
| mount -o ro,noexec /dev/sdX /mnt | 带选项挂载 |
| mount -o remount,rw /mnt | 在线重新挂载 |
| umount /mnt | 卸载 |
| mount -a | 挂载所有 fstab 条目 |
| systemctl daemon-reload | 重新加载 systemd 配置 |
10.4 Swap 命令
| 命令 | 用途 |
|---|---|
| mkswap /dev/sdX | 格式化为 Swap |
| swapon /dev/sdX | 激活 Swap |
| swapoff /dev/sdX | 停用 Swap |
| swapon -a | 激活所有 fstab 中的 Swap |
| swapon --show | 查看 Swap 状态 |
| free -h | 查看内存和 Swap 使用 |
10.5 LVM 命令
| 命令 | 用途 |
|---|---|
| pvcreate /dev/sdX | 创建物理卷 |
| pvs / pvdisplay | 查看物理卷 |
| vgcreate vg_name /dev/sdX | 创建卷组 |
| vgs / vgdisplay | 查看卷组 |
| vgextend vg_name /dev/sdX | 扩展卷组 |
| vgreduce vg_name /dev/sdX | 从卷组移除 PV |
| lvcreate -n lv_name -L 10G vg_name | 创建逻辑卷 |
| lvs / lvdisplay | 查看逻辑卷 |
| lvextend -L +5G /dev/vg/lv | 扩展逻辑卷 |
| lvextend -r -L 15G /dev/vg/lv | 扩展 LV 并自动扩展 FS |
| xfs_growfs /mount | 扩展 XFS 文件系统 |
| resize2fs /dev/vg/lv | 扩展 EXT4 文件系统 |
| pvmove /dev/sdX | 迁移 PV 数据 |
| lvremove /dev/vg/lv | 删除逻辑卷 |
| vgremove vg_name | 删除卷组 |
| pvremove /dev/sdX | 删除物理卷 |
十一、磁盘阵列 RAID【了解】
11.1 什么是 RAID?
RAID 的中文全称是独立磁盘冗余阵列,通常简称为磁盘阵列。
它的核心思想是:将多个独立的物理硬盘通过特定的方式组合起来,形成一个更大的、逻辑上的虚拟硬盘。
这个逻辑硬盘能提供比单个硬盘更高的性能、容量和/或数据可靠性。
11.2 为什么需要 RAID?
使用 RAID 主要为了实现以下三个目标中的一个或多个:
- 提高性能:通过将数据分散到多个硬盘上同时进行读写操作,可以显著提升数据传输速度。这类似于多条车道并行通车,比单车道快得多。
- 增加容量:将多个小容量硬盘组合成一个大的逻辑盘,方便管理和存储大文件。
- 提供容错/数据冗余:这是 RAID 最关键的功能之一。通过存储额外的校验信息或数据副本,当阵列中的某个硬盘发生故障时,不会导致数据丢失,系统仍能继续运行,并允许管理员更换故障盘后重建数据。
11.3 常见的 RAID 级别
| RAID 级别 | 中文名称 | 最低硬盘数 | 容错能力 | 可用容量 | 读性能 | 写性能 | 主要特点与适用场景 |
|---|---|---|---|---|---|---|---|
| RAID 0 | 条带集 / 带区卷 | 2 | 无 | 100% | 高 | 高 | 极致性能。速度最快,但无任何数据保护,一块硬盘损坏即导致全部数据丢失。适用于临时数据或非关键性高速缓存。 |
| RAID 1 | 镜像集 / 镜像卷 | 2 | 高 | 50% | 中等 | 中等 | 极致安全。数据完全镜像,安全性最高,但容量利用率最低。适用于操作系统盘、重要数据库日志等。 |
| RAID 5 | 带分布式校验的条带集 | 3 | 1 块 | (N−1) × 单盘容量 | 高 | 中等 | 平衡之选。在性能、容量和安全性之间取得良好平衡,性价比高。广泛应用于文件服务器、应用服务器。 |
| RAID 6 | 带双分布式校验的条带集 | 4 | 2 块 | (N−2) × 单盘容量 | 高 | 较低 | 更高容错。相比 RAID 5 提供双重校验,可同时容忍两块硬盘故障。适用于大容量、对数据安全要求极高的场景。 |
| RAID 10 | 镜像条带集(先镜后带) | 4 | 至少 1 块,取决于故障位置 | 50% | 很高 | 高 | 性能与安全的结合。兼具 RAID 0 的高性能和 RAID 1 的高安全性,是性能和可靠性要求均高的场景(如核心数据库)的首选。 |





物理服务器安装系统步骤:
- 硬盘先做 RAID。
- 安装操作系统。
扩展概念:
- 热备盘(HotSpare)。
- 硬 RAID vs 软 RAID。
思考:6 块硬盘做 RAID 5,单盘为 8 T,最终 RAID 的容量为多少?
- 不配置热备盘:(6−1)× 8 T = 40 T。
- 配置 1 块热备盘:(5−1)× 8 T + 1 热备盘 = 32 T 可用容量,另保留 1 块热备盘。
十二、分区 PV 方案补充实验
本稿以第 3 版的整盘 PV、嵌套挂载、XFS/EXT4 扩容和 RAID 为主体;下面保留前两版中另一套分区 PV、lv_home 示例。两套 VG 名相同,必须在独立、干净的实验环境中选择一套,不能叠加执行。
12.1 准备分区并建立 PV/VG
以下假设 sdb、sdc 是未存放业务数据的实验磁盘。用 GiB 统一容量单位,避免把十进制 GB 分区长度误当作同数值的 GiB:
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart pv1 2048s 10GiB
parted /dev/sdb set 1 lvm on
parted /dev/sdc mklabel gpt
parted /dev/sdc mkpart pv2 2048s 100%
parted /dev/sdc set 1 lvm on
udevadm settle
lsblk /dev/sdb /dev/sdc
pvcreate /dev/sdb1 /dev/sdc1
vgcreate vg_data /dev/sdb1 /dev/sdc1
pvs
vgs
原课件的容量示意为两个 PV 约 10 GiB、20 GiB,VG 约 29.99 GiB;实际受磁盘容量、分区边界和元数据开销影响。示例 VG 属性:
VG #PV #LV #SN Attr VSize VFree
vg_data 2 0 0 wz--n- 29.99g 29.99g
VG Name vg_data
Format lvm2
Metadata Areas 2
VG Access read/write
VG Status resizable
Cur LV 0
Open LV 0
Cur PV 2
Act PV 2
VG Size <29.99 GiB
PE Size 4.00 MiB
Total PE 7677
Alloc PE / Size 0 / 0
Free PE / Size 7677 / <29.99 GiB
12.2 创建并检查 LV
lvcreate -n lv_home -L 10G vg_data
lvcreate -n lv_logs -l 512 vg_data
lvs
lvdisplay /dev/vg_data/lv_home
PE 为 4 MiB 时,512 个 PE 为 2 GiB。原示意输出:
LV VG Attr LSize
lv_home vg_data -wi-a----- 10.00g
lv_logs vg_data -wi-a----- 2.00g
--- Logical volume ---
LV Path /dev/vg_data/lv_home
LV Name lv_home
VG Name vg_data
LV Write Access read/write
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
12.3 格式化与挂载
mkfs.xfs /dev/vg_data/lv_home
mkfs.xfs /dev/vg_data/lv_logs
mkdir -p /home /var/log_custom
mount /dev/vg_data/lv_home /home
mount /dev/vg_data/lv_logs /var/log_custom
这是在专用实验机挂载 /home 的旧版例子;挂载会遮住原目录里的内容,不会自动迁移已有家目录。需要保留现有家目录时,应先规划迁移,或改用空的实验挂载点。
相应 /etc/fstab 条目各保留一份:
/dev/vg_data/lv_home /home xfs defaults 0 0
/dev/vg_data/lv_logs /var/log_custom xfs defaults 0 0
systemctl daemon-reload
findmnt /home
findmnt /var/log_custom
12.4 从 10 GiB 扩展到 15 GiB
确认 VG 空间至少有 5 GiB,下面三种 LV 扩容方式选其一:
vgs vg_data
# A:指定最终容量
lvextend -L 15G /dev/vg_data/lv_home
# B:增加 5 GiB
lvextend -L +5G /dev/vg_data/lv_home
# C:同时扩展 LV 与受支持的文件系统
lvextend -r -L 15G /dev/vg_data/lv_home
使用 A/B 时,再按实际文件系统扩容。本实验为 XFS:
xfs_growfs /home
lvs vg_data/lv_home
df -h /home
不能对 XFS 使用 resize2fs;若另一实验实际使用 EXT4,才用 resize2fs /dev/vg_data/lv_home。第 3 版前文已给出 EXT4 的 lv_logs 扩容实测。
12.5 补充查询与备份方式
# 显示 Swap 原始字节值和优先级
swapon --show --raw --bytes
# 容量示例:2147483648 字节,优先级 -2
# rsync 可作为后文删除 LVM 前的备份方式
rsync -av /home/ /backup/home_backup/
rsync 命令需要相应软件包,并应确认备份位于不会随目标 LV 一起删除的存储上。
评论