Linux-NTFS 工具的互操作性能力
Linux 环境可以访问数十种文件系统,无论是在本地硬盘驱动器上还是在网络上的某个位置。更具体地说,Linux 可以运行许多工具来操作 Windows 文件系统或修复 Windows 问题。
一套工具来自 Linux-NTFS 项目。这些实用程序创造了许多奇迹。其中一个可以调整 NTFS 分区的大小。一些可以操作单个文件。一个可以克隆整个 NTFS 镜像。可以备份 Windows 安装,从集中存储的镜像克隆新的工作站,并在网络上更新镜像。而且,由于这些工具在 Linux 内部运行,它们受益于 Linux 环境的强大功能。当您处理单个双启动计算机时,这些工具会很有帮助。如果您使用大型网络,它们很快就会变得不可或缺。在重定向、管道和脚本的帮助下,可以轻松地从 Linux 中自动化许多繁琐但重要的 Windows 维护任务。
这些实用程序广泛可用且得到良好支持。几乎所有具有软件包管理器的 Linux 发行版都提供了软件包,甚至 Knoppix live CD 也包含了该软件本身。许多发行版安装这些工具,以便只有 root 用户才能运行。要查看您的 Linux 安装中是否包含这些工具,查阅 man 手册至少可以显示是否安装了文档man ntfsprogs.
即使软件和/或文档缺失,您也可以自行安装这些工具。对于 SUSE、Debian、Ubuntu 和 Gentoo,ntfsprogs 是要搜索和安装的软件包名称。某些发行版的软件包包含所有 NTFS 工具,而有些则不包含。例如,Debian 的 Etch 版本中的软件包包含 ntfsmount 工具,而 Sarge 版本中的软件包则不包含。基于对许可问题的理解,Red Hat/Fedora 发行版不支持 NTFS,但专门为 Red Hat/Fedora 设计的软件包可直接从 Linux-NTFS 项目获得。当然,查阅该项目的实际主页 (www.linux-ntfs.org) 可以获得最新的文档和信息,以及最新的源代码和构建完整工具集的说明。
无论您运行哪种 Linux,都可以下载源代码并从中安装。如果您想要最新功能和最新的 NTFS 驱动程序,这是一个不错的选择,尽管您可能会遇到绕过软件包管理器的缺点。
注意:在从头开始构建 ntfsprogs 之前,您可能应该安装 FUSE 库 (fuse.sourceforge.net)。Linux 有一个内置的 NTFS 驱动程序,但 NTFS 实用程序包含第二个用于 NT 文件系统的驱动程序。非原生驱动程序是基于 FUSE 的 ntfsmount,它拥有许多额外的功能。但是,它比最新内核附带的驱动程序稍慢。此外,它要求您的内核具有 FUSE 模块。
如果您想安装 FUSE 库,请下载最新的源代码并将其存储在方便的目录中,也许是您计划存储 ntfsprogs 下载的同一位置。安装遵循已成为标准的“configure, make, make-install”过程(请注意,当您阅读本文时,版本号可能已更改)。以 root 身份执行此操作
tar -xzvf fuse-2.5.3.tar.gz cd fuse-2.5.3.tar.gz ./configure make make install
如果您只想对 NT 文件系统进行读取访问(以及有些不稳定的读/写访问),则安装 FUSE 库和模块并非完全必要。这是因为对于除 Red Hat/Fedora 之外的所有发行版,都有一个原生 Linux 内核驱动程序,它通过正常的 mount 命令运行。它速度更快,但缺乏 ntfsmount 的广泛功能和反馈。
现在,下载 ntfsprogs 源代码,然后将其保存在方便的目录中。以 root 身份操作,以与构建 FUSE 软件包非常相似的方式构建它(同样,当您阅读本文时,实际版本号可能已更改)
tar -xzvf ntfsprogs-1.13.1.tar.gz cd ntfsprogs-1.13.1 ./configure make make install
在没有 FUSE 库的情况下构建 ntfsprogs 时(即使您确实有 FUSE 模块),您将在运行 configure 命令时收到投诉
checking for FUSE_MODULE... configure: WARNING: \ ntfsmount requires FUSE version >= 2.3.0
这不应妨碍构建其他 NTFS 工具,但您将无法编译 ntfsmount。
如果您正在运行 Red Hat/Fedora,您甚至可能没有内核驱动程序。在这种情况下,强烈建议您安装包含基于内核的 NTFS 驱动程序的自定义内核,或者在构建之前安装 FUSE 库。
此时,假定您已安装 ntfsprogs 或已发现它已安装在您的系统上。
如果您已经查看了 ntfsprogs man 手册,您已经看到了实用程序的完整列表。以下是 man 手册输出的一部分
mkntfs(8) - Format a partition using NTFS. ntfscat(8) - Dump a file's contents to the standard output. ntfsclone(8) - Efficiently clone, create, restore or rescue an image of an NTFS partition. ntfscluster(8) - Locate the owner of any given sector or cluster on an NTFS partition. ntfscp(8) - Overwrite file on an NTFS partition. ntfsfix(8) - Check and fix some common errors, clear the LogFile and make Windows perform a thorough check next time it boots. ntfsinfo(8) - Show some information about an NTFS partition or one of the files or directories within it. ntfslabel(8) - Show, or set, an NTFS partition's volume label. ntfsls(8) - List information about files in a directory residing on an NTFS partition. ntfsmount(8) - NTFS module for FUSE. ntfsresize(8) - Resize an NTFS partition without losing data. ntfsundelete(8) - Recover deleted files from an NTFS partition.
列出的许多实用程序对开发人员比对在网络或双启动计算机上进行维护的人员更有用。但是,其中一些是真正的救命稻草,而 ntfsclone 是所有救命稻草中最大的一个。
为了试用 ntfsclone,您需要一台具有要克隆的 NT 文件系统的计算机,并且它需要能够访问另一个足够大的文件系统来存储镜像。推荐的文件系统是 ext2、ext3、xfs 或 ReiserFS。ntfsclone 的文档警告说,ReiserFS 在处理稀疏文件时速度很慢,但我发现最近版本的性能还可以。可以使用外部驱动器,只要它有能力存储巨大的文件——对于某些操作,您将需要与整个 Windows 分区一样大的空间。如果您的外部驱动器格式化为 FAT32 文件系统,则它对单个文件的大小限制太小,无法满足您的需求。当然,如果您的计算机未安装 Linux,您将需要从 live Linux CD 启动,例如 Knoppix。
请注意,上面 ntfsclone 实用程序的描述声称它“高效地”完成其工作。这不仅仅是吹嘘。在较新的硬件上,它可以在短短几分钟内克隆一台重要的 Windows XP 工作站。如果您的第一个 IDE 驱动器的第一个分区上有 NT 文件系统,并且您正在同一台计算机上的 Linux 上操作,则以下命令会将 NTFS 备份为单个文件
ntfsclone /dev/hda1 -O /usr/local/backup/ntfs.img
此命令中的大写 O 告诉软件覆盖镜像,但如果文件不存在,它将创建该文件。这不会压缩文件系统。事实上,它会将其保留在允许您使用环回挂载 ntfs.img 的状态。首先,创建一个挂载点
mkdir /usr/local/backup/mtpt
然后,使用 ntfsmount 和您用于普通挂载的相同语法
ntfsmount -o loop /usr/local/backup/ntfs.img \ /usr/local/backup/mtpt/
ntfsmount 命令默认以读/写方式挂载文件系统。可以轻松复制、移动和删除文件。当然,存在通常的跨平台风险需要应对。例如,当涉及到外来行尾和字符集时,涉及配置文件的情况可能需要谨慎。
使用带有本机驱动程序的本机 mount 命令涉及相同的熟悉语法
mount -o rw,loop,nls=utf8 -t ntfs \ /usr/local/backup/ntfs.img \ /usr/local/backup/mtpt/
请注意,此挂载还为 Windows 兼容字符集提供了规定。但是,如果您选择使用 Emacs 编辑 boot.ini 等文件,您仍然需要谨慎、技巧和专业知识。最好在 Windows 环境中编辑此类文件,或者可能使用通过 Wine 运行的记事本。
如果您想要读/写访问权限,您使用最后一种挂载方法的成功率可能会因内核版本而异。同样,本机驱动程序有点挑剔。它可能会抱怨,如果它抱怨,它通常的行为是回退到只读挂载。旧版本的本机驱动程序在读/写模式下完全是危险的。
对于这两种方法,以相同的方式卸载文件系统。从包含挂载点的目录中执行以下操作
umount mtpt/
ntfs.img 文件可以像任何其他(诚然是巨大的)文件一样移动和复制。它可以被压缩并存储在安全的地方。它可以上传到远程位置。可以编辑副本,然后将其恢复到原始副本上。用于将此备份恢复到原始分区(在包含备份的目录中)的命令如下
ntfsclone ntfs.img -O /dev/hda1
有时,越小越好。ntfsclone 命令将接受允许您有效压缩镜像的标志。这些标志还使克隆过程更快,无论是从本地硬盘驱动器还是通过网络。这是一个示例,其中镜像以与第一个示例非常相似的方式保存
ntfsclone --save-image /dev/hda1 -O \ /usr/local/backup/ntfs.img
除非恢复到其原始分区或不同的文件,否则无法挂载此镜像。恢复到其原始分区将如下进行
ntfsclone --restore-image --overwrite /dev/hda1 \ /usr/local/backup/ntfs.img
请注意,在上面,-O 已被更脚本友好的 --overwrite 标志取代。它们做同样的工作。所有标志都可以表示为脚本友好的单词(对于英语读者),并且大多数标志可以表示为单个字母。
现在是精彩的部分。ntfsclone 实用程序将数据发送到标准输出。这意味着您可以选择各种压缩实用程序、通过网络的不同传输模式等等。任何接受标准输入的有用工具都可以处理镜像。以下是一些示例。
要备份压缩镜像,请执行
ntfsclone --save-image --output - /dev/hda1 | gzip \ -c >ntfs.img.gz
镜像通过 -output 标志(带有一个短划线的参数)发送到标准输出。gzip 实用程序压缩它,然后将流重定向以覆盖或创建文件 ntfs.img.gz。
要将镜像备份到远程计算机,请执行
ntfsclone --save-image -o - /dev/hda1 | ssh \ backups@storage.mydomain.org \ "dd of/home/backups/windows/images/ntfs.img"
在这里,--output 的标志缩短为其单个字母缩写。它被发送到标准输出。这反过来又通过管道传输到 ssh 程序。流通过网络发送到名为 storage 的计算机,该计算机由名为 backups 的用户管理,并通过 dd 命令存储在其正确的位置。
这是另一个例子
wget ftp://storage.mydomain.org/home/backups/ ↪windows/images/ntfs.img.gz \ -O - | gunzip | tee /usr/local/backup/ntfs.img | \ ntfsclone --restore-image --overwrite /dev/hda1 -
这可能是直接从克隆脚本中取出的一行,因为它不需要密码或其他用户输入。它使用 wget 下载压缩镜像,使用 gunzip 解压缩它,然后使用 tee 命令拆分数据流,以便在 Linux 分区中存储镜像的备份副本,同时将其重定向到 /dev/hda1 上的 NT 分区。这假定 storage.mydomain.org 具有正常运行的匿名 FTP 守护程序。其他可能的无需用户输入即可下载的方法是使用带有 Apache 的 wget 或设置加密密钥以与 SSH 一起使用。同样,可能性仅受可用工具的惊人数量的限制。
ntfsprogs 软件包中的另一个有用工具是 ntfsresize。它完全按照它宣传的那样做。它缩小或扩展 NT 文件系统。它对占用分区的 文件系统进行操作,但它也调整了由 ntfsclone 存储为单个文件的文件系统的大小。
请注意,ntfsresize 不会更改分区表,它只会更改分区内部的 NT 文件系统。更改分区表是 fdisk 或 sfdisk 的工作。
本文不介绍如何对磁盘进行分区。详细而谨慎地描述如何在完全被单个 NT 文件系统占用的驱动器上释放空间可能需要一篇至少与本文一样长的文章。操作本身不需要很长时间,但有点危险。粗心大意,甚至运气不好,都可能导致计算机拒绝启动。鉴于此,并考虑到额外的硬盘驱动器的解决方法几乎与一箱汽油的价格相同,本文继续假设分区已经完成。
但是,假设 NT 分区对于 NT 文件系统来说只是稍微小了一点。例如,如果您没有考虑到大多数分区工具都需要向下舍入到附近的扇区,或者如果您用具有相同广告大小但几何形状不同的驱动器替换了有缺陷的驱动器,则可能会发生这种情况。
ntfsclone 实用程序在过大的分区上可以正常工作,但它拒绝装入即使稍微小一点的空间。
在这种情况下,ntfsresize 工具可以派上用场。要弄清楚您可以从 NT 文件系统中缩小多少空间,请键入以下命令(从包含 ntfs.img 的目录中)
ntfsresize --info ntfs.img
该软件将报告如下内容
ntfsresize v1.11.2 Device name : ntfs.img NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 90009203200 bytes (90010 MB) Current device size: 90009203200 bytes (90010 MB) Checking filesystem consistency ... 100.00 percent completed Accounting clusters ... Space in use : 6508 MB (7.2%) Collecting resizing constraints ... You might resize at 6507421696 bytes or 6508 MB (freeing 83502 MB). Please make a test run using both the -n and -s options before real resizing!
这报告说您可以将文件系统缩小到至少 6,508MB。如果将其缩小到最小尺寸,Windows 可能无法运行;无论如何,为未来增长留出一点空间是明智的。请注意,该软件建议您可以“使用 -n 和 -s 选项进行测试运行”。相反,您可以简单地将备份副本保存在安全的地方,以防万一出现问题。或者,您可以两者都做。将文件系统缩小到 10,000MB 需要以下命令
ntfsresize --size=10000M ntfs.img
这将产生大量反馈,包括以下内容
100.00 percent completed Updating $BadClust file ... Updating $Bitmap file ... Updating Boot record ... Syncing device ... Successfully resized NTFS on device 'ntfs.img'.
这应该创建一个足够小的 NT 文件系统,以适合其指定的分区。
对于每个想要安全 Windows 工作站的人来说,NTFS 工具可能不是必需品,但它们确实使生活轻松得多。
在单个双启动计算机的上下文中,可以将完整备份执行到安全的非 NTFS 分区,无论是在同一硬盘驱动器上,还是甚至在容量足够的可移动硬盘驱动器上。这可能不会使每个人的努力都值得。但是,对于已经配备了双启动系统的用户来说,用于大大增强安全性的工具可能已经安装。
对于负责许多 Windows 工作站的网络管理员来说,潜力甚至更大。双启动计算机可以配备共享磁盘分区(请参阅 Kevin Farnham 在 2006 年 6 月号的 Linux Journal 中的文章“The Ultimate Linux/Windows System”)。如果 GRUB 安装在此共享分区中,以及备用菜单文件,则可以编写脚本来将计算机重新启动到自动恢复 Windows 镜像、更新镜像等的运行级别。
Windows 和 Linux 可能在许多领域都是竞争对手。然而,Linux 的最大优势之一是其开放性和命令行工具的多功能性。Linux-NTFS 工具开启了与 NT 文件系统的对话,由于其单向性,这使其成为理想的安全性。
Steven Mathes 于 1995 年首次在他的计算机上安装了 Linux,当时可以使用 tar 备份 Windows。可以通过 smathes@tiac.net 与他联系。