NTFS FAQ (常问问题)

English Italian Japanese Vietnamese German Simplified Chinese French Spanish Brazilian Traditional Chinese Russian

这份FAQ是Linux NTFS计划的一部分。

最新的版本可以通过访问 ntfs.html 获得。

如果这份FAQ没有回答你的关于NTFS的问题,或者你对这份FAQ有什么意见,请发邮件给我: linux-ntfs-dev@sourceforge.net

中文版由kelvin翻译,如果对翻译有什么意见,请发邮件至:zhangyc@zju.edu.cn。

内容

关键字

** - 最经常问到的问题
!! - 其他有意思的东东
NB - 需要特别注意的

 命令或者输出

1. NTFS常见问题

  1.1 什么是NTFS?
  1.2 NTFS比FAT/FAT32好吗?
  1.3 我需要使用或者升级到NTFS吗?
!! 1.4 每一版本Windows中的NTFS都一样吗?
  1.5 NTFS的局限性是什么?

2. NTFS卷

  2.1 怎样从Windows 95/98/ME或DOS中读入一个NTFS卷?
  2.2 怎样将FAT转换为NTFS?
!! 2.3 怎样将NTFS转换为FAT卷?
  2.4 怎样删除一个NTFS卷?
  2.5 怎样对一个NTFS卷进行碎片整理?
** 2.6 怎样调整一个NTFS卷的大小?

3. Linux和NTFS

!! 3.1 Linux可以读取那些版本的NTFS?
** 3.2 驱动程序支持写入NTFS卷吗?
  3.3 Linux支持NTFS的哪些特性?
  3.4 如果出现问题我应该怎么做?
** 3.5 怎样在Linux中加入对NTFS的支持?
  3.6 哪个版本的驱动是最好的?
  3.7 还有哪些其他的工具?
  3.8 Linux的NTFS驱动程序是怎样写成的?
  3.9 我们应该向谁表示感谢?

4. 挂载NTFS卷

  4.1 我可以挂载一个NTFS卷吗?
  4.2 NTFS驱动程序的安全性怎样?
  4.3 我应该使用哪个分区?
  4.4 我在使用哪个版本的NTFS驱动?
!! 4.5 怎样挂载一个NTFS卷?
  4.6 常用的挂载选项。
  4.7 用于原始驱动程序的挂载选项。
  4.8 用于新驱动程序的挂载选项。
** 4.9 怎样改变已挂载的NTFS卷的权限?
!! 4.10 怎样自动挂载一个NTFS卷?

5. 在NTFS上启动操作系统

  5.1 可以在NTFS卷上启动Windows吗?
  5.2 应该怎样使用lilo?
  5.3 应该怎样使用grub?

6. Linux发行版

  6.1 哪个发行版附加了对NTFS的支持?
  6.2 为什么RedHat不支持NTFS?
  6.3 为什么RedHat在访问NTFS卷时会处于锁上状态?
  6.4 有可以安装在NTFS上的发行版吗?

7. 新的Linux NTFS驱动程序

  7.1 新的NTFS驱动程序是什么?
  7.2 我需要使用它吗?
  7.3 我该怎样使用新的驱动程序?
  7.4 什么是补丁?
  7.5 如果我仍不理解呢?
  7.6 什么时候Linux内核中才会收入这些新的代码?
  7.7 不可以对Windows的驱动进行封装吗?

返回页面顶部


1. NTFS常见问题

1.1 什么是NTFS?

NTFS是New Technology Filesystem的缩写。称作NT是因为它最初是用在Window NT上的,文件系统则表示电脑在磁盘上存储文件的方式。不同的操作系统一般使用 不同的方式存储文件。

NTFS通常用于Windows NT、2000和XP系统。

返回页面顶部

1.2 NTFS比FAT/FAT32好吗?

简单的说,是的。NTFS更健壮,它支持双字节编码文件名以及适当的安全、压缩和加密。它主要的不足之处在于只能在Windows NT、2000或XP系统下进行读取,比如用户不能用DOS启动盘启动然后读取NTFS上的数据。

