通用线程: 学习 Linux LVM,第 1 部分

“逻辑卷管理”为存储器管理带来的魔力

在本文中,Daniel 向您介绍了 Linux LVM(逻辑卷管理)背后的概念,并告诉您如何将最新的内核补丁和工具安装到您的系统上。LVM 可以让您在除机器上的物理存储资源以外创建逻辑卷。不过,与物理卷不同,逻辑卷可以在系统仍处于运行状态时扩充和缩减,这样就为 Linux 系统管理员提供了他们梦寐以求的存储器灵活性。

Daniel Robbins (drobbins@gentoo.org), 总裁兼 CEO, Gentoo Technologies, Inc.

作者 Daniel Robbins 居住在美国新墨西哥州的阿尔布开克,他是 Gentoo Technologies, Inc. 的总裁兼 CEO, Gentoo Linux(一种用于 PC 的高级 Linux)和 Portage 系统(用于 Linux 的下一代移植系统)的主创人。 他还是几本 Macmillan 出版的书籍 Caldera OpenLinux UnleashedSuSE Linux UnleashedSamba Unleashed 的投稿人。Daniel 自二年级起就与计算机结下不解之缘,那时他首先接触的是 Logo 程序语言,并沉溺于 Pac-Man 游戏中。这也许就是他至今仍担任 SONY Electronic Publishing/Psygnosis 的首席图形设计师的原因所在。Daniel 喜欢与妻子 Mary 和新出生的女儿 Hadassah 一起共度时光。



2001 年 3 月 01 日

在这一系列中,我要向您介绍如何安装和使用新的内置在 Linux 2.4 内核中的“逻辑卷管理”支持。如果您以前从未使用过任何形式的 LVM ,那么您得好好学一学;它是一种非常棒的技术。 在我们真正设置和运行 LVM 之前,我要解释一下它究竟是什么以及它是如何工作的。然后,我们准备对 LVM 做一些测试来充分了解它。

LVM 介绍

如果您象我一样,那么您对 UNIX 和 Linux 的体验是从 PC 平台,而不是从大型的商业 UNIX 服务器和工作站上开始的。在基本 PC 上,我们总是不得不对硬盘驱动器执行分区。使用 PC 的人通常相当了解 fdisk 这样的在硬盘上创建和删除主要分区和扩展分区的工具。硬盘分区是一种令人厌烦,但公认是使操作系统设置和运行进程不可或缺的一部分。

因为要做好工作,确实需要精确地估计每个分区需要多少空间,所以硬盘驱动器分区可能是非常烦人的事。如果估计得不准确,Linux 系统很可能会顾此失彼 -- 为解决这个问题,您甚至可能需要执行整个系统备份、将硬盘清除干净,然后将所有数据恢复到新的(可能比原来好一些)分区布局中。讨厌!这些就是系统管理员在一开始就尽力避免的情况。

虽然分区曾一度是静态存储器的天下,但值得庆幸的是,我们现在有许多 PC 重新分区工具(PowerQuest 的 Partition Magic 产品就是最流行的一种)。这些工具可以让您用一个特殊磁盘来引导系统,并可以动态地重新调整分区和文件系统的大小。重新引导后,您就拥有了重新调整过大小的新分区,这样就有望将您从存储器危境中解脱出来。这些重新调整分区大小的工具很有效,并从某种程度上解决了一些存储器管理问题。但它们是不是就完美了呢?不一定。

象 Partition Magic 这样的工具对于工作站来说非常有效,但对服务器来说就不合适了。首先,它们需要重新引导系统。 而这正是大多数系统管理员尽量避免的。如果在每次需要调整存储器(例如,如果每周存储器调整都需要做很大调整)时不能重新引导机器怎么办?如果需要扩充文件系统使它能跨越多个硬盘驱动器会发生什么,或者如果在允许 Apache 继续提供 Web 页面的同时需要动态扩充或缩减卷的存储容量,您该怎么做?在一个高度可用的动态环境中,基本的分区大小调整器无法满足这些要求。对于这样一些和其它一些情况,“逻辑卷管理”是一种非常出色(如果不是最完美)的解决方案。


进入 LVM

现在,让我们看看 LVM 是如何解决这些问题的。我们执行下面的三步骤过程来创建 LVM 逻辑卷。首先,我们需要选择用于 LVM 的物理存储器资源。这些通常是标准分区,但也可以是我们已创建的 Linux Software RAID 卷。如果使用 LVM 术语,这些存储器资源称为“物理卷”。设置 LVM 的第一步是正确初始化这些分区以使它们可以被 LVM 系统识别。如果添加物理分区,它还包括设置正确的分区类型,以及运行 pvcreate 命令。

