高级文件系统实现者指南,第 12 部分

高级文件系统实现者指南,第 12 部分

EVMS 简介
developerWorks
文档选项
将此页作为电子邮件发送
将此页作为电子邮件发送


级别: 初级
Daniel Robbins ( [email protected]), 总裁/CEO, Gentoo Technologies,Inc.
2002 年 9 月 16 日
在这个由多篇文章组成的“高级文件系统实现者指南”专栏中,Daniel Robbins 向您展示了如何在 Linux 2.4 中使用最新的文件系统技术。在此期间,他与您一同分享有关对现实实现的宝贵建议、性能信息和一些重要的技术说明,以便您尽可能轻松愉快地体验新的文件系统。在本文中,Daniel 介绍了用于 Linux 的企业卷管理系统(Enterprise Volume Management System (EVMS))。他说明了 EVMS 是什么、为什么迫切需要它以及为什么它很可能改变在 Linux 系统上管理存储的方法。
您是否曾经停下来思考有多少种可用于 Linux 的功能强大的与存储相关的技术?仅考虑日志记录文件系统这一项,就有 ReiserFS、ext3、XFS 和 JFS 这些文件系统。几年以前,Linux 甚至连一个日志记录文件系统也 没有。而现在,我们有许多日志记录文件系统,并且发现自己的处境很妙 ― 可以按自己的需求选择最好的文件系统。有选择余地显然是件好事情。
现在,让我们来考虑纯文件系统之外的一些内容。Linux 的软件 RAID 功能(已经出现了一段时间)给 Linux 管理提供了另一组可能性(要获取更多信息,请参阅 参考资料,那里有一些链接,通过它们可以阅读我的关于 Linux 软件 RAID 的两部分系列文章)。最近,我们幸运地拥有了 Sistina 的 Linux LVM 技术(逻辑卷管理;请参阅 参考资料,那里有一些链接,通过它们您可以阅读我的关于 LVM 的两部分系列文章,还可以下载 Sistina)。LVM 使管理员可以用更加灵活的方式来管理其存储资源,这要比用静态磁盘分区这种传统方式灵活得多。使用 LVM,管理员可以在运行中的服务器上扩大和缩小文件系统,并可以利用其它一些令人惊讶的功能,如文件系统快照。
存储管理问题
因此,总体而言,Linux 拥有一组极其丰富的与存储相关的技术。但问题也出在这里;就 总体而言,我们确实有一些很棒的工具。但是尝试将这些存储技术中的几种结合起来使用,事情就变得复杂了。例如,设想我们希望创建位于 LVM 逻辑卷上的 ReiserFS 文件系统(这样就可以按需动态地扩展它),而 LVM 又位于 RAID-1 软件 RAID 卷上(针对磁盘故障而提供的一些保护)。
要做到这一点,我们首先在系统中添加两个新驱动器,然后使用 fdisk 在每个驱动器上建立分区。接下来,指定 /etc/raidtab 文件,并使用 mkraid 来启用 RAID-1 卷。做完这些之后,使用 pvcreatevgcreatelvcreate 在 RAID-1 卷之外创建 LVM 逻辑卷。最后,使用 mkreiserfs 在这个新逻辑卷之上创建文件系统。在完成这些工作之后,就可以准备挂装新的 ReiserFS 文件系统了。
是的,我们完成了任务,但是我们必须使用四种不同类型的工具来完成这一切,而且我们的工具没有一致的界面。当我们继续维护卷时,必要时将需要使用软件 RAID 和 LVM 这两种工具。而且这些工具都不能看到所有各层是如何关联的“总览图”,确切地讲,是以下方面:
有两个磁盘;
每个磁盘上有一个分区;
合并成一个 RAID-1 卷;
用来创建一个 LVM 物理卷;
将其添加到 LVM 卷组;
在卷组中创建了一个 LVM 逻辑卷;
在此逻辑卷上放置了 ReiserFS 文件系统。
这其中所涉及的所有工具的数量(更不要提每个工具都不可以与其它工具交互这一事实了)足以让许多管理员对尝试任何如此具有挑战性的任务感到灰心。并且,如果一个新管理员要接管我们这台经过巧妙配置的服务器,则即使是为了首先理解我们如何配置每件东西,也要采取相当多的探测工作。即便这位新管理员真的领悟了这个问题(或者即使我们向他交接了这方面的文档,这是我们应该做的!),他还是会冲出服务器机房,充满恐惧地尖叫。为什么会这样呢?因为,尽管 Linux 有许多与存储相关的技术,但是提供给管理员的用于管理这些技术的界面肯定既不容易管理也不易保持一致;这种一致性和统一性的缺乏使得这种复杂的存储配置错综复杂地交织在一起,从而难以实现和维护。