和往常一样,这个规则也有例外存在。早在1997年10月就有了Linux下的NTFS驱动程序,同样也有程序支持DOS下对NTFS的操作(2.1节对此有详细介绍)。

返回页面顶部

1.3 我需要使用或者升级到NTFS吗?

不,你并不需要,虽然这对于绝大多数人来说是一个不错的主意。你甚至可能察觉不到两者性能上的差别,唯一的缺点是你不能再将其转回FAT格式了(2.3节对此有详细介绍)。

NB 你可以在FAT16文件系统上安装Windows NT,在FAT32文件系统上安装Windows 2000或XP,然后再可以升级到NTFS。

返回页面顶部

1.4 每一版本Windows中的NTFS都一样吗?

不,它们看起来很相似,但新的版本总有一些附加的特性。比如,Windows 2000就有磁盘配额(quotas)。

NTFS Windows Version
v1.2 NT 3.51, NT 4
v3.0 2000
v3.1 XP

1.2版本有时被称作NT4.0。
3.0和3.1版本则被称作NT5.0和5.1。

返回页面顶部

1.5 NTFS的局限性是什么?

容量大小。NTFS支持最大为263字节的文件。NTFS卷最多可包括263个簇且每个簇最大可为64KB,这样它的最大容量就是约500万亿GB。

返回页面顶部


2. NTFS卷

2.1 怎样从Windows 95/98/ME或DOS中读取一个NTFS卷?

很可惜,这是不可以的。这些版本的Windows只支持FAT,NTFS只可以从Windows NT、2000和XP中进行读取。

但是,只要稍微费些功夫,你就可以从SysInternals 得到 "NTFS for Windows 98" 和 "NTFSDOS" 两个工具,这样就以在Windows 95、98和DOS中对NTFS进行读取。如果你愿意付费的话,他们甚至可以提供支持写入NTFS的版本(但这是非常昂贵的)。

返回页面顶部

2.2 怎样将FAT卷转换为NTFS卷?

打开一个命令窗口并输入(将x:替换为正确的卷标)

    convert x: /fs:ntfs
    

如果该卷正在使用中,转换将会在下次系统启动时进行。

NB 此命令不支持逆向操作,详情请见下个FAQ。

返回页面顶部

2.3 怎样将NTFS卷转换为FAT卷?

简单的说,这样是不可以的,当然如果你有足够的钱的话也有例外。http://norton.com出品的Partition Magic支持在不同的文件系统间进行转换,其中就包括NTFS和FAT。

返回页面顶部

2.4 怎样删除一个NTFS卷?

这依赖于你使用的操作系统。

DOS、Windows 95/98/ME: fdisk。使用启动盘启动系统,或者让Windows返回到DOS模式,然后运行fdisk。如果有多个磁盘,先选择磁盘,然后删除那些非DOS分区。操作时一定要特别小心,任何改变都会被立即提交并执行。

Windows NT: 计算机管理。

Windows 2000、XP: 逻辑磁盘管理器。从控制面板中开始,选择管理工具,然后选择计算机管理。

返回页面顶部

2.5 怎样对NTFS卷进行碎片整理?

当一个卷使用了很长时间,或者对磁盘进行过多次写入之后,保存在其中的文件可能变得支离破碎了。这些文件不再以一种连续的形式保存在磁盘上,而是被分成了很多小的部分,这样就减慢了访问文件的速度。

为此,Windows 2000和XP系统内置了磁盘碎片整理程序。而对于Windows NT的用户来说,也有免费的工具可以完成同样的工作,这就是Diskeeper Lite,它可以从 http://diskeeper.com 下载得到。

返回页面顶部

2.6 怎样调整一个NTFS卷的大小?

直到最近,唯一可以调整NTFS卷的大小而不造成数据损失的程序仍旧是很昂贵的。现在,我们有了自己的程序-ntfsresize。我们已经对其做了很多测试,但目前仍处于试验阶段。如果你想得到更详细的信息,请参阅ntfsresize FAQ。

http://powerquest.com/ 出品的Partition Magic仍是仅有的可以调整NTFS卷大小的商业程序。

返回页面顶部


3. Linux和NTFS