在初始化 LVM 使用的一个或多个物理卷后,可以继续进行第二步 -- 创建卷组。您可以把卷组看作是由一个或多个物理卷所组成的存储器池。 在 LVM 运行时,我们可以向卷组添加物理卷,甚至从中除去它们。不过,我们不能直接在卷组上安装或创建文件系统。而是告诉 LVM 使用我们的卷组存储器池创建一个或多个“逻辑卷”:

在物理卷上创建卷组

创建 LVM 逻辑卷非常容易,而且一旦创建它以后,我们就可以把文件系统放在它上面、安装它,然后开始使用卷来存储文件。使用 "lvcreate" 命令来创建逻辑卷,指定新卷的名称、所希望的卷的大小,以及希望这个特定逻辑卷所属的卷组。 然后,LVM 系统从我们指定的卷组中分配存储量来创建准备使用的新卷。创建新卷后,可以将 ext2 或 ReiserFS 文件系统放在上面、安装它,然后照我们喜欢的方式使用它。

从现有卷组创建两个逻辑卷

范围

在幕后,LVM 系统以大小相等的“块”(称为“范围”)为单位分配存储量。我们可以指定在创建卷组时使用的特定的范围大小。范围的大小缺省为 4Mb,这对于大多数情况来说相当理想。LVM 的一个好处是在已经安装了逻辑卷并在使用逻辑卷的情况下,可以动态地改变逻辑卷使用的范围的物理存储位置(换句话说,就是存储它们所在的磁盘)。LVM 系统确保逻辑卷在管理员物理地改变存储位置的同时能够继续正常操作。

当然,因为所有事物都是在大小相等的范围之上创建的,所以要为已存在的逻辑卷分配一些额外的范围实际上很容易 -- 换句话说,动态“增长”卷:

从卷组添加额外的范围,扩展逻辑卷的大小

一旦扩充了逻辑卷,接下来就可以扩充 ext2 或 ReiserFS 文件系统来利用这一新的磁盘空间。如果使用例如 resize_reiserfs 这样的程序,也可以 在已安装和正使用卷时扩充文件系统!真正令人称奇的是 -- 使用 LVM 和联机文件系统扩充实用程序,可以在改变存储器配置时不再需要重新引导系统,甚至不需要降低到运行级别 1。

唯一需要关闭系统的情况是在需要添加新的物理磁盘时。添加了新磁盘后,可以将这些新的物理卷添加到卷组中来创建新的范围补给。


设置 LVM

好,让我们开始安装 LVM。LVM 由两部分组成:内核部分和一套用户空间工具。为了开始,先跳到主要 LVM 页面(请参阅本文稍后部分的 参考资料)并下载可以找到的最新版本的 LVM tar 文件(当前是 lvm_0.9.1_beta3.tar.gz)。LVM tar 文件包含了所有用户空间工具以及一组内核补丁程序。这正是令人感兴趣的地方。

如果已经安装了 2.4 系列内核,则系统上已有 LVM 支持,如果没有,很简单,只需要重新编译内核来启用 LVM 支持即可。不过,您可能不希望使用自带的(或发行版提供的)2.4 内核所包括的 LVM 支持。如果希望使用最新的 LVM 版本,要将 LVM tar 文件中的补丁程序应用到当前的 2.4 内核源码树。以下是执行方法。

为了开始,进入内核源码目录 (/usr/src/linux) 并创建一个称为 "extras" 的目录。然后进入该目录并抽取 LVM tar 文件:

# cd /usr/src/linux
# mkdir extras
# cd extras
# tar xzvf /path/to/location/of/lvm_0.9.1_beta3.tar.gz

执行完这一步后,您会注意到在 extras 中有一个称之为 "LVM" 的目录,它包含了另一个根据您刚刚解包的 LVM 版本命名的目录。进入这两个目录找到 LVM 源码:

清单 1:找到 LVM 源码

您将看到几个文本文件、脚本和源目录。您会在 "INSTALL" 文件中找到安装指令;我将指导您完成这一过程。首先,我们希望运行配置脚本,如下:

# ./configure --prefix=/ --mandir=/usr/man

修补

