欢迎阅读高级文件系统实现者指南的最后一篇专栏文章。在本文中,Daniel 继续探讨他在
EVMS 简介中所遗留下来的内容,并一步一步地指导您使用
evmsn (EVMS 的基于 ncurses 的管理工具)的过程。他向您展示了如何使用 evmsn
来利用新硬盘、对它分区并在其上创建 LVM 卷。
接着,他向您介绍了重要的 EVMS 概念,当您继续研究此功能强大的技术时,您会发现这些概念是必不可少的。
开始使用 EVMS 的最佳方法是找一个空闲的硬盘,并将其安装到系统上。然后,就可以为您重要的内容在这个空闲硬盘上创建和删除分区和卷,而不必担心您的数据会遭到破坏。下面,通过引导 Gentoo Linux Game CD(请参阅本文后面的
参考资料),我遵循了这个方法,这张 CD 实际上正好包含了 EVMS 1.0.1 支持。我使用 vmware(请查阅
参考资料,获取链接)来引导这张 CD,并将我的虚拟 PC 配置成包含一个 SCSI 磁盘,sda。当出现带有“login:”提示符的欢迎界面时,输入 root,并在密码提示符下按一下 Enter 键,这样我就以 root 用户登录到这个生动的基于 Gentoo Linux CD 的系统。然后输入
evmsn 启动 ncurses 版本的 EVMS 管理界面。当然,也可以选择仅仅将一个新硬盘挂装在已有的支持 EVMS 的系统上。另外,如果您有 X,那么可以考虑使用
evmsgui ,这是一个基于 GTK+ 的 EVMS 管理界面。
尽管
evmsn 运行在使用 ncurses 的控制台上,而
evmsgui 使用更现代的、基于 GTK+ 的界面,但这两个程序的界面非常相似。了解了其中一个,则很容易转到另外一个。
现在,让我们开始使用 EVMS。由于我正在用这个控制台,所以我输入
evmsn ,出现以下屏幕:
图 1. EVMS 管理工具
在这个屏幕上,可以看到
/dev/evms/sda ,它是我系统上唯一的卷。如果您在自己的机器上运行 EVMS,那么肯定会看到至少列出了两个额外的
/dev/evms/---- 项。通过使用上下方向键,可以在每个设备节点间移动。
您可能对这些
/dev/evms/--? 设备节点是什么正感到疑惑。乍一看,似乎它们可能仅仅是 /dev 中各个设备节点的副本;例如,
/dev/evms/sda 仅仅与更传统的
/dev/sda 设备节点一样,表示同一个磁盘。那么,在
/dev/evms/ 目录中创建重复的设备节点有什么意义呢?回答是:EVMS 的工作之一是为系统上所有的卷创建统一的名称空间,而且它将这个名称空间创建在
/dev/evms 之下。
所以,EVMS 检测到 sda 并识别出它应该属于 EVMS 名称空间,因此 EVMS 在
/dev/evms 中创建了相应的设备节点。现在正是一个最佳时间来指出:如果您没有在用 devfs,那么您可能需要运行
evms_devnode_fixup 程序来更新
/dev/evms 名称空间。
以下是另一段巧妙却又很重要的事实。尽管 EVMS 可以看到系统上所有的存储资源,但它可能不会为它找到的所有资源都创建
/dev/evms/ 设备节点项。例如,在我的开发系统中有两个硬盘
/dev/hde 和
/dev/hdg 。但是,没有对应的
/dev/evms/hde 和
/dev/evms/hdg 设备节点。当我查看
/dev/evms/ 时,发现的唯一设备节点是
/dev/evms/hde1 ,它表示第一个硬盘上的引导分区。现在,为什么是
/dev/evms/hde1 而不是
/dev/evms/hde 呢?唔,看来 EVMS 十分智能,它已识别出 hde 和 hdg 没有将其自身加入到卷中;相反,EVMS 可以看到我已经对 hde 和 hdg 进行了分区。它还可以看到我已用这些分区创建了 LVM 逻辑卷。/dev/evms/hde2 分区上的空间正用于更高级的存储对象,所以 EVMS 没有创建“
/dev/evms/hde2 ”设备节点。相反,它识别出我已创建的 LVM 卷,并在
/dev/evms/lvm 下为这些卷创建了设备节点:
清单 1. /dev/evms/lvm 下的设备节点
$ ls /dev/evms/lvm/*/* -l brw-rw-rw- 1 root root 117, 2 Dec 31 1969 /dev/evms/lvm/mainvg/root brw-rw-rw- 1 root root 117, 3 Dec 31 1969 /dev/evms/lvm/raid0vg/swap brw-rw-rw- 1 root root 117, 4 Dec 31 1969 /dev/evms/lvm/raid0vg/tmplv |
这说明了 EVMS 遵循的一个重要原则:它只为它在系统上找到的
最终(而不是临时)存储对象创建设备节点。EVMS 将这些最终存储对象统称为“逻辑卷”,而不管它们实际上正好是磁盘、分区,还是 LVM 逻辑卷。正如稍后将看到的,当我们使用
evmsn 和
evmsgui 管理工具时,在能看到
/dev/evms/ 中 EVMS 卷相对应的设备节点之前,需要显式地从存储对象上创建 EVMS 卷。假如我们不打算直接使用存储对象,而是计划用它来创建更高级的存储对象,在将存储对象转换成卷之前,EVMS 将不会为它创建设备节点。EVMS 主张在创建
/dev/evms 设备节点之前先创建卷,这样可以为我们提供保护,以免在输入
mke2fs /dev/evms/foo 时,会在不应该使用的设备节点上创建文件系统。由于存在这个行为,所以我们可以获得保证,即
/dev/evms/ 下的每个设备节点都包含或打算包含文件系统或交换空间。
尽管这个行为非常巧妙、有用而且还减少了混乱,但确实需要花些功夫才能领会它。为了真正理解这一点,以下是在我的开发工作站上运行的 evmsgui 的抓屏。正如您可以看到的,在我的存储资源中,只有四项被配置为卷,而且它们都被用于文件系统或交换空间。
图 2. evmsgui 实用程序
现在,回到 vmware EVMS 配置示例。如果您看了本文的第一个抓屏,那么会注意到,尽管
/dev/evms/sda 为空,但该磁盘还是显示为卷。这只是“细心的” EVMS 的另一个示例;尽管它不能检测到磁盘上任何有效的存储资源类型,但它还是将整个磁盘标记为卷,以便在开始使用该磁盘上的存储空间之前必须先
删除这个卷。这是一个极好的行为,因为理论上磁盘
可能包含一些 EVMS 完全不能识别的重要数据。
通过采用这个方法,EVMS 就不会让人认为磁盘为空,也就不可能愚弄管理员(例如使他覆盖原始的 FreeBSD 卷),从而可以避免有风险的行为。这再一次说明了 EVMS 很巧妙,但乍一看它的行为稍微有点费解。
当然,在我这个特定情况下,
/dev/emvs/sda
为空,而且我需要对它进行分区。为此,我需要按如下那样先破坏
/dev/evms/sda 卷。首先,选中
/dev/evms/sda 之后,按一下 Enter 键:
图 3. 破坏卷
正如您可以看到的,这一操作产生了一个子菜单,其中有查看有关卷的细节、删除存储对象上的卷或破坏卷等选项。“破坏卷”和“删除存储对象上的卷”之间有一个很重要的区别;如果选择了前者,那么卷(以及该卷下的任何子对象)将被分解成它们的基本组件。但是,如果选择只删除卷,那么该卷将被破坏,但其子对象(如果存在的话)将完好无损地保留下来。“删除”和“破坏”之间的区别类似于剥去一层洋葱皮和将整只洋葱放到食品加工机中。
但是,在这个特定的例子中,我的洋葱只有一层,所以这两个选项将完成相同的事情。我决定选择“Destroy the volume”;在确认了我的选择并按任意键以返回到卷列表之后,现在您会看到这个操作的结果:“No logical volumes found”。
这个特定的视图突然变得非常令人讨厌,所以我将更改它。 按一下“4”将弹出一个选择视图的子窗口。刚才,我在“Logical volumes”视图;现在转到“Available topmost storage objects”。完成选择后,现在我们能看到“sda”又在我们的列表中了!但与前面的操作不同,我们不查看卷,而是查看存储对象。如果接着做下去,对这个存储对象按一下 Enter 键,那么您将看到可以在“sda”上创建几个事物,其中包括一个 EVMS 或兼容性卷。
但是,我们真的不想这样做 — 如果我们想在 sda 上创建卷,应该回到本文开始的地方,即首次装入
evmsn 时,一个卷包括了整个磁盘。相反,我想创建分区,
然后将分区转换成卷。为此,我按一下“4”(来选择视图),然后选择“Logical disks”。这里我看到了逻辑磁盘“sda”。是的,在“sda”存储对象和“sda”逻辑磁盘之间
存在一个重要的区别。
把“sda”作为存储对象来处理,我们可以将它转换成卷,或使用它来构建更高级的存储对象。但把“sda”作为磁盘来处理允许我把磁盘分割成多个分区(在 EVMS 的行话中称为“段(segment)”),这些分区反过来可以用作存储对象。为此,我按一下 Enter 键,弹出一个菜单,其中提供对磁盘分配段管理器的选项:
图 4. 分配段管理器
现在,如果 段与分区是一回事,则您可能想知道 段管理器是什么。可以将段管理器比作“分区方法”或方案。一旦我们选择了段管理器,EVMS 会在磁盘上存放一些元数据,同时创建主引导记录并将磁盘上的剩余空间标记为“freespace”,使之用于新段。要划分新段,可以从屏幕的菜单上选择“DefaultSegMgr”,再按一下 Enter 键,然后按下空格键。选择“sda”作为接收段管理器的对象。然后,再按一下 Enter 键,选择磁盘的类型为“Linux”(选项中还有“OS/2”),并按一下 Enter 键继续。按下一个键后,现在我按一下“4”(选择视图),然后选择“Disk Segments”以查看我已创建的新段:
图 5. 创建新段
现在我的磁盘有一个主引导记录,然后准备创建新的分区,即 EVMS 行话中的“段”。当我创建新段时,“sda_freespace1”段的大小将减少;如果我将磁盘上所有可用空间都用于创建分区,则 sda_freespace1 段将完全消失。如果硬盘上的可用存储空间确实完全映射到我选择的分区大小,则也可能继续保留剩余的很小的 sda_freespace1。
现在,为了创建那些段,当鼠标停留在“sda_freespace1”上时按一下 Enter 键,随后选择“Create a New Segment”。接着,选择 DefaultSegMgr 插件,并通过按一下空格键来接受使用 sda_freespace1 对象,随后按一下 Enter 键。接着,在磁盘的开始部分,创建一个很小的引导分区,用来保存内核。为此,我将按两次空格键,然后输入“100”以将分区大小设置为 100 MB,接着在 Bootable 选项上按两次空格键来将“Bootable”设置为真。 最后,按一下 Enter 键以创建新的分区。重复这些步骤,然后可以创建用于文件系统的其它分区和交换分区。一些注意事项:如果需要创建的分区多于四个,那么请记住在创建引导卷之后切换掉“Primary Partition”选项。还要记住在创建交换分区时,将“Partition Type”设置为“Linux Swap”。
最后一步是在“sda1”、“sda2”和“sda3”上按一下 Enter 键。会出现一个菜单,其中会显示“Create Compatibility Volume from the Segment”的选项。在选择这个选项之后,段将被配置成包含一个可以使用的逻辑卷,这意味着它现在在
/dev/evms/ 下有一个设备节点。另外,因为我选择创建
兼容性卷,所以即使刚好用非 EVMS 内核重新引导了系统,也可以使用新卷。如果选择了“Create EVMS Volume”,那么这就是另外的情况了。请注意 EVMS 版本 1.1.0 及其更高级版本允许您将兼容性卷转换成 EVMS 卷,反之亦然。
至此,您应该掌握 EVMS 了吧,通过使用 EVMS,我已经对一个系统磁盘进行了分区。 尽管这不是一个惊天动地的成就,但在您尝试如创建存储容器、LVM 逻辑卷、RAID 卷、快照以及其它吸引人的事物之前,这样一次经历将有助于向您提供所需的 EVMS 基础知识。当然,本文中我没有留出篇幅涉及这些主题,但我希望在明年能陆续讨论其中某些 EVMS 应用程序。但首先,在讨论其它话题之前,先结束“高级文件系统实现者指南”。希望您喜欢这次旅行:)
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文.
- Daniel 在高级文件系统实现者指南的第 12 部分“
EVMS 简介”(
developerWorks,2002年 10 月)中介绍了 EVMS。
- 在 SourceForge 上访问
EVMS 项目的正式开发主页,您可以从那里订阅
邮件列表并阅读
EVMS 文档以及其它内容。
- 访问
freenode 上的 #evms 频道(原先的 Open Projects Net)IRC 网络。几个 EVMS 开发人员会定期光顾 #evms。
-
VMware是一个虚拟机软件包。
- 了解有关
Gentoo Linux的更多信息。
- 开始研究 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 逻辑卷管理:
- 第 1 部分:了解 LVM( developerWorks,2001年 3 月)
- 第 2 部分:cvs.gentoo.org 升级( developerWorks,2001 年 4 月)
- 在
developerWorksLinux 专区查找
更多 Linux 文章。

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