3.1 Linux可以读取那些版本的NTFS?

Linux驱动程序可以读取所有版本的NTFS。每个版本的NTFS都稍微有些差别,但是驱动程序仅需要对文件和路径进行解释,NTFS维护的所有索引记录都被安全地忽略了。

当驱动程序支持对一个NTFS卷进行写操作时,这种能力也会随着它所写入的NTFS版本的不同发生变化。

返回页面顶部

3.2 驱动程序支持写入NTFS卷吗?

并不完全是,但是如果你需要在装有双系统机器的上从Linux向Windows拷贝文件的话,请阅读下面的“怎样写入NTFS”部分,那里你将会找到一种在缺少写入支持的情况下解决问题的方法。

目前我们共有两个驱动程序,2.4内核中的原始驱动程序包含一些执行写入操作的代码,但是执行它们将会是非常危险的,极有可能彻底破坏你的文件系统。

2.5.11内核中引入的新驱动程序也包含一些执行写入操作的代码,但却是非常有限的。它可以覆写现存的文件,但不可以改变文件大小、添加新文件或者删除文件。

添加对写操作的支持将耗费很长的时间。NTFS的结构和数据库很相似,基于一致性的考虑,用户做出的每个改变都 可能带来其他的很多改变。一个错误可能对文件系统造成损害,很多错误则会彻底破坏整个文件系统。此外,目前的开发人员也只是出于个人爱好在空闲时间从事 NTFS驱动的开发。如果你愿意帮助我们,请发邮件给我: linux-ntfs-dev@sourceforge.net

怎样写入NTFS。如果你在使用装有双系统的机器并且只需要对NTFS写操作的支持来从Linux向 Windows转移文件,你可以通过使用Windows下的ext2/ext3驱动程序从Linux分区中读取文件来代替。这种方式只需使用两个只读的驱 动,并且仍旧可以从一个文件系统向另一个拷贝文件。

截至2003年6月4日,共有以下这些开源的支持Linux ext2和ext3文件系统的Windows驱动程序:

返回页面顶部

3.3 Linux支持NTFS的哪些特性?

NTFS支持极其众多的特性,但是Linux NTFS驱动程序实现的却很少。

Linux NTFS驱动程序支持Unicode文件名、压缩文件和稀疏文件。

但是,此驱动不能读取加密后的文件,它忽略了Windows的安全信息和Windows设置的磁盘配额。

返回页面顶部

3.4 如果出现问题我应该怎么做?

此驱动对于只读操作是非常安全的,但我们不可能对每个可能性都进行测试。如果发生了什么问题,请您帮助我们找出问题所在并解决它。

请给开发小组发送邮件至 linux-ntfs-dev@lists.sourceforge.net,告诉我们你在使用哪个版本的驱动程序,你的Linux内核版本(uname -a)和NTFS版本(Win NT、2000或XP)。

此外,如果有你认为有帮助的日志文件(/var/log/messages),请一并发给我们。

多谢。

返回页面顶部

3.5 怎样在Linux中加入对NTFS的支持?

大多数用户并不需要通过编译文件来启用对NTFS的支持。几乎每个Linux发行版(RedHat除外)都附加了对NTFS的支持。

如果你在使用的是RedHat 9(Shrike)、8.0(Psyche)或7.3(Valhalla),只需安装一个支持NTFS的rpm包。此rpm包中包括了详细的使用说明。

如果你在使用老版本的RedHat或其他不支持NTFS的发行版,就需要自己重新编译内核了。但这并不像听起来的那么困难,在编译指导页中可以找到详细的介绍。

返回页面顶部

3.6 哪个版本的驱动是最好的?

对于驱动程序来说,版本越新越好。新的版本写得更好、运行更快、错误更少并且对于对称多处理器也更加安全。新的驱动程序已经包含在版本2.5.11之后的内核中,我们也提供补丁程序向2.4内核添加此新驱动程序。

返回页面顶部

3.7 还有哪些其他的工具?

当前只有很少的一些工具并且它们都是面向程序开发者的。我们有一份所有工具的状态列表