回页首


初识 EVMS
如果您猜测我将会说:EVMS 一下子就轻易地解决了所有这些问题,那么您完全正确。它确实做到了这一点。EVMS 为 Linux 下的所有存储技术提供了统一的、可扩展的、基于插件的 API。这意味着什么?它意味着由于 EVMS,您可以使用单个工具来对磁盘分区、创建 LVM 对象以及甚至创建 Linux 软件 RAID 卷。并且可以使用这一工具以强有力的方式合并这些技术。EVMS 可以看见“总览图”;它可以确切地知道每件东西是如何分层的,从文件系统一直到底层保存数据的物理磁盘。不仅如此,EVMS 还与所有现有的 Linux 技术兼容。它不会强迫您替换分区、LVM 或软件 RAID 卷。相反,它会“愉快”地工作并通过其统一的存储管理界面与现有的存储配置交互。实际上,EVMS 目前向您提供的选项包括命令行界面、基于 ncurses 的界面和用 GTK+ 编写的很棒的存储管理 GUI。为了增强您这方面的兴趣,我将向您展示两张运行中的 GTK+ EVMS Administration Utility(来自版本 1.0.0)的抓屏。在 图 1 中,您可以看到 lvm/vg1/swap 区域(region)所包含的数据是来自 hda2 段(segment),该段位于 hda 磁盘。

图 1. GTK+ EVMS Administration Utility 的 Regions 选项卡
lvm/vg1/swap
图 2 显示了根卷的快照。快照数据来自 lvm/vg1/root 区域。即使是将文件添加到根文件系统或从中除去文件时,根快照仍将保持不变。

图 2. GTK+ EVMS Administration Utility 的 Volumes 选项卡
根卷的快照
EVMS 不但与您现有的存储管理兼容,而且还提供了新的、您迄今为止未曾获得的功能。1.0.1 发行版中的一个这样的功能是 EVMS 快照特性。您可能熟悉 Linux LVM 的快照;使用快照,您可以创建现有文件系统的不变“视图”,这对于备份很方便。虽然 EVMS 支持 LVM 快照,但它自己独有的快照功能要强大得多,因为您可以快照 任何类型的卷,甚至是标准的 Linux 分区!此外,EVMS 快照允许您创建读/写快照 ― 实际上是您现有文件系统的一个“分支”。EVMS 开发人员目前正在从事添加异步快照支持(用于快速的、临时的快照)和“回滚”支持的开发,它将丢弃从快照创建以来对底层卷所作的任何更改,如果管理员希望这样做的话。
既然您理解了对 EVMS 的需求,并对其作用有了基本理解,那么让我们看一下使 EVMS 启动和运行起来需要做哪些工作。




回页首


安装 EVMS
EVMS 由一组内核补丁和用户空间工具组成。要让 EVMS 启动和运行起来,得先获取 EVMS 源代码压缩文档,然后将它解压缩,并用其中所包含的内核补丁给内核源代码树打补丁。然后,我们将构建 EVMS 用户空间工具。为了完成安装,我们将配置和构建支持 EVMS 的内核,并用它进行重新引导;在系统重新引导之后,EVMS 已经就绪,可以使用它了。
如果您正在寻找开始研究 EVMS 的捷径,那么可以考虑下载 Gentoo Linux Game 迷你 CD(请参阅 参考资料以获取链接)。除了允许您在使用 NVIDIA 显卡的系统上玩用 OpenGL 加速的 lightcycle 游戏之外,我们的 Games 迷你 CD 还引导到包括完整的 EVMS 支持的 Gentoo Linux 运行时版本。Gentoo Linux 的正式 1.4 发行版(在撰写本文时还没有发布)也将包括完整的 EVMS 支持。我们的 Game/Install 迷你 CD 以及正式 Gentoo Linux 1.4 CD 将允许您安装 Linux 时将根文件系统放在 EVMS 卷上。
我们的第一步是访问 EVMS 项目的主页。在该页的“Latest file releases”一节,您应该可以看到 EVMS 的最新版本的入口。单击“download”链接将把您导航到主下载页面。我将带您遍历从源压缩文档安装 EVMS 版本 1.0.1 的过程,所以请选择下载 evms-1.0.1.tar.gz 文件(或与此类似的文件)。在选择您首选的下载镜像站点之后,下载就应该开始了。
得到压缩文档之后,将它解压缩到一个临时目录中:
# cd /tmp
# tar xzvf /path/to/evms-1.0.1.tar.gz

