Day 5-4 存储管理与 LVM 逻辑卷管理

Day 5-4 存储管理与 LVM 逻辑卷管理 课程目标 使用 parted 工具创建和管理 GPT/MBR 分区,掌握 XFS 和 EXT4 文件系统的格式化与挂载。 配置 /etc/fstab 实现文件系统永久挂载,创建和管理交换空间(分区/LVM/文件方式)。 理解 LVM 架构(PV/VG/

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 盘,使用闪存芯片来存储数据。速度快、抗震、安静、轻便,但价格较贵,寿命有理论限制。

机械硬盘外观

机械硬盘的磁盘、主轴、磁头、磁头臂、马达和永磁铁

SATA 与 NVMe 固态硬盘

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 的主分区、扩展分区和逻辑分区

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

2 TiB 磁盘和分区大小限制目前是常见的限制。因此,传统的 MBR 方案已被 GUID 分区表(GPT)分区方案取代。

GUID 分区表(GPT)分区方案

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 磁盘类型。

选择 SATA 类型

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

创建新虚拟磁盘

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

设置新磁盘容量

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

查看已添加的多块硬盘

1.6 验证新硬盘

lsblk

lsblk 中查看 sdb、sdc、sdd、sde、sdf 等新磁盘

1.7 如果是 NVMe 固态硬盘

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

选择 NVMe 磁盘类型

lsblk 显示新增 NVMe 设备

二、使用 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

文件系统详细对比(保留原文):

特性 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)

挂载配置流程图:

获取 UUID、编辑 fstab、重载 systemd、挂载并验证

操作步骤:

# 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 字段详解:

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 与普通、休眠交换空间大小建议

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 创建流程图:

创建分区、格式化、激活及设置永久 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)→ 文件系统 → 挂载使用

物理设备、PV、VG 和 LV 的分层关系

6.2 LVM 架构图

多块物理磁盘汇聚为卷组,再划分逻辑卷和文件系统

6.3 LVM vs 传统分区

特性 LVM 传统分区
空间管理 可动态调整 固定大小
在线扩展 无需卸载 需离线操作
跨磁盘存储 支持 不支持
快照功能 支持 不支持
条带化 支持 不支持
存储池管理 支持 不支持

七、创建 LVM 完整流程

7.1 创建流程图

准备分区、创建 PV/VG/LV、格式化和挂载的完整流程

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 删除流程图

备份、卸载、删除 fstab 条目、重载 systemd,再依次删除 LV/VG/PV

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 主要为了实现以下三个目标中的一个或多个:

  1. 提高性能:通过将数据分散到多个硬盘上同时进行读写操作,可以显著提升数据传输速度。这类似于多条车道并行通车,比单车道快得多。
  2. 增加容量:将多个小容量硬盘组合成一个大的逻辑盘,方便管理和存储大文件。
  3. 提供容错/数据冗余:这是 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 0:将数据条带分布到两块磁盘

RAID 1:磁盘之间保存完整镜像

RAID 5:分布式校验

RAID 6:双重分布式校验

RAID 10:先镜像,再条带化

物理服务器安装系统步骤:

  • 硬盘先做 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 一起删除的存储上。

评论