~~NOTOC~~
====== NTFS FAQ (常问问题) ======
[[ntfs-en|{{http://data.linux-ntfs.org/uk.png?30x20|English}}]]
[[ntfs-it|{{http://data.linux-ntfs.org/italy.png?30x20|Italian}}]]
[[ntfs-ja|{{http://data.linux-ntfs.org/japan.png?30x20|Japanese}}]]
[[ntfs-vi|{{http://data.linux-ntfs.org/vietnam.png?30x20|Vietnamese}}]]
[[ntfs-de|{{http://data.linux-ntfs.org/germany.png?30x20|German}}]]
[[ntfs-zh|{{http://data.linux-ntfs.org/china.png?30x20|Simplified Chinese}}]]
[[ntfs-fr|{{http://data.linux-ntfs.org/france.png?30x20|French}}]]
[[ntfs-es|{{http://data.linux-ntfs.org/spain.png?30x20|Spanish}}]]
[[ntfs-pt_BR|{{http://data.linux-ntfs.org/brazil.png?30x20|Brazilian}}]]
[[ntfs-zh_TW|{{http://data.linux-ntfs.org/taiwan.png?30x20|Traditional Chinese}}]]
[[ntfs-ru|{{http://data.linux-ntfs.org/russia.png?30x20|Russian}}]]
这份FAQ是
[[http://linux-ntfs.org|Linux NTFS计划]]
的一部分。
最新的版本可以通过访问
[[http://wiki.linux-ntfs.org/doku.php?id=faq]]
获得。
如果这份FAQ没有回答你的关于NTFS的问题,或者你对这份FAQ有什么意见,请发邮件给我:
[[http://forum.linux-ntfs.org]]
中文版由kelvin翻译,如果对翻译有什么意见,请发邮件至:
[[zhangyc@zju.edu.cn]]。
===== 关键字 =====
{{http://data.linux-ntfs.org/blue.png?16x16}} - 最经常问到的问题\\
{{http://data.linux-ntfs.org/green.png?16x16}} - 其他有意思的东东\\
{{http://data.linux-ntfs.org/red.png?16x16}} - 需要特别注意的
命令或
者输出
===== 内容 =====
** 1. NTFS常见问题 **
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#1.1 什么是NTFS?|1.1 什么是NTFS?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#1.2 NTFS比FAT/FAT32好吗?|1.2 NTFS比FAT/FAT32好吗?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#1.3 我需要使用或者升级到NTFS吗?|1.3 我需要使用或者升级到NTFS吗?]] |
| {{http://data.linux-ntfs.org/green.png?16x16}} | [[#1.4 每一版本Windows中的NTFS都一样吗?|1.4 每一版本Windows中的NTFS都一样吗?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#1.5 NTFS的局限性是什么?|1.5 NTFS的局限性是什么?]] |
** 2. NTFS卷 **
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#2.1 怎样从Windows 95/98/ME或DOS中读取一个NTFS卷?|2.1 怎样从Windows 95/98/ME或DOS中读取一个NTFS卷?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#2.2 怎样将FAT卷转换为NTFS卷?|2.2 怎样将FAT卷转换为NTFS卷?]] |
| {{http://data.linux-ntfs.org/green.png?16x16}} | [[#2.3 怎样将NTFS卷转换为FAT卷?|2.3 怎样将NTFS卷转换为FAT卷?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#2.4 怎样删除一个NTFS卷?|2.4 怎样删除一个NTFS卷?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#2.5 怎样对NTFS卷进行碎片整理?|2.5 怎样对NTFS卷进行碎片整理?]] |
| {{http://data.linux-ntfs.org/blue.png?16x16}} | [[#2.6 怎样调整一个NTFS卷的大小?|2.6 怎样调整一个NTFS卷的大小?]] |
** 3. Linux和NTFS **
| {{http://data.linux-ntfs.org/green.png?16x16}} | [[#3.1 Linux可以读取那些版本的NTFS?|3.1 Linux可以读取那些版本的NTFS?]] |
| {{http://data.linux-ntfs.org/blue.png?16x16}} | [[#3.2 驱动程序支持写入NTFS卷吗?|3.2 驱动程序支持写入NTFS卷吗?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#3.3 Linux支持NTFS的哪些特性?|3.3 Linux支持NTFS的哪些特性?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#3.4 如果出现问题我应该怎么做?|3.4 如果出现问题我应该怎么做?]] |
| {{http://data.linux-ntfs.org/blue.png?16x16}} | [[#3.5 怎样在Linux中加入对NTFS的支持?|3.5 怎样在Linux中加入对NTFS的支持?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#3.6 哪个版本的驱动是最好的?|3.6 哪个版本的驱动是最好的?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#3.7 还有哪些其他的工具?|3.7 还有哪些其他的工具?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#3.8 Linux的NTFS驱动程序是怎样写成的?|3.8 Linux的NTFS驱动程序是怎样写成的?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#3.9 我们应该向谁表示感谢?|3.9 我们应该向谁表示感谢?]] |
** 4. 挂载NTFS卷 **
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#4.1 我可以挂载一个NTFS卷吗?|4.1 我可以挂载一个NTFS卷吗?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#4.2 NTFS驱动程序的安全性怎样?|4.2 NTFS驱动程序的安全性怎样?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#4.3 我应该使用哪个分区?|4.3 我应该使用哪个分区?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#4.4 我在使用哪个版本的NTFS驱动程序?|4.4 我在使用哪个版本的NTFS驱动程序?]] |
| {{http://data.linux-ntfs.org/green.png?16x16}} | [[#4.5 怎样挂载一个NTFS卷?|4.5 怎样挂载一个NTFS卷?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#4.6 常用的挂载选项。|4.6 常用的挂载选项。]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#4.7 原始驱动程序的挂载选项。|4.7 原始驱动程序的挂载选项。]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#4.8 新驱动程序的挂载选项。|4.8 新驱动程序的挂载选项。]] |
| {{http://data.linux-ntfs.org/blue.png?16x16}} | [[#4.9 怎样改变已经挂载的NTFS卷的权限?|4.9 怎样改变已经挂载的NTFS卷的权限?]] |
| {{http://data.linux-ntfs.org/green.png?16x16}} | [[#4.10 怎样自动挂载一个NTFS卷?|4.10 怎样自动挂载一个NTFS卷?]] |
** 5. 在NTFS上启动操作系统 **
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#5.1 我可以在NTFS卷上启动Windows吗?|5.1 我可以在NTFS卷上启动Windows吗?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#5.2 我应该怎样使用lilo?|5.2 我应该怎样使用lilo?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#5.3 我应该怎样使用grub?|5.3 我应该怎样使用grub?]] |
** 6. Linux发行版 **
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#6.1 哪个发行版附加了对NTFS的支持?|6.1 哪个发行版附加了对NTFS的支持?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#6.2 为什么RedHat不支持NTFS?|6.2 为什么RedHat不支持NTFS?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#6.3 为什么RedHat在访问NTFS卷时会处于锁上状态?|6.3 为什么RedHat在访问NTFS卷时会处于锁上状态?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#6.4 有可以安装在NTFS上的发行版吗?|6.4 有可以安装在NTFS上的发行版吗?]] |
** 7. 新的Linux NTFS驱动程序 **
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#7.1 新的NTFS驱动程序是什么?|7.1 新的NTFS驱动程序是什么?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#7.2 我需要使用它吗?|7.2 我需要使用它吗?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#7.3 我该怎样使用新的驱动程序?|7.3 我该怎样使用新的驱动程序?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#7.4 什么是补丁?|7.4 什么是补丁?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#7.5 如果我仍不理解呢?|7.5 如果我仍不理解呢?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#7.6 什么时候Linux内核中才会收入这些新的代码?|7.6 什么时候Linux内核中才会收入这些新的代码?]] |
| {{http://data.linux-ntfs.org/clear.png?16x16}} | [[#7.7 我们不可以对Windows 的驱动进行封装吗?|7.7 我们不可以对Windows 的驱动进行封装吗?]] |
[[#top|返回页面顶部]]
====== 1. NTFS常见问题 ======
===== 1.1 什么是NTFS? =====
NTFS是New Technology Filesystem的缩写。称作NT是因为它最初是用在Window NT上的,文件系统则表示电脑在磁盘上存储文件的方式。不同的操作系统一般使用 不同的方式存储文件。
NTFS通常用于Windows NT、2000和XP系统。
[[#top|返回页面顶部]]
===== 1.2 NTFS比FAT/FAT32好吗? =====
简单的说,是的。NTFS更健壮,它支持双字节编码文件名以及适当的安全、压缩和加密。它主要的不足之处在于只能在Windows NT、2000或XP系统下进行读取,比如用户不能用DOS启动盘启动然后读取NTFS上的数据。
和往常一样,这个规则也有例外存在。早在1997年10月就有了Linux下的NTFS驱动程序,同样也有程序支持DOS下对NTFS的操作(
[[#2.1 怎样从Windows 95/98/ME或DOS中读取一个NTFS卷?|2.1节]]
对此有详细介绍)。
[[#top|返回页面顶部]]
===== 1.3 我需要使用或者升级到NTFS吗? =====
不,你并不需要,虽然这对于绝大多数人来说是一个不错的主意。你甚至可能察觉不到两者性能上的差别,唯一的缺点是你不能再将其转回FAT格式了(
[[#2.3 怎样将NTFS卷转换为FAT卷?|2.3节]]
对此有详细介绍)。
{{http://data.linux-ntfs.org/red.png?16x16}}
你可以在FAT16文件系统上安装Windows NT,在FAT32文件系统上安装Windows 2000或XP,然后再可以升级到NTFS。
[[#top|返回页面顶部]]
===== 1.4 每一版本Windows中的NTFS都一样吗? =====
不,它们看起来很相似,但新的版本总有一些附加的特性。比如,Windows 2000就有磁盘配额(quotas)。
^ NTFS ^ Windows Version ^
| v1.2 | NT 3.51, NT 4 |
| v3.0 | 2000 |
| v3.1 | XP, Server 2003 |
1.2版本有时被称作NT4.0。\\
3.0和3.1版本则被称作NT5.0和5.1。
[[#top|返回页面顶部]]
===== 1.5 NTFS的局限性是什么? =====
容量大小。NTFS支持最大为263字节的文件。NTFS卷最多可包括263个簇且每个簇最大可为64KB,这样它的最大容量就是约500万亿GB。
[[#top|返回页面顶部]]
====== 2. NTFS卷 ======
===== 2.1 怎样从Windows 95/98/ME或DOS中读取一个NTFS卷? =====
很可惜,这是不可以的。这些版本的Windows只支持FAT,NTFS只可以从Windows NT、2000和XP中进行读取。
但是,只要稍微费些功夫,你就可以从
[[http://sysinternal.com]]
得到 "NTFS for Windows 98" 和 "NTFSDOS" 两个工具,这样就以在Windows 95、98和DOS中对NTFS进行读取。如果你愿意付费的话,他们甚至可以提供支持写入NTFS的版本(但这是非常昂贵的)。
[[#top|返回页面顶部]]
===== 2.2 怎样将FAT卷转换为NTFS卷? =====
打开一个命令窗口并输入(将x:替换为正确的卷标)
convert x: /fs:ntfs
如果该卷正在使用中,转换将会在下次系统启动时进行。
{{http://data.linux-ntfs.org/red.png?16x16}}
此命令不支持逆向操作,详情请见下个FAQ。
[[#top|返回页面顶部]]
===== 2.3 怎样将NTFS卷转换为FAT卷? =====
简单的说,这样是不可以的,当然如果你有足够的钱的话也有例外。
[[http://www.powerquest.com]]
出品的Partition Magic支持在不同的文件系统间进行转换,其中就包括NTFS和FAT。
[[#top|返回页面顶部]]
===== 2.4 怎样删除一个NTFS卷? =====
这依赖于你使用的操作系统。
DOS、Windows 95/98/ME: fdisk。使用启动盘启动系统,或者让Windows返回到DOS模式,然后运行fdisk。如果有多个磁盘,先选择磁盘,然后删除那些非DOS分区。操作时一定要特别小心,任何改变都会被立即提交并执行。
Windows NT: 计算机管理。
Windows 2000、XP: 逻辑磁盘管理器。从控制面板中开始,选择管理工具,然后选择计算机管理。
[[#top|返回页面顶部]]
===== 2.5 怎样对NTFS卷进行碎片整理? =====
当一个卷使用了很长时间,或者对磁盘进行过多次写入之后,保存在其中的文件可能变得支离破碎了。这些文件不再以一种连续的形式保存在磁盘上,而是被分成了很多小的部分,这样就减慢了访问文件的速度。
为此,Windows 2000和XP系统内置了磁盘碎片整理程序。而对于Windows NT的用户来说,也有免费的工具可以完成同样的工作,这就是Diskeeper Lite,它可以从
[[http://diskeeper.com]]
下载得到。
[[#top|返回页面顶部]]
===== 2.6 怎样调整一个NTFS卷的大小? =====
直到最近,唯一可以调整NTFS卷的大小而不造成数据损失的程序仍旧是很昂贵的。现在,我们有了自己的程序-**ntfsresize**。我们已经对其做了很多测试,但目前仍处于试验阶段。如果你想得到更详细的信息,请参阅
[[http://mlf.linux.rulez.org/mlf/ezaz/ntfsresize.html|ntfsresize FAQ]]。
[[http://powerquest.com]]
出品的Partition Magic仍是仅有的可以调整NTFS卷大小的商业程序。
[[#top|返回页面顶部]]
====== 3. Linux和NTFS ======
===== 3.1 Linux可以读取那些版本的NTFS? =====
Linux驱动程序可以读取
[[#1.4 每一版本Windows中的NTFS都一样吗?|所有版本的NTFS]]
。每个版本的NTFS都稍微有些差别,但是驱动程序仅需要对文件和路径进行解释,NTFS维护的所有索引记录都被安全地忽略了。
当驱动程序支持对一个NTFS卷进行写操作时,这种能力也会随着它所写入的NTFS版本的不同发生变化。
[[#top|返回页面顶部]]
===== 3.2 驱动程序支持写入NTFS卷吗? =====
并不完全是,但是如果你需要在装有双系统机器的上从Linux向Windows拷贝文件的话,请阅读下面的怎样写入NTFS
部分,那里你将会找到一种在缺少写入支持的情况下解决问题的方法。
目前我们共有两个驱动程序,2.4内核中的原始驱动程序包含一些执行写入操作的代码,但是执行它们将会是非常危险的,极有可能彻底破坏你的文件系统。
2.5.11内核中引入的新驱动程序也包含一些执行写入操作的代码,但却是非常有限的。它可以覆写现存的文件,但不可以改变文件大小、添加新文件或者删除文件。
添加对写操作的支持将耗费**很长的时间**。NTFS的结构和数据库很相似,基于一致性的考虑,用户做出的每个改变都可能带来其他的很多改变。一个错误可能对文件系统造成损害,很多错误则会彻底破坏整个文件系统。此外,目前的开发人员也只是出于个人爱好在空闲时间从事NTFS驱动的开发。如果你愿意帮助我们,请发邮件给我:
[[linux-ntfs-dev@lists.sourceforge.net]]。
**怎样写入NTFS。**如果你在使用装有双系统的机器并且只需要对NTFS写操作的支持来从Linux向Windows转移文件,你可以通过使用Windows下的ext2/ext3驱动程序从Linux分区中读取文件来代替。这种方式只需使用两个只读的驱动,并且仍旧可以从一个文件系统向另一个拷贝文件。
截至2003年6月4日,共有以下这些开源的支持Linux ext2和ext3文件系统的Windows驱动程序:
* **explore2fs**
* 主页:[[http://uranus.it.swin.edu.au/~jn/linux/explore2fs.htm]]
* 适用于Windows NT、Windows 2000和Windows XP。
* **ext2fsd**
* 主页:[[http://ext2fsd.sourceforge.net]]
* 适用于Windows NT、Windows 2000和Windows XP。
* **winext2fsd**
* 主页:[[http://sourceforge.net/projects/winext2fsd|winext2fsd project page]]
* [[http://sourceforge.net/forum/forum.php?thread_id=787262&forum_id=220066|据称]]适用于Windows NT和Windows XP,同样也可用于Windows 2000。
* **ext2forxp**
* 主页:[[http://sourceforge.net/projects/ext2forxp]]
* 还处于早期开发阶段,没有进入实用(到2003年6月4日)。
* **vmware**
* 主页:[[http://www.vmware.com]]
* VMWare允许你在在一个系统中完全运行其他操作系统。
* 所以,你可以在Linux中运行Windows,自然也可以写入NTFS了。
* 这种写入操作就像你在运行的Windows一样安全,但同样也很昂贵。
[[#top|返回页面顶部]]
===== 3.3 Linux支持NTFS的哪些特性? =====
NTFS支持极其众多的特性,但是Linux NTFS驱动程序实现的却很少。
Linux NTFS驱动程序支持Unicode文件名、压缩文件和稀疏文件。
但是,此驱动不能读取加密后的文件,它忽略了Windows的安全信息和Windows设置的磁盘配额。
[[#top|返回页面顶部]]
===== 3.4 如果出现问题我应该怎么做? =====
此驱动对于只读操作是
[[#4.2 NTFS驱动程序的安全性怎样?|非常安全]]
的,但我们不可能对每个可能性都进行测试。如果发生了什么问题,请您帮助我们找出问题所在并解决它。
请给开发小组发送邮件至
[[linux-ntfs-dev@lists.sourceforge.net]]
,告诉我们你在使用
[[#4.4 我在使用哪个版本的NTFS驱动程序?|哪个版本的驱动程序]]
,你的Linux内核版本(uname -a)和NTFS版本(Win NT、2000或XP)。
此外,如果有你认为有帮助的日志文件(/var/log/messages),请一并发给我们。
多谢。
[[#top|返回页面顶部]]
===== 3.5 怎样在Linux中加入对NTFS的支持? =====
大多数用户并不需要通过编译文件来启用对NTFS的支持。几乎每个Linux发行版(RedHat除外)都附加了对NTFS的支持。
如果你在使用的是RedHat 9(Shrike)、8.0(Psyche)或7.3(Valhalla),只需
[[http://www.linux-ntfs.org/content/view/120/59|安装一个支持NTFS的rpm包]]
。此rpm包中包括了详细的使用说明。
如果你在使用老版本的RedHat或其他不支持NTFS的发行版,就需要自己重新编译内核了。但这并不像听起来的那么困难,在
[[:compile|编译指导页]]
中可以找到详细的介绍。
[[#top|返回页面顶部]]
===== 3.6 哪个版本的驱动是最好的? =====
对于驱动程序来说,版本越新越好。新的版本写得更好、运行更快、错误更少并且对于对称多处理器也更加安全。新的驱动程序已经包含在版本2.5.11之后的内核中,我们也提供
[[http://www.linux-ntfs.org/content/view/19/37|补丁程序]]
向2.4内核添加此新驱动程序。
[[#top|返回页面顶部]]
===== 3.7 还有哪些其他的工具? =====
当前只有很少的一些工具并且它们都是面向程序开发者的。我们有一份所有工具的
[[http://www.linux-ntfs.org/content/view/15/29|状态列表]]。
自然,列表中的排列顺序也代表了这些工具在编写NTFS驱动代码时起到的帮助作用的大小。
[[#top|返回页面顶部]]
===== 3.8 Linux的NTFS驱动程序是怎样写成的? =====
Microsoft并没有公布任何关于NTFS内部机制的文档,所以我们必须采用逆向修改的形式研究文件系统。方法大致包括:
- 用十六进制编辑器观察卷内容
- 执行一些操作,比如创建一个文件
- 使用十六进制编辑器寻找产生的变化
- 对变化进行分类并记录
- 不断重复以上四个步骤
以上听起来是都是很繁琐的工作吧,这样或许你就能理解这项任务的难度了。我们现在几乎已经完全了解了NTFS并撰写了相关文档放在
[[http://www.linux-ntfs.org/content/view/103/42]]
,希望能对其他人有些帮助。
实际上,相对于收集相关信息来说,编写驱动程序则要简单很多了。
[[#top|返回页面顶部]]
===== 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.
[[#top|返回页面顶部]]
====== 4. 挂载NTFS卷 ======
===== 4.1 我可以挂载一个NTFS卷吗? =====
当然可以。驱动程序支持对所有版本NTFS的读取,但仅仅是读取。
[[#top|返回页面顶部]]
===== 4.2 NTFS驱动程序的安全性怎样? =====
当仅被用于读取时,原始的和新的驱动程序对于普通应用都是安全的。他们**不会**对你的文件系统做出任何改变,所以也不会造成任何损害。
此外,新的驱动程序对于对称多处理器(SMP)也是安全的。
[[#top|返回页面顶部]]
===== 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
[[#top|返回页面顶部]]
===== 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.*。
[[#top|返回页面顶部]]
===== 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
{{http://data.linux-ntfs.org/red.png?16x16}}
若要改变已挂载的文件系统的权限,可以参考
[[#4.6 常用的挂载选项。|4.6节]]
中的umask选项。如果你希望在系统启动时自动挂载卷,可以参考
[[#4.10 怎样自动挂载一个NTFS卷?|4.10节]]。
操作完成以后,你可以使用以下任何一个命令卸载分区:
umount /mnt/windows
umount /dev/hda1
{{http://data.linux-ntfs.org/red.png?16x16}}
这些命令被称作"umount"。
[[#top|返回页面顶部]]
===== 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 怎样改变已经挂载的NTFS卷的权限?|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
[[#top|返回页面顶部]]
===== 4.7 原始驱动程序的挂载选项。 =====
要找出你在使用的驱动类型,请参见
[[#4.4 我在使用哪个版本的NTFS驱动程序?|4.4节]]
。这一节讨论仅适用于原始驱动程序的选项,所有的常用选项都在
[[#4.6 常用的挂载选项。|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
== -o 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,使它们被显示地列出。
{{http://data.linux-ntfs.org/red.png?16x16}}
因为glibc的局限,$MFT可能因为其inode值为0而不会被显示在列表之中。
mount /dev/hda1 /mnt/windows -t ntfs -r -o show_sys_files=true
[[#top|返回页面顶部]]
===== 4.8 新驱动程序的挂载选项。 =====
要找出你在使用的驱动类型,请参见
[[#4.4 我在使用哪个版本的NTFS驱动程序?|4.4节]]
。这一节只讨论适用于新驱动程序的选项,所有的常用选项都在
[[#4.6 常用的挂载选项。|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
[[#top|返回页面顶部]]
===== 4.9 怎样改变已经挂载的NTFS卷的权限? =====
共有三个可以控制文件和路径的权限和所有权的选项,分别是:umask、uid和gid。它们在
[[#4.6 常用的挂载选项。|常用挂载选项]]
一节中都有提及。
下面是每个选项以及它们对文件所起作用的一些例子。我们每次都会使用相同的挂载命令,并且只显示相关的选项。
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
[[#top|返回页面顶部]]
===== 4.10 怎样自动挂载一个NTFS卷? =====
一旦你熟悉了挂载命令,就可以通过向/etc/fstab (**f**ile**s**ystem **tab**le)中添加指令行来告诉Linux如何自动挂载卷了。
下面是一些挂载命令的例子和等价的fstab中指令行。\\
{{http://data.linux-ntfs.org/red.png?16x16}}
不必担心行尾 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
[[#top|返回页面顶部]]
====== 5. 在NTFS上启动操作系统 ======
===== 5.1 我可以在NTFS卷上启动Windows吗? =====
可以的,grub和lilo都可以从NTFS卷上启动Windows。实际的过程是Linux启动加载程序找到NTFS的启动加载程序并将控制权转给它。
[[#top|返回页面顶部]]
===== 5.2 我应该怎样使用lilo? =====
向文件/etc/lilo.conf中添加以下条目,然后重新运行lilo。
other = /dev/hda1
table = /dev/hda
label = Windows
其中other指向包含Windows的分区而table指向磁盘的分区表。
[[#top|返回页面顶部]]
===== 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。
[[#top|返回页面顶部]]
====== 6. Linux发行版 ======
===== 6.1 哪个发行版附加了对NTFS的支持? =====
现在所知支持NTFS的Linux发行版有:
[[http://www.mandrake.com|Mandrake]]、
[[http://www.debian.org|Debian]]、
[[http://www.suse.com|SuSE]]、
[[http://www.gentoo.org|Gentoo]]、
[[http://www.lindows.com|Lindows]]
和
[[http://www.caldera.com|Caldera]]。
实际的情况是,只要发行版的名称不是RedHat,那么它就支持NTFS。
[[#top|返回页面顶部]]
===== 6.2 为什么RedHat不支持NTFS? =====
我也很想知道,据传言说这是出于法律上的原因。
[[#top|返回页面顶部]]
===== 6.3 为什么RedHat在访问NTFS卷时会处于锁上状态? =====
通过命令uname -a检查你使用的内核版本,如果版本号是2.4.9的话你就需要更新内核了。访问
[[http://www.redhat.com|RedHat的网址]]
将会得到更详细的信息。
如果你愿意的话也可以自己编译内核。阅读
[[#3.5 怎样在Linux中加入对NTFS的支持?|3.5 怎样在Linux中加入对NTFS的支持?]]
一节会得到更详细的信息。
[[#top|返回页面顶部]]
===== 6.4 有可以安装在NTFS上的发行版吗? =====
Not quite.
[[http://phatlinux.com|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.__
并不完全有。
[[http://phatlinux.com|Phat Linux]]
可以被安装在Windows内的FAT分区上,然后从Windows内部进行启动。新的驱动程序内含了充分的支持从而可以让其在NTFS分区上进行类似的启动过程。
[[#top|返回页面顶部]]
====== 7. 新的Linux NTFS驱动程序 ======
===== 7.1 新的NTFS驱动程序是什么? =====
它是一个完全重写的NTFS驱动。最初的驱动程序已经写了很多年了,那时候我们对NTFS或者Linux知之甚少并且程序源代码也变得很难维护。所以我们根据最新的认识编写了新的驱动程序,它更简单、运行更迅速并且也更容易维护。
[[#top|返回页面顶部]]
===== 7.2 我需要使用它吗? =====
不。当前的Linux内核中已经包含了一个NTFS驱动程序,所以你并不需要使用新的驱动。最初的驱动虽然很老了,但对于日常使用仍足以可靠地应对。
[[#top|返回页面顶部]]
===== 7.3 我该怎样使用新的驱动程序? =====
我们将新驱动作为
[[http://www.kernel.org/pub/linux/kernel/v2.4|Linux内核正式源代码]]
的
[[http://www.linux-ntfs.org/content/view/19/37|补丁]]
发布。
[[http://www.linux-ntfs.org/content/view/19/37]]\\
[[http://www.kernel.org/pub/linux/kernel/v2.4]]
[[#top|返回页面顶部]]
===== 7.4 什么是补丁? =====
补丁是对一系列文本文件所做改变的集合。我们仅仅对NTFS相关代码做出改变,因此就没有必要在每次改变时发布所有的内核代码,这也是低效率的。我们只需对正式Linux内核源代码发布补丁即可。
解开源文件之后,进入源文件路径并执行如下命令(将path和patchname替换为所需内容):
patch -p1 < path/to/patchname
这将会对源文件进行修改,整个过程中应该不会发生错误或者失败。接着就是像往常一样编译内核了,这份FAQ中对此有详细说明。
[[#top|返回页面顶部]]
===== 7.5 如果我仍不理解呢? =====
非常抱歉,我们会尽可能帮助每个人,但我们自己的时间也是有限的。下面有一些站点可以帮助你了解Linux的基础知识,此外,你也可以向附近的Linux User Group寻求帮助。
* [[http://www.justlinux.com|Just Linux]]
* [[http://tldp.org|The Linux Documentation Project]]
* [[http://tldp.org/HOWTO/Kernel-HOWTO.html|The Linux Kernel HOWTO]]
* [[http://www.linux.org/groups/index.html|Linux User Groups]]
[[#top|返回页面顶部]]
===== 7.6 什么时候Linux内核中才会收入这些新的代码? =====
我们要考虑到共有两个内核版本。新的驱动代码已经被收入到Linux内核开发版本中了,它是从2.5.11内核开始引入的。
而稳定的Linux内核版本,比如当前的2.4.20,仍在使用最初的驱动程序。我们对新驱动的代码感到满意,但是仍需使内核管理者相信它是有益的。
我们仍会经常发布补丁程序,直到代码被内核正式收入为止。
[[#top|返回页面顶部]]
===== 7.7 我们不可以对Windows 的驱动进行封装吗? =====
这听起来是个好主意,但是开始着手时则会遇到许多问题。
最大的技术问题是将Windows的DLL系统连接到Linux的VFS之中。问题倒是可以解决,但却不能很完美地解决。它需要作为内核的一部分运行,这也意味着如果它出了问题整个系统就会崩溃。我们没有源代码,自然也不可能很好地解决这个问题。
其次主要的问题就是稳定性。我们应该使用哪个版本的Windows系统文件呢?只针对单一的版本会限制其使用价值,使封装对所有的版本都有效则会带来编程上的恶梦。
更糟的是,发布Windows系统文件具有法律上的限制,这会带来很多问题。同样,Windows驱动程序的私有本质也决定了其他内核开发者没有办法对用户使用NTFS封装过程中出现的问题进行研究解决。
[[#top|返回页面顶部]]