这个压缩文档包含 EVMS 用户空间工具以及我们需要应用到内核源代码树的补丁。为了 EVMS 用户空间工具正确地编译,我们需要首先安装补丁。要看您的 EVMS 发行版支持什么内核,更改目录并输入 ls ,如下所示:

清单 1. EVMS 目录清单
# cd evms-1.0.1/kernel
# ls
evms-1.0.1-linux-2.4.patch            evms-linux-2.4.7-common-files.patch
evms-1.0.1-linux-2.5.patch            evms-linux-2.4.9-common-files.patch
evms-linux-2.4.10-common-files.patch  evms-linux-2.5.1-common-files.patch
evms-linux-2.4.12-common-files.patch  evms-linux-2.5.2-common-files.patch
evms-linux-2.4.13-common-files.patch  evms-linux-2.5.3-common-files.patch
evms-linux-2.4.14-common-files.patch  evms-linux-2.5.4-common-files.patch
evms-linux-2.4.16-common-files.patch  evms-linux-2.5.5-common-files.patch
evms-linux-2.4.17-common-files.patch  lilo-22.2-evms.patch
evms-linux-2.4.18-common-files.patch  linux-2.4.12-VFS-lock.patch
evms-linux-2.4.4-common-files.patch   linux-2.4.18-VFS-lock.patch
evms-linux-2.4.5-common-files.patch   linux-2.4.4-VFS-lock.patch
evms-linux-2.4.6-common-files.patch   linux-2.4.9-VFS-lock.patch

在这个目录清单中,可以看到 EVMS 的这个版本支持大多数内核,从 2.4.10 到 2.4.18,以及从 2.5.1 到 2.5.5。这意味着为了创建支持 EVMS 的内核,我们应该对从 kernel.org 下载的现成的内核源代码树应用这些补丁。在这些选项中,将 EVMS 应用于 2.4.18 源代码树是最佳选择,因为在撰写本文时,这是目前支持的最新的稳定(2.4)的内核版本。如果您手边没有象 linux-2.4.18.tar.gz 或 .tar.bz2 这样最新稳定内核的源压缩文档,则需要下载一个(请参阅 参考资料以获取链接)。现在,在 /usr/src 中解压缩该新内核源代码树并应用适当的 EVMS 补丁:

清单 2. EVMS 补丁
# cd /usr/src
if /usr/src/linux is a symbolic link, type:
# rm linux
otherwise, do this:
# mv linux linux.old
# tar xzvf /path/to/linux-2.4.18.tar.gz
# mv linux linux-2.4.18-evms
# ln -s linux-2.4.18-evms linux

现在,/usr/src/linux-2.4.18-evms 中将有您要打补丁的源代码树,并让您的 /usr/src/linux 符号链接指向 /usr/src/linux-2.4.18-evms。现在准备开始应用 EVMS 补丁。首先,应用 evms-1.0.1-linux-2.4.patch ;这个补丁包含新的与 EVMS 相关的文件,它可用于 任何 2.4.x 的内核源代码树:
# cd linux
# patch p1 < /tmp/evms-1.0.1/kernel/evms-1.0.1-linux-2.4.patch

接下来,应用专门针对特定内核版本的 EVMS 补丁。这个补丁修改 Linux 内核源代码树中的现有文件,因此如果您将它应用于某个内核,而该内核不是它本应修补的那个版本,则可能出问题。
# patch -p1 < /tmp/evms-1.0.1/kernel/evms-linux-2.4.18-common-files.patch

现在,检查是否有可用于特定内核版本的 VFS-lock 补丁。如果有,最好应用它,因为它有助于 EVMS 更方便地使快照具有一致的状态:
# patch -p1 < /tmp/evms-1.0.1/kernel/linux-2.4.18-VFS-lock.patch

如果您按照我的建议,在打补丁的过程中使用了适当的现成的内核,那么所有补丁都会干净利落地应用到内核,而不会有“被拒的补丁”。要进行确认,可以在打过补丁的内核源代码树中搜索 '.rej' 文件:
# find -name '*.rej'

如果存在任何 .rej 文件,则意味着未正确地应用某个补丁,需要手工修改。通常,只有在您认为自己很聪明,对 -ac(或其它一些)非现成的内核应用 EVMS 补丁时,才会看到“被拒的补丁”;在这种情况下,我认为您知道自己在做什么,并认为您自己能修正这些被拒的补丁 :)。我亲自将 EVMS 补丁应用于基于 -ac 的内核;被拒的补丁不是很多,但我确实遇到了少数被拒的补丁和编译问题,理解和修正它们需要一定的技巧。如果您碰到了这类问题,可以向 EVMS 列表发送消息或访问 IRC 上的 #evms 频道(请参阅 参考资料以获得这些链接)。
现在,让我们配置自己的新内核。输入 make menuconfigmake xconfig ,然后按您的意愿配置内核。接下来,确保 禁用任何“Multi-device support (RAID and LVM)”选项,因为 EVMS 在内部包括了对 LVM 和 RAID 的支持。然后,转到“Enterprise Volume Management System”,启用所有选项以便将它们直接编译进内核:

清单 3. EVMS 内核配置
<*> EVMS Kernel Runtime
<*>   EVMS Local Device Manager Plugin
<*>   EVMS DOS Partition Manager Plugin
<*>   EVMS SnapShot Feature
<*>   EVMS DriveLink Feature 
<*>   EVMS Bad Block Relocation (BBR) Feature
<*>   EVMS Linux LVM Package
<*>   EVMS Linux MD Package 
<*>     EVMS MD Linear (append) mode
<*>     EVMS MD RAID-0 (stripe) mode
<*>     EVMS MD RAID-1 (mirroring) mode
<*>     EVMS MD RAID-4/RAID-5 mode
<*>   EVMS AIX LVM Package
<*>   EVMS OS/2 LVM Package
<*>   EVMS Clustering Package
(Default)   EVMS Debug Level

完成之后,保存配置,然后执行标准的内核构建/安装步骤。但还是请不要重新引导 ― 首先,让我们编译和安装 EVMS 用户空间工具:

清单 4. 编译和安装 EVMS 用户空间工具
# cd /tmp/evms-1.0.1/engine
# ./configure --prefix=/usr --libdir=/lib --sbindir=/sbin 
#             --includedir=/usr/include --with-kernel=/usr/src/linux
# make
# make install
# ldconfig

现在已经安装了用户空间 EVMS 工具,并有了一个新的、可以使用的、支持 EVMS 的内核。接下来,准备重新引导;当系统成功启动后,将启用 EVMS。遗憾的是,必需等到我的下一篇文章才能真正向您展示 如何使用 EVMS。但是,如果您等不及(谁不是这样呢?)并想看到 EVMS 的一些奇妙之处,那么以 root 身份输入 evmsgui ,这将弹出 GTK+ EVMS Administration Utility GUI。
一句警告的话 ― 除非您选择“ Commitchanges ”这个菜单项,否则 EVMS Administration Utility 不会应用您所作的任何更改,对此要小心。尽管 GTK+ 界面对用户十分友好,但 EVMS 是一个复杂的系统;要快速地掌握 EVMS 术语和用法 花费一点时间。当然,如果您可以耐心等待我发表下一篇文章时才开始实验,那么我将全程指导您如何去做。下次见!


参考资料
  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 到 kernel.org 下载 现成的内核源代码树。



  • 从 kernel.org 下载 稳定的内核源压缩文档,如 linux-2.4.18.tar.gz 或 linux-2.4.18.tar.bz2。



  • 在 SourceForge 上访问 EVMS 项目的正式开发主页,您可以从那里订阅 邮件列表并阅读 EVMS 文档以及其它内容。



  • 访问 IRC 网络 freenode 上的 #evms 频道(原先的 Open Projects Net)。几个 EVMS 开发人员会定期出现在 #evms 中。



  • 下载 Sistina,这是最新的 Linux LVM 技术。



  • 开始研究 EVMS 的捷径是下载 Gentoo Linux Game/Install 迷你 CD ― 从 Gentoo 1.4 x86 下载目录获取 livecd-ut2003-i586-1.4.1.iso



  • 在 Daniel 的系列文章中查找关于 Linux 软件 RAID 的信息:
    • 第 1 部分:简介和安装( developerWorks,2001 年 2 月)
    • 第 2 部分:生产环境中的设置( developerWorks,2001 年 2 月)


  • Daniel 在下列文章中研究了 Linux 逻辑卷管理(Logical Volume Management):
    • 第 1 部分:了解 LVM( developerWorks,2001 年 3 月)
    • 第 2 部分:cvs.gentoo.org 升级( developerWorks,2001 年 4 月)


  • developerWorksLinux 专区中还有 更多的 Linux 文章。


关于作者
Daniel
Daniel Robbins 住在新墨西哥的 Albuquerque,是 Gentoo Linux的首席架构师,Gentoo Linux 是一个基于端口的高级 Linux 系统,用在 x86、PowerPC、Sparc 和 Sparc64 系统上。他还为多本书撰稿,包括 Samba UnleashedSuSE Linux Unleashed。Daniel 和他的妻子 Mary 和女儿 Hadassah 在一起的时间过得很开心。您可以通过 [email protected]与 Daniel 联络。

你可能感兴趣的:(实现,文件系统,指南,高级,部分)