4.1. LVM 2 常见问题解答

4.1.1. 我的系统上安装并运行了 LVM 1。如何开始使用 LVM 2?
4.1.2. 我需要一个特殊的 lvm2 内核模块吗?
4.1.3. 当我尝试使用 LVM 2 工具时,出现关于 /dev/mapper/control 的错误。这是怎么回事?
4.1.4. LVM 2 当前支持哪些命令和逻辑卷类型?
4.1.5. LVM 2 在磁盘上表示卷组和逻辑卷时,是否使用与 LVM 1 不同的格式?
4.1.6. LVM 2 是否支持使用 LVM 1 创建的 VG 和 LV?
4.1.7. 我可以将基于 LVM 1 的 VG 和 LV 升级到 LVM 2 原生格式吗?
4.1.8. 我已升级到 LVM 2,但工具一直因内存不足错误而失败。怎么回事?
4.1.9. 我的根分区在 LVM 1 的 LV 上。如何升级到 LVM 2?lvmcreate_initrd 发生了什么?
4.1.10. LVM 对物理硬盘突然重新编号的弹性如何?
4.1.11. 我正在尝试填充我的 vg,vgdisplay/vgs 说我有 1.87 GB 可用空间,但是当我执行 lvcreate vg -L1.87G 时,它说“可用扩展不足”。这是怎么回事?
4.1.12. LVM2 中的快照与 LVM1 有什么不同?
4.1.13. 单个 LV 的最大大小是多少?

4.1.1. 我的系统上安装并运行了 LVM 1。如何开始使用 LVM 2?

这是快速入门指南 :)

  1. 首先删除系统上任何快照 LV。LVM 2 不处理这些快照 LV,并且会阻止在 LVM 2 启动时激活源。

  2. 确保你有除了标准启动分区之外的其他启动系统的方法。准备好 LVM 1 工具、标准系统工具 (mount) 和 LVM 1 兼容内核,以防你需要返回并修复一些问题。

  3. 获取 LVM 2 工具源代码和 device mapper 源代码并编译它们。在编译 LVM 2 工具之前,你需要使用 "make install" 安装 device mapper 库。还需要将 dm/scripts/devmap_mknod.sh 脚本复制到 /sbin。我建议现在只安装 'lvm' 二进制文件,这样你就可以在需要时访问 LVM 1 工具。如果你可以访问 LVM 2 和 device-mapper 的软件包,你可以安装它们,但要注意它们可能会覆盖你的 LVM 1 工具集。

  4. 获取一个 device mapper 兼容内核,可以是内置的,也可以是内核模块。

  5. 找出 LVM 1 在你的启动脚本中激活的位置。确保 device-mapper 模块在那时已加载(如果你使用 device mapper 作为模块),并在之后添加 '/sbin/devmap_mknod.sh; lvm vgscan; lvm vgchange -ay'。

  6. 安装包含 device mapper 支持的内核。重启。如果一切顺利,你应该正在运行 lvm2。

4.1.2. 我需要一个特殊的 lvm2 内核模块吗?

不。你需要 device-mapper。lvm2 工具使用 device-mapper 与内核接口,并完成所有设备映射(因此得名 device-mapper)。只要你有 device-mapper,你就应该能够使用 LVM2。

4.1.3. 我收到关于/dev/mapper/control当我尝试使用 LVM 2 工具时。这是怎么回事?

这的主要原因是重启进入支持 dm 的内核后,没有运行 "dmsetup mknodes"。此脚本为 device mapper 生成控制节点。

如果你没有 "dmsetup mknodes",不要绝望!(尽管你可能应该升级到最新版本的 device-mapper。)自己创建/dev/mapper/control文件很容易

  1. 确保你已加载 device-mapper 模块(如果你没有将其构建到内核中)。

  2. 运行

    # cat /proc/misc | grep device-mapper | awk '{print $1}'
    并记下打印的数字。(如果你没有得到任何输出,请参考步骤 1。)

  3. 运行

    # mkdir /dev/mapper
    - 如果你收到错误提示/dev/mapper已存在,请确保它是一个目录并继续。

  4. 运行

    # mknod /dev/mapper/control c 10 $number
    其中 $number 是步骤 2 中打印的数字。

你现在应该一切就绪了!

4.1.4. LVM 2 当前支持哪些命令和逻辑卷类型?

如果你正在使用 lvm2 tarball 中的稳定 2.4 device mapper 补丁,则 lvm2 工具支持你期望使用 lvm1 的所有主要功能。(从 lvm1 升级到 lvm2 之前,你仍然需要删除快照)

如果你正在使用 2.6 kernel.org 内核系列中的 device mapper 版本,则不支持以下命令和 LV 类型

  • pvmove

  • 快照

对这些功能的支持开始于 不稳定 device mapper 补丁中,该补丁由 Joe Thornber 维护。

4.1.5. LVM 2 在磁盘上表示卷组和逻辑卷时,是否使用与 LVM 1 不同的格式?

是的。LVM 2 使用 lvm 2 格式元数据。这种格式比 LVM 1 格式元数据灵活得多,消除了或减少了 LVM 1 的大多数限制。

