关于逻辑卷管理(LVM)

LVM 管理磁盘驱动器。它可以将多个驱动器和分区组合成更大的卷组,通过快照辅助备份,并支持动态调整卷的大小。它还可以提供类似于 RAID 1 阵列的镜像功能。

对 LVM 的完整讨论超出了本简介的范围,但以下介绍基本概念。

要运行此处介绍的任何命令,必须安装 LVM2-2.03.41 软件包。所有命令都必须以 root 用户身份执行。

使用 lvm 管理磁盘通过以下概念实现:

物理卷

即物理磁盘或分区,例如 /dev/sda3 或 /dev/sdb。

卷组

这是由管理员操作的、命名的物理卷组。构成卷组的物理卷数量任意。物理卷可以动态地添加到卷组中或从中移除。

逻辑卷

卷组可以细分为逻辑卷。每个逻辑卷随后可以像普通 Linux 分区一样单独格式化。管理员可以根据需要动态调整逻辑卷的大小。

举一个具体例子,假设您有两个 2 TB 的磁盘。再假设一个非常大的数据库需要非常大量的空间,挂载在 /srv/mysql 下。初始分区设置如下所示:

分区       用途      大小      分区类型
/dev/sda1  /boot    100 MB    83(Linux)
/dev/sda2  /         10 GB    83(Linux)
/dev/sda3  swap       2 GB    82(Swap)
/dev/sda4  LVM        剩余    8e(LVM)
/dev/sdb1  swap       2 GB    82(Swap)
/dev/sdb2  LVM        剩余    8e(LVM)

首先初始化物理卷:

pvcreate /dev/sda4 /dev/sdb2
[注意]

注意

整个磁盘可以用作物理卷的一部分,但请注意,pvcreate 命令会销毁该磁盘上的任何分区信息。

接下来创建一个名为 lfs-lvm 的卷组:

vgcreate lfs-lvm /dev/sda4  /dev/sdb2

可以通过运行 vgscan 命令检查卷组的状态。现在创建逻辑卷。由于大约有 3900 GB 可用空间,保留约 900 GB 用于扩展。请注意,名为 mysql 的逻辑卷大于任何单个物理磁盘。

lvcreate --name mysql --size 2500G lfs-lvm
lvcreate --name home  --size  500G lfs-lvm

最后,可以格式化并挂载逻辑卷。在此示例中,使用 jfs 文件系统(jfsutils-1.1.15)进行演示。

mkfs -t ext4 /dev/lfs-lvm/home
mkfs -t jfs  /dev/lfs-lvm/mysql
mount /dev/lfs-lvm/home /home
mkdir -p /srv/mysql
mount /dev/lfs-lvm/mysql /srv/mysql

可能需要激活这些逻辑卷,以便它们出现在 /dev 中。以 root 用户身份执行以下命令,可以同时激活所有逻辑卷:

vgchange -a y

LVM 逻辑卷可以承载根文件系统,但需要使用 initramfs(初始 RAM 文件系统)。“关于 initramfs”一节 中提供的 initramfs 允许在内核命令行中通过 root= 参数传递 lvm 卷。

如果不使用 initramfs,systemd 中存在竞争条件,会阻止通过 /etc/fstab 挂载逻辑卷。您必须创建一个 挂载 单元(参见 systemd.mount(5)),如下例所示,该单元在启动时自动挂载 /home 目录:

cat > /etc/systemd/system/home.mount << EOF
[Unit]
Description=将 lvm 卷 /dev/lfs-lvm/home 挂载到 /home

[Mount]
What=/dev/lfs-lvm/home
Where=/home
Type=ext4
Options=default

[Install]
WantedBy=multi-user.target
EOF
[注意]

注意

单元的名称必须是挂载点的名称,将“/”字符替换为“-”,并省略前导的“/”。

接下来,必须启用该单元:

systemctl enable home.mount

有关 LVM 的更多信息,请参见 LVM HOWTO 和 lvm 手册页。RedHat® 提供了一份详尽的 指南,尽管其中有时会引用专有工具。