自然,列表中的排列顺序也代表了这些工具在编写NTFS驱动代码时起到的帮助作用的大小。

返回页面顶部

3.8 Linux的NTFS驱动程序是怎样写成的?

Microsoft并没有公布任何关于NTFS内部机制的文档,所以我们必须采用逆向修改的形式研究文件系统。方法大致包括:

  1. 用十六进制编辑器观察卷内容
  2. 执行一些操作,比如创建一个文件
  3. 使用十六进制编辑器寻找产生的变化
  4. 对变化进行分类并记录
  5. 不断重复以上四个步骤

以上听起来是都是很繁琐的工作吧,这样或许你就能理解这项任务的难度了。我们现在几乎已经完全了解了NTFS并撰写了相关文档放在../ntfs/index.html,希望能对其他人有些帮助。

实际上,相对于收集相关信息来说,编写驱动程序则要简单很多了。

返回页面顶部

3.9 我们应该向谁表示感谢?

首先我们应该感谢 Martin von Loewis。早在1995年他就编写了最初的NTFS驱动程序,1997年此驱动被添加到Linux内核(2.1.74)中。同时,他也受到了以下这些人的帮助:

Albert Cahalan, Anton Altaparmakov, Damon Casale, David Dillard, Domagoj Pensa, Joseph Malicki, Matthew Fanto, Olof Wolgast, Rani Assaf, Régis Duchesne, Richard Russon, Steve Dodd, Werner Seiler.

其次我们应该感谢Anton Altaparmakov,整个项目在他的积极推动下才得以进行到现在。之前在项目没有得到有效维护时,是他接管了项目并保持了代码的稳定性。接着他又重写了整个驱动程序,为开发对写操作的支持打下了坚实的基础。他受到了以下这些人的帮助:

Pawel Kot, Richard Russon.

返回页面顶部


4. 挂载NTFS卷

4.1 我可以挂载一个NTFS卷吗?

当然可以。驱动程序支持对所有版本NTFS的读取,但仅仅是读取。

返回页面顶部

4.2 NTFS驱动程序的安全性怎样?

当仅被用于读取时,原始的和新的驱动程序对于普通应用都是安全的。他们不会对你的文件系统做出任何改变,所以也不会造成任何损害。

此外,新的驱动程序对于对称多处理器(SMP)也是安全的。

返回页面顶部

4.3 我应该使用哪个分区?

在Linux中,第一个IDE控制器上的两个磁盘被分别被称作hda和hdb,第三和第四个也相应被称为hdc和hdd。SCSI磁盘则根据它们的顺序依次命名为sda、sdb等。

一个简单的寻找NTFS卷的方法是使用:

    fdisk -l
    

输出可能如下所示:

    Disk /dev/hda: 64 heads, 63 sectors, 4465 cylinders
    Units = cylinders of 4032 * 512 bytes

       Device Boot    Start       End    Blocks   Id  System
       /dev/hda1             1      2125   4283968+  07  NTFS/HPFS
       /dev/hda2          2126     19851  35735616   0f  Win95 Ext'd (LBA)
       /dev/hda5   *      2126      4209   4201312+  83  Linux
       /dev/hda6          4210      4465    516064+  82  Linux swap
    

返回页面顶部

4.4 我在使用哪个版本的NTFS驱动程序?

如果你的内核版本号是2.4.*或者2.5.0-2.5.10,可能你正在使用最初的NTFS驱动程序。如果你有2.5.11以后版本的内核,那么你就有了新的NTFS驱动。

一个更好的方法读取内核日志中关于NTFS的日志消息。试试下面这些命令中的任意一个(可能需要root权限才能读取日志)。

    dmesg | grep -i ntfs
    grep -i ntfs /var/log/messages
    

原始驱动的版本号为1.1.*,而新驱动的版本号为2.*。

返回页面顶部

4.5 怎样挂载一个NTFS卷?

首先,你需要检查你的内核是否支持NTFS。下面的命令将会列出Linux支持的所有文件系统,如果其中有NTFS,那么一切都OK了。此外,你最好通过man 8 mount读一下关于挂载操作的指南。

    cat /proc/filesystems
    