执行完这条命令后,将创建并配置 Makefile,以在 /sbin 中安装所有 LVM 工具,在 /usr/man 中安装帮助页面。如果您的帮助页面位于 /usr/share/man 中(按照 FHS 2.1),则对上述路径作相应的调整。如果内核源码不在 /usr/src/linux 中,还需要将 "--with-kernel_dir=/path/to/usr/src/linux" 选项添加到一行中。配置脚本完成后,我们就可以准备安装这些工具并生成当前内核的补丁了。让我们首先对内核加以修补。进入 PATCHES 目录:

# cd PATCHES

现在输入 "make"。makefile 将生成专用于特定 2.4 系列内核源码的补丁:

# make

补丁名为 lvm-[lvmversion]-[kernelversion].patch。例如,因为我使用的是版本 0.9.1_beta3 的 LVM 和内核 2.4.0-ac11,所以补丁名为 lvm-0.9.1_beta3-2.4.0-ac11.patch。您可以在当前目录中找到它。现在该应用补丁了。要应用补丁,需要将目录切换到内核源码所在的位置,然后使用 patch 命令,如清单 2 所示:

清单 2:patch 命令

虽然 LVM INSTALL 文档并没有提到,但我通常将 "-l" 选项传递给 patch。该选项让补丁程序补偿空白中的任何变化(例如细微的缩排变化),这些变化一般会造成补丁的某些部分失败。如果上述命令完成时没有任何带有 "FAILED" 的行,那么就可以准备安装用户磁盘空间工具了。如果不是这样,您需要审视 /usr/src/linux 目录来查找 ..rej 文件,然后使用文本编辑器手工将被拒绝的部分插入到源码中 -- 真麻烦!不过,在大多数情况下,应用补丁都很顺利,您可以迅速使用它。


配置、编译和安装

好,现在有了一个经过修补的内核,因此它具有最新可用的 LVM 代码。现在需要配置内核来启用 LVM 支持。我建议您直接将 LVM 支持编译到内核中而不是将它配置成作为一个模块编译。启动您喜爱的 Linux 内核配置方法:

# cd /usr/src/linux
# make menuconfig

您在 "Multi-device support (RAID and LVM)" 部分中可以找到 LVM 选项。一旦启用了第一个选项:

[*] Multiple devices driver support (RAID and LVM)

....您将看到以下选项,您也应该启用它们:

<*>   Logical volume manager (LVM) support

根据您使用的 LVM 版本,可能还有其它一些希望启用的与 LVM 相关的选项。完成后,保存内核配置,并执行标准内核编译例程,然后重新引导。 恭喜 -- 您现已启用了内核 LVM 支持;现在,我们需要编译和安装用户磁盘空间工具。这一步很简单:

# cd /usr/src/linux/extras/LVM/0.9.1_beta3
# make
# make install

另外还有一步,它是可选的。如果您要做的不仅是测试 LVM,还需要将以下几行添加到启动 rc 脚本中:

/sbin/vgscan
/sbin/vgchange -a y

这些行将浏览所有可用的卷组并激活它们。然后,将以下这行添加到关机 rc 脚本中,并确保它在卸装了所有文件系统后执行:

/sbin/vgchange -a n

如果只是测试 LVM,可以跳过这些步骤。只是要记住,在每次重新引导后,在逻辑卷可以使用前,需要以 root 输入 "vgscan" 和 "vgchange -a y"。

以上就是这篇文章的内容。在下一篇文章中,我将介绍如何创建您自己的逻辑卷,以及如何发挥 LVM 的威力。到时候再见!

参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
  • 从 Sistina Software 下载 LVM tar 文件
  • 请务必仔细查看 Linux LVM FAQ
  • 等不及的读者可以查看 Heinz Mauelshagen 的 LVM HOWTO,它介绍了如何设置物理卷、卷组和逻辑卷。这是我将在下一篇文章中涉及的内容。
  • 另外还有一个有意思的 HOWTO,告诉您 如何在逻辑卷上设置根文件系统
  • Andreas Dilger 参与了 Linux LVM 项目,他有一个看上去不错的 联机ext2 文件系统大小调整器
  • ReiserFS 是一种非常好的文件系统(特别在与 LVM 结合使用时)。如果使用的是 ReiserFS,需要获取 reiserfs-utils tar 文件,它包含了一个称为 "reiserfs_resize" 的程序 -- 允许对 ReiserFS 文件系统联机调整大小。
  • 有关设置 Linux Software RAID 卷的详细信息,请参阅 Daniel 在 developerWorks上有关 Software RAID 系列的 第 1 部分第 2 部分
  • 如果想进行回顾,请参阅 developerWorks 上的 Linux 内核编译教程

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=21437
ArticleTitle=通用线程: 学习 Linux LVM,第 1 部分
publish-date=03012001