4.1.6. LVM 2 是否支持使用 LVM 1 创建的 VG 和 LV?

是的。LVM 2 将激活并操作使用 LVM 1 创建的 VG 和 LV。例外情况是使用 LVM 1 创建的快照 - 这些快照应在升级前删除。升级后保留的快照必须先删除,然后才能由 LVM 2 激活其源。

4.1.7. 我可以将基于 LVM 1 的 VG 和 LV 升级到 LVM 2 原生格式吗?

是的。使用 vgconvert 将你的 VG 和其中包含的所有 LV 转换为新的 lvm 2 格式元数据。请注意,并非总是可以恢复到 lvm 1 格式元数据。

4.1.8. 我已升级到 LVM 2,但工具一直因内存不足错误而失败。怎么回事?

一个可能的原因是某些版本的 LVM 1(最初报告此错误的 用户使用的是 Mandrake 9.2,但这不一定仅限于该发行版)没有按照预期将 UUID 放入 PV 和 VG 结构中。最新版本的 LVM 2 工具会在看到 UUID 丢失时自动填充结构中的 UUID,因此你应该获取更新的版本,你的问题应该可以解决。如果仍然存在问题,请发布到 linux-lvm 邮件列表

4.1.9. 我的根分区在 LVM 1 的 LV 上。如何升级到 LVM 2?lvmcreate_initrd 发生了什么?

在 LVM 上使用 root 分区升级到 LVM 2 有点棘手,但并非不可能。你需要排队一个带有 device-mapper 支持的内核并安装 lvm2 工具(你可能需要备份 LVM 1 工具,或者找到一个内置 LVM 工具的救援磁盘,以防你在完成之前需要它们)。然后找到一个支持你的发行版和 lvm 2 的 mkinitrd 脚本。

目前,这是我知道的支持 lvm2 的 mkinitrd 脚本列表,按发行版排序

支持 lvm 2 的 mkinitrd 脚本

fedora

最新的 fedora core 2 mkinitrd 处理 lvm2,但它依赖于来自最新 lvm 2 tarball 的静态构建的 lvm 二进制文件。

Redhat 9 用户也可能能够使用它

Debian

这里有一个非官方版本 here

通用

lvm2 源代码树中有一个版本,位于scripts/lvm2_createinitrd/。有关更多详细信息,请参阅该目录中的文档。

4.1.10. LVM 对物理硬盘突然重新编号的弹性如何?

没问题 - LVM 通过 UUID 而不是设备名称来识别 PV。

每个磁盘 (PV) 都标有一个 UUID,该 UUID 在系统中唯一标识它。在添加新磁盘更改驱动器编号后,'vgscan' 会识别这一点。大多数发行版在 lvm 启动脚本中运行 vgscan,以便在添加硬件后重启时应对这种情况。如果你正在进行热添加,我认为你必须手动运行它。另一方面,如果你的 vg 已激活并正在使用,则重新编号根本不会影响它。只有激活才需要标识符,最坏的情况是激活将失败,而没有 vgscan,并提示缺少 PV。

Note

LVM 当前正在使用的驱动器的故障或移除将导致当前使用和未来激活使用该驱动器的 VG 出现问题。

4.1.11. 我正在尝试填充我的 vg,vgdisplay/vgs 说我有 1.87 GB 可用空间,但是当我执行 lvcreate vg -L1.87G 时,它说“可用扩展不足”。这是怎么回事?

1.87 GB 的数字四舍五入到小数点后 2 位,因此它可能约为 1.866 GB 或其他值。这是一个人类可读的输出,让你大致了解 VG 的大小。如果你要指定确切的大小,则必须使用扩展而不是字节的倍数。

在 vgdisplay 的情况下,使用可用 PE 计数而不是人类可读的容量。

              Free  PE / Size          478 / 1.87 GB
                                       ^^^
              
因此,这表明你应该运行
# lvcreate vg -l478 
请注意,我们使用小写 'l' 而不是大写 'L' 来告诉 lvm 使用扩展而不是字节。

在 vgs 的情况下,你需要指示它告诉你多少扩展可用

# vgs -o +vg_free_count,vg_extent_count
              
这告诉 vgs 将可用扩展和扩展总数添加到 vgs 列表的末尾。以与上述 vgdisplay 情况相同的方式使用可用扩展数。

4.1.12. LVM2 中的快照与 LVM1 有什么不同?

在 LVM2 中,快照默认是读/写的,而在 LVM1 中,快照仅是只读的。有关更多详细信息,请参阅 第 3.8 节

4.1.13. 单个 LV 的最大大小是多少?

这个问题的答案取决于你计算机的 CPU 架构和你正在运行的内核

  • 对于基于 2.4 的内核,最大 LV 大小为 2TB。但是,对于某些旧内核,由于块层中的有符号性问题,限制为 1TB。Red Hat Enterprise Linux 3 Update 5 具有允许完整 2TB LV 的修复程序。有关这方面的更多信息,请咨询你的发行版。

  • 对于 2.6 内核上的 32 位 CPU,最大 LV 大小为 16TB。

  • 对于 2.6 内核上的 64 位 CPU,最大 LV 大小为 8EB。(是的,这是一个非常大的数字。)