其次你需要开辟一块空间来挂载NTFS卷,然后就可以进行挂载操作了。

    mkdir /mnt/windows
    mount /dev/hda1 /mnt/windows -t ntfs -r
    

NB 若要改变已挂载的文件系统的权限,可以参考4.6节中的umask选项。如果你希望在系统启动时自动挂载卷,可以参考4.10节

操作完成以后,你可以使用以下任何一个命令卸载分区:

    umount /mnt/windows
    umount /dev/hda1
    

NB 这些命令被称作“umount”。

返回页面顶部

4.6 常用的挂载选项。

这些挂载选项对两种驱动程序都适用。此外,我们强烈建议您阅读与挂载相关的参考文档。通用的挂载格式为:

    mount device directory [options]
    

附加选项中的-o选项可以单独给出,也可以作为参数用逗号进行分隔。下面两个命令是等价的:

    mount /dev/hda1 /mnt/windows -o X -o Y -o Z
    mount /dev/hda1 /mnt/windows -o X,Y,Z
    
-t ntfs
告诉挂载命令将要挂载的文件系统类型。这个选项并不是必须的,因为mount会自动识别大多数的文件系统。
-r
以只读形式挂载卷。挂载操作默认以可读写形式挂载卷。除非指明,否则驱动将会以只读形式自动挂载文件系统。
-o ro
和-r相同。
-o umask={VALUE}
因为安全的原因,默认给予已挂载的NTFS卷的权限为rwx------。参数umask控制这些文件和路径的权限。详细的资料和例子请参见4.9节
    mount /dev/hda1 /mnt/windows -t ntfs -r -o umask=0222
    
-o uid={USERID}
已挂载的NTFS卷上所有文件默认都是root所有的。如果提供uid参数就可以设置文件的所有者。这些参数可以是/etc/passwd中的任何用户名,或者任何表示用户id的数字。
    mount /dev/hda1 /mnt/windows -t ntfs -r -o uid=flatcap
    mount /dev/hda1 /mnt/windows -t ntfs -r -o uid=500
    
-o gid={GROUPID}
已挂载的NTFS卷上所有的文件默认都是root组所有的。如果提供gid参数就可以设置文件的组。这些参数可以是/etc/group中的组名,或者任何表示组id的数字。
    mount /dev/hda1 /mnt/windows -t ntfs -r -o gid=winusers
    mount /dev/hda1 /mnt/windows -t ntfs -r -o gid=520
    

返回页面顶部

4.7 原始驱动程序的挂载选项。

要找出你在使用的驱动类型,请参见4.4节。这一节讨论仅适用于原始驱动程序的选项,所有的常用选项都在4.6节中进行说明。

一些选项以true或false作为参数。
你可以用yes或1替换true。
也可以用no或0替换false。

-o iocharset={NAME}

NTFS以Unicode形式保存所有的文件名和路径名,这样就可以表示任何语言中的任何字符。而Linux的NTFS驱动则默认将这些名称转换为ASCII形式,这对某些人来说是合适的,但是对于那些包括 ? 或 é 等字符的语言则不合适了。

NLS(本地语言支持)决定字符是如何被显示的。你可以选择像Unicode一样可以表示所有字符的utf8,或者你自己的代码页,比如iso8859-1(西欧)、iso8859-2(中欧)、gb2312(简体中文)、iso8859-8(希伯来文)。下面是一些挂载选项的例子:

    mount /dev/hda1 /mnt/windows -t ntfs -r -o iocharset=utf8
    mount /dev/hda1 /mnt/windows -t ntfs -r -o iocharset=iso8859-2
    mount /dev/hda1 /mnt/windows -t ntfs -r -o iocharset=gb2312
    
utf8=true

如果你的内核不支持utf8,那么你可以通过这个选项启用NTFS驱动程序对utf8的支持。你应该在任何需要的地方使用选项-o iocharset=utf8

    mount /dev/hda1 /mnt/windows -t ntfs -r -o utf8=true
    
-o posix={BOOL}

Windows保存了文件名的大小写格式,但在读取时并不进行区分。因此你可以建立一个名为MyFileName的文件,然后用mYfILEname的名称打开它。

