在 Windows 中访问 Linux 文件系统
在新操作系统中无法访问您的数据可能是进行操作系统迁移的最严重障碍之一。如果用户切换到的系统无法与其数据互操作,那么用户几乎没有个人动力去切换,因为该系统对他们来说实际上是无用的。
Linux 在允许 Microsoft Windows 用户从 Linux 访问其 Windows 分区方面做得非常出色。大多数 Windows 文件系统都得到了支持,例如对 FAT16/32 的无缝支持以及对 NTFS 的部分但日益完善的支持。还有一些工具,例如 Captive-NTFS,可以在 Linux 中完全支持 NTFS 驱动器。数据访问不仅限于本地主机。Samba 允许 Linux 用户通过网络访问其 Windows 计算机上的共享数据。因此,我们可以说,对于 MS Windows 用户来说,访问其数据不再是迁移到 Linux 的障碍。
然而,随着 Linux 向桌面领域的推进,许多人在某些任务中使用 Linux,然后转向 Windows 使用 Linux 上尚不可用的软件,例如高端游戏、Adobe Photoshop 以及各种特定领域的应用程序,这些应用程序没有开源的同等替代品。当人们使用这些应用程序时,他们通常需要访问其 Linux 分区。Windows 中不存在对 Linux 文件系统的支持。因此,Linux 双启动用户必须使用一些工具来访问其 Linux 文件系统。
文件系统简述
一些读者可能想知道文件系统到底是什么。文件系统基本上定义了一种从磁盘存储和检索文件的方法。这就引出了问题:“为什么有这么多文件系统?为什么不能每个人都就存储和检索磁盘数据的最佳方式达成一致,并使该文件系统成为所有平台上的标准?”不同的操作系统带有不同的文件系统,因为它们的目标用户不同。面向企业用户的 Windows NT 附带了一个名为 NTFS 的文件系统,该文件系统具有增强的安全性;而面向普通用户的 Windows 9x 附带了 FAT16/32,这是一个安全性较低但性能更高的文件系统。Windows XP 同时提供了两者,因为它面向这两个细分市场。同样,在 Linux 上,ext2/3 是事实上的文件系统,但还有其他一些用于更特殊用途的文件系统,例如用于高性能计算的文件系统(如 XFS)或具有高度容错能力的文件系统(如 ext3 和 ReiserFS)。
为操作系统添加对特定文件系统的“支持”基本上意味着我们定义了操作系统上涉及的数据结构,数据就存储在这些结构上。为专有文件系统(如 NTFS)添加支持更加困难,因为磁盘上数据的结构、加密算法等等都是不为公众所知的。这就是为什么在 Linux 中完全支持 NTFS 仍然是一个挑战。
如前所述,Windows 本身不支持 Linux 文件系统。然而,并非一切都失去了希望。开源社区已经迎接了挑战,并创建了一些出色的软件来解决这个问题。本文主要关注 LTOOLS,它是一款高级软件,具有多个界面,允许用户访问各种 Linux 文件系统。但首先,让我们快速浏览一下其他一些可以完成这项任务的现有软件。
Ext2fsd 是该领域最古老的项目之一。它允许从 Windows 访问 ext2 文件系统,可以从 sourceforge.net/projects/ext2fsd 下载。它作为文件系统驱动程序安装,而不是作为常规应用程序安装。将 Ext2fsd 作为文件系统驱动程序集成到 Windows 中,使 ext2 分区透明地集成到 Windows 中,并允许 Windows 将 ext2 分区用作本机格式,并启用完整的读/写支持。Ext2fsd 不仅读取 ext2 分区,而且 Ext2 是最早的事实上的 Linux 文件系统之一,许多新的 Linux 文件系统(如 ext3 和 ext4)都向后兼容它。因此,该驱动程序可以与 ext3 甚至可能是 ext4 一起使用。关于 ext4 的情况目前尚不清楚,因为 ext4 最近才添加到主线内核中进行测试。但是,当将 ext3/4 与 Ext2fsd 一起使用时,您将仅使用 ext2 的功能;任何其他附加功能(如增强的日志功能)将不会被使用。
ReiserFS 越来越成为一种流行的 Linux 文件系统,因为它具有容错能力。rfstool 允许从 Windows 访问 Linux 的 ReiserFS 分区;但是,它仅支持只读访问,并且根据其网站,开发人员没有计划更改这一点。该工具可从 freshmeat.net/projects/rfstool 获取。
前面的工具将我们引向本文专门介绍的工具。与 Ext2fsd 和 rfstool 不同,后者特定于一类文件系统,而 LTOOLS 更通用。它们支持 ext2、ext3 和 ReiserFS。LTOOLS 是一组命令行工具,以及两个 GUI 和一个基于 Web 的前端,可以从几乎所有 DOS 或 Windows(XP、2000、NT、ME、9.x 或 3.x)版本读取和写入 Linux ext2/3 和 ReiserFS 文件系统,这些版本在同一台机器上或远程运行。因此,无论何时您运行 DOS 或 Windows,并且您迫切需要读取或写入 Linux 分区(可能在您自己的计算机或任何其他计算机上),您都可以使用 LTOOLS。如果您没有 live CD,LTOOLS 也是修复 Linux 安装的绝佳工具。
如前所述,LTOOLS 带有两个不同的 GUI 界面,使您可以访问 Linux 分区。LTOOLS 带有 LTOOLSgui,这是一个基于 Java 的图形用户界面,用于本地或远程访问您的 Linux 文件,以及 LTOOLSnet,这是一个基于 Microsoft .NET 的用户界面,也提供本地或远程访问。
如果您不喜欢使用非免费的 Java 或 MS .NET,您可以将 Web 浏览器用作 LTOOLS 的图形前端。为了实现此功能,该软件包包含 LREADsrv,这是一个简单的 Web 服务器,使您的 Linux 文件系统在 Web 浏览器中以类似资源管理器的视图提供。使用 LREADsrv,您可以允许远程访问您的 Linux 分区以及您的 DOS/Windows 分区。
LTOOLS 附带一个默认的 Windows 安装程序,该安装程序看起来相当陈旧。按照正常的安装过程之后,安装程序会在您的开始菜单中创建一个名为 LTOOLS 的条目,您可以从中访问大量界面,这些界面允许您访问 Linux 文件系统。
LTOOLS 支持几乎所有 Windows 版本;但是,并非所有界面都可以在所有 Windows 版本上运行。LTOOLS 为 Win9x/ME 和 Windows NT/XP 提供了两个不同的控制台版本。
命令行界面提供了用于写入和检索 Linux 数据的基本功能。LTOOLS 命令具有以下格式。所有命令都有三个与之关联的文件,例如
ldir.bat
此命令列出目录;但是,它不是程序,而是脚本。此脚本根据您的系统,进一步调用以下两个程序之一:LdirDOS.exe 或 ldirNT.exe。第一个用于 Win9x/ME,第二个用于 Windows NT/XP。
许多 LTOOLS 命令都具有逻辑语法。例如,分区名称是 Linux 名称。因此,如果我想将名为 vars.inc 的文件从 /root(位于 /dev/hda2 上)复制到我的 C: 驱动器,我会执行以下操作
lread.bat --s/dev/hda2 /root/vars.inc C:\vars.inc
同样,对于写入 Linux,我会执行以下操作
lwrite.bat --s/dev/hda2 C:\vars.inc /root/vars.inc
与此类似,LTOOLS 还具有表 1 中所示的命令。
表 1. LTOOLS 命令
lread.bat | 从 Linux 读取文件并复制到 DOS;示例用法lread.bat --s/dev/hda2 /root/vars.inc C:\vars.inc |
lwrite.bat | 将文件从 DOS 复制到 Linux;示例用法lwrite.bat --s/dev/hda2 C:\vars.inc /root/vars.inc |
ldel.bat | 删除 Linux 文件或(空)目录 - 与 Linux 中的 rm --f 和 rmdir 相同;示例用法ldel.bat /root/vars.inc |
lchange.bat | 更改 Linux 文件属性和所有者 - 类似于 chmod;示例用法lchange.bat --s/dev/hda2 754 /root/vars.inc |
lren.bat | 重命名 Linux 文件 - 类似于 mv;示例用法lren.bat --s/devhda2 /root/vars.inc /root/var2.inc |
lmkdir.bat | 创建新的 Linux 目录 - 类似于 mkdir;示例用法lmkdir.bat --s/dev/hda2 /root/newdir |
lln.bat | 创建符号链接 - 类似于 ln;示例用法lln.bat --s/dev/hda8 /root/link /root/vars.inc |
lcd.bat | 更改目录 - 类似于 cd;示例用法lcd.bat /home/ |
ldrive.bat | 设置默认 Linux 磁盘驱动器;示例用法ldrive /dev/hda8 |
上述工具不支持 ReiserFS。因此,LTOOLS 还附带 rfstool,可用于从 ReiserFS 分区读取数据。为了在 Windows NT/2000/XP 或 UNIX/Linux 下读取硬盘,您需要管理员权限。如果您在非管理员帐户下运行 LTOOLS,您可能无法访问硬盘。LTOOLS 不遵守 Linux 所有权。这意味着如果用户要挂载根设备,他们可以更改任何内容,包括 /etc/passwd/。
.NET framework 客户端是 LTOOLS 中功能最丰富的客户端之一。要运行它,您需要从 Microsoft 下载网站 (www.microsoft.com/downloads) 下载 Microsoft .NET framework 的副本。
该客户端允许您查看所有 Windows 和 Linux 分区,并且您可以在它们之间传输文件、删除文件、编辑文件和修改文件。也可以挂载远程设备并编辑其内容。当我的 Web 服务器出现问题时,这非常有用。如果我使用 Windows 机器,我会远程挂载驱动器并进行所有必要的修改以使其运行。
如果您的 Windows 安装是 Windows95/98/ME 并且不支持 MS .NET framework,则 Java 界面适合您。要运行 Java 界面,您需要 Java 运行时环境的副本,您可以从 java.sun.com 下载。Java 界面具有与 .NET 客户端类似的功能。
根据我的经验,LTOOLS 中最好的界面是基于 Web 的服务。LTOOL 附带一个内置的 Web 服务器 LREADsrv.exe,用户可以启动它并通过 Web 浏览器访问其文件系统。如果您想与其他人远程共享文件,这将具有很大的潜力。我不建议在全球可访问的服务器上运行 LREADsrv.exe,因为它可能会危及您的数据,因此您应该在只有合法用户可以访问它的环境中共享它,例如虚拟专用网络。LREADsrv.exe 仍然存在一些问题;但是,这些问题将在未来的版本中得到修复。
LREADsrv 仍处于 alpha 阶段,并且存在某些限制,其中包括 HTTP 1.1 Web 浏览器(如 Internet Explorer)的问题,这会大大降低服务器的响应速度。另一个限制是 LREADsrv 在当前版本中已作为单线程应用程序实现 - 这意味着如果多个人同时访问文件系统,他们所做的更改将全局应用,这可能会导致更新丢失和并发问题。LREADsrv 的错误检查很弱。大多数用户输入(文件名等)都未经过验证。因此,如果用户错误地键入某些文件名或错误地键入硬盘分区,Web 服务器可能会进入不稳定状态,幸运的是,这不会导致任何数据丢失。
Linux 用户对 Windows 文件系统的支持越来越成熟。LTOOLS 提供了一种统一的方式,可以通过 Windows 的大量界面访问最流行的 Linux 文件系统。然而,Windows 中对 Linux 文件系统的支持仍有很长的路要走。Windows 尚不支持各种其他 Linux/开源文件系统,例如 XFS。能够使用高级功能(如 ext3 和 ReiserFS 中的日志功能)的驱动程序尚不成熟。Linux 文件系统与 Windows 的集成是一个重要的领域,缺乏集成可能会严重阻碍操作系统迁移。因此,为了增强 MS Windows 和 Linux 之间的互操作性,鉴于 Windows 仍然是主要的桌面操作系统,开源社区必须专注于为文件系统添加相互支持。
Irfan Habib 是巴基斯坦国立科技大学软件工程专业的本科生。多年来,他对自由和开源软件非常感兴趣。他经常在异构计算环境中工作 - 这就是为什么不同平台的文件系统的相互支持对他来说很重要。