Linux默认对于大小写是敏感的,MyFile、Myfile和myfile是不同的文件。如果你希望Linux对NTFS卷具有和Windows相同的表现,那么就应将posix选项设置为true,将选项设置为false将使驱动程序具有与Linux类似的表现(默认设置)。

mount /dev/hda1 /mnt/windows -t ntfs -r -o posix=true
    
-o show_sys_files={BOOL}

如果这个选项被设置为true,那么文件系统的元数据将会处于可见状态。如若不可见,可通过提供它们的名称,比如ls -l \$MFT,使它们被显示地列出。

NB 因为glibc的局限,$MFT可能因为其inode值为0而不会被显示在列表之中。

    mount /dev/hda1 /mnt/windows -t ntfs -r -o show_sys_files=true
    

返回页面顶部

4.8 新驱动程序的挂载选项。

要找出你在使用的驱动类型,请参见4.4节。这一节只讨论适用于新驱动程序的选项,所有的常用选项都在4.6节中进行说明。

一些选项以true或false作为参数。
你可以用yes或1替换true。
也可以用no或0替换false。

-o nls={NAME}

NTFS以Unicode形式保存所有的文件名和路径名,这样就可以表示任何语言中的任何字符。而Linux的NTFS驱动则默认将这些名称转换为ASCII形式,这对某些人来说是合适的,但是对于那些包括 ? 或 é 等字符的语言则不合适了。

NLS(本地语言支持)决定字符是如何被显示的。你可以选择像Unicode一样可以表示所有字符的utf8,或者你自己的代码页,比如iso8859-1(西欧)、iso8859-2(中欧)、gb2312(简体中文)、iso8859-8(希伯来文)。下面是一些挂载选项的例子:

    mount /dev/hda1 /mnt/windows -t ntfs -r -o nls=utf8
    mount /dev/hda1 /mnt/windows -t ntfs -r -o nls=iso8859-2
    mount /dev/hda1 /mnt/windows -t ntfs -r -o nls=gb2312
    
-o fmask={VALUE}
-o dmask={VALUE}

参数umask同时改变文件和路径两者的权限,fmask以同样的方式作用于文件而dmask作用于路径,这些选项也可以被组合使用。下面是一些例子:

    mount /dev/hda1 /mnt/windows -t ntfs -r -o fmask=0222
    mount /dev/hda1 /mnt/windows -t ntfs -r -o dmask=0222
    mount /dev/hda1 /mnt/windows -t ntfs -r -o fmask=0077,dmask=0222
    
-o case_sensitive={BOOL}

Windows保存了文件名的大小写格式,但在读取时并不进行区分。因此你可以建立一个名为MyFileName的文件,然后用mYfILEname的名称打开它。

Linux默认对于大小写字母是敏感的,MyFile、Myfile和myfile是不同的文件。如果你希望Linux对于NTFS卷具有和Windows相同的表现,那么就应将case_sensitive选项设置为false。将选项设置为true将使驱动具有和Linux类似的表现(默认设置)。

    mount /dev/hda1 /mnt/windows -t ntfs -r -o case_sensitive=true
    mount /dev/hda1 /mnt/windows -t ntfs -r -o case_sensitive=false
    
-o sloppy={BOOL}

默认情况下,驱动程序在任何选项发生错误时将拒绝进行挂载,添加参数sloppy后驱动程序将完全忽略这些错误参数。

    mount /dev/hda1 /mnt/windows -t ntfs -r -o sloppy=true
    mount /dev/hda1 /mnt/windows -t ntfs -r -o sloppy=false
    
-o errors={VALUE}

这个参数控制驱动程序处理问题的方式。默认为尝试进行处理并继续执行,任何的corruption都会被标记并留待以后处理。另一种选择是让驱动程序尝试处理并进行恢复,目前驱动程序可以做的唯一恢复是用备份替换当前的启动扇区。

    mount /dev/hda1 /mnt/windows -t ntfs -r -o errors=continue
    mount /dev/hda1 /mnt/windows -t ntfs -r -o errors=recover
    

返回页面顶部

4.9 怎样改变已经挂载的NTFS卷的权限?

共有三个可以控制文件和路径的权限和所有权的选项,分别是:umask、uid和gid。它们在常用挂载选项一节中都有提及。

下面是每个选项以及它们对文件所起作用的一些例子。我们每次都会使用相同的挂载命令,并且只显示相关的选项。

    mount /dev/hda1 /mnt/windows -t ntfs -r
    

umask是对权限的过滤器,因此它的工作方式和chmod恰好相反。全部权限等价与777(rwxrwxrwx),umask值0222(-w--w--w-)则代表权限555(r-xr-xr-x)。

考虑到安全的原因,默认的umask被设置为0077。

    mount ... -o umask=0277

    -r-x------ 1 root    root    28096 Aug 24 1996 chkdsk.exe
    
    mount ... -o umask=0222

    -r-xr-xr-x 1 root    root    28096 Aug 24 1996 chkdsk.exe
    

到此为止,这些文件的所有者和所有组仍为root,下面我们将会尝试使用uid和gid选项。

    mount ... -o uid=flatcap

    -r-x------ 1 flatcap root    28096 Aug 24 1996 chkdsk.exe
    
    mount ... -o gid=winuser

    -r-x------ 1 root    winuser 28096 Aug 24 1996 chkdsk.exe
    
    mount ... -o uid=flatcap,gid=winuser

    -r-x------ 1 flatcap winuser 28096 Aug 24 1996 chkdsk.exe
    

最后我们将组合一些选项以得到精确的权限控制。下面的例子中,我们将赋予用户flatcap完全的控制权限,赋予组winuser中的用户读权限,而其他所有用户则没有任何访问权限。

    mount ... -o umask=0027,uid=flatcap,gid=winuser

    -rwxr-x--- 1 flatcap winuser 28096 Aug 24 1996 chkdsk.exe
    

返回页面顶部

4.10 怎样自动挂载一个NTFS卷?

一旦你熟悉了挂载命令,就可以通过向/etc/fstab (filesystem table)中添加指令行来告诉Linux如何自动挂载卷了。

下面是一些挂载命令的例子和等价的fstab中指令行。
NB 不必担心行尾 0 0 表示的意思。

    mount /dev/hda1 /mnt/windows -t ntfs -r

    /dev/hda1 /mnt/windows ntfs ro                                    0 0
    

这里我们将 -r 转换为等价的 -o ro。

    mount /dev/hda1 /mnt/windows -t ntfs -r -o umask=0222

    /dev/hda1 /mnt/windows ntfs ro,umask=0222                         0 0
    
    mount /dev/hda1 /mnt/windows -t ntfs -r -o umask=0222,uid=flatcap,gid=winuser

    /dev/hda1 /mnt/windows ntfs ro,umask=0222,uid=flatcap,gid=winuser 0 0
    

返回页面顶部


5. 在NTFS上启动操作系统

5.1 我可以在NTFS卷上启动Windows吗?

可以的,grub和lilo都可以从NTFS卷上启动Windows。实际的过程是Linux启动加载程序找到NTFS的启动加载程序并将控制权转给它。

返回页面顶部

5.2 我应该怎样使用lilo?

向文件/etc/lilo.conf中添加以下条目,然后重新运行lilo。

    other = /dev/hda1
        table = /dev/hda
        label = Windows
    

其中other指向包含Windows的分区而table指向磁盘的分区表。

返回页面顶部

5.3 我应该怎样使用grub?

向文件/boot/grub/grub.conf中添加以下条目。

    title Windows
        root (hd0,0)
        makeactive
        chainloader +1
    

根据grub对磁盘计数的规则,/dev/hda代表hd0,hdb代表hd1,依次类推。磁盘分区则从0开始计数,这样hda1就代表hd0,0,hdc4则代表hd2,3。

返回页面顶部


6. Linux发行版

6.1 哪个发行版附加了对NTFS的支持?

现在所知支持NTFS的Linux发行版有:MandrakeDebianSuSEGentoo、和Caldera

实际的情况是,只要发行版的名称不是RedHat,那么它就支持NTFS。

返回页面顶部

6.2 为什么RedHat不支持NTFS?

我也很想知道,据传言说这是出于法律上的原因。

返回页面顶部

6.3 为什么RedHat在访问NTFS卷时会处于锁上状态?

通过命令uname -a检查你使用的内核版本,如果版本号是2.4.9的话你就需要更新内核了。访问RedHat的网址将会得到更详细的信息。

如果你愿意的话也可以自己编译内核。阅读怎样在Linux中加入对NTFS的支持?一节会得到更详细的信息。

返回页面顶部

6.4 有可以安装在NTFS上的发行版吗?

Not quite. Phat Linux can install onto a FAT partition within Windows, then boot from the files inside Windows. The New Driver nearly has enough support for them to perform this trick using NTFS.

并不完全有。Phat Linux可以被安装在Windows内的FAT分区上,然后从Windows内部进行启动。新的驱动程序内含了充分的支持从而可以让其在NTFS分区上进行类似的启动过程。

返回页面顶部


7. 新的Linux NTFS驱动程序

7.1 新的NTFS驱动程序是什么?

它是一个完全重写的NTFS驱动。最初的驱动程序已经写了很多年了,那时候我们对NTFS或者Linux知之甚少并且程序源代码也变得很难维护。所以我们根据最新的认识编写了新的驱动程序,它更简单、运行更迅速并且也更容易维护。

返回页面顶部

7.2 我需要使用它吗?

不。当前的Linux内核中已经包含了一个NTFS驱动程序,所以你并不需要使用新的驱动。最初的驱动虽然很老了,但对于日常使用仍足以可靠地应对。

返回页面顶部

7.3 我该怎样使用新的驱动程序?

我们将新驱动作为Linux内核正式源代码补丁发布。

../downloads.html
http://www.kernel.org/pub/linux/kernel/v2.4/

返回页面顶部

7.4 什么是补丁?

补丁是对一系列文本文件所做改变的集合。我们仅仅对NTFS相关代码做出改变,因此就没有必要在每次改变时发布所有的内核代码,这也是低效率的。我们只需对正式Linux内核源代码发布补丁即可。

解开源文件之后,进入源文件路径并执行如下命令(将path和patchname替换为所需内容):

    patch -p1 < path/to/patchname
    

这将会对源文件进行修改,整个过程中应该不会发生错误或者失败。接着就是像往常一样编译内核了,这份FAQ中对此有详细说明。

返回页面顶部

7.5 如果我仍不理解呢?

非常抱歉,我们会尽可能帮助每个人,但我们自己的时间也是有限的。下面有一些站点可以帮助你了解Linux的基础知识,此外,你也可以向附近的Linux User Group寻求帮助。

返回页面顶部

7.6 什么时候Linux内核中才会收入这些新的代码?

我们要考虑到共有两个内核版本。新的驱动代码已经被收入到Linux内核开发版本中了,它是从2.5.11内核开始引入的。

而稳定的Linux内核版本,比如当前的2.4.20,仍在使用最初的驱动程序。我们对新驱动的代码感到满意,但是仍需使内核管理者相信它是有益的。

我们仍会经常发布补丁程序,直到代码被内核正式收入为止。

返回页面顶部

7.7 我们不可以对Windows 的驱动进行封装吗?

这听起来是个好主意,但是开始着手时则会遇到许多问题。

最大的技术问题是将Windows的DLL系统连接到Linux的VFS之中。问题倒是可以解决,但却不能很完美地解决。它需要作为内核的一部分运行,这也意味着如果它出了问题整个系统就会崩溃。我们没有源代码,自然也不可能很好地解决这个问题。

其次主要的问题就是稳定性。我们应该使用哪个版本的Windows系统文件呢?只针对单一的版本会限制其使用价值,使封装对所有的版本都有效则会带来编程上的恶梦。

更糟的是,发布Windows系统文件具有法律上的限制,这会带来很多问题。同样,Windows驱动程序的私有本质也决定了其他内核开发者没有办法对用户使用NTFS封装过程中出现的问题进行研究解决。

返回页面顶部