NTFS FAQ (Frequently Asked Questions)

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

這份 FAQ 是 Linux NTFS Project 的一部分
最新版可在 ntfs.html 取得.

如果你有關於 NTFS 的問題無法在這得到解答, 或對這份 FAQ 有任何意見, 請 email 至 linux-ntfs-dev@sourceforge.net 給我.

正體中文版由 Eric 翻譯, 對翻譯有任何意見, 請 email 至 vingtaine ~ yahoo ~ com.

內容

說明

** - 最常問到的問題
!! - 其他有趣的東西
NB - 請特別注意

 指 令 或 輸出結果

1. 一般 NTFS 問題

  1.1 什麼是 NTFS?
  1.2 NTFS 比 FAT/FAT32 好嗎?
  1.3 我需要使用 NTFS 嗎? (或升級)
!! 1.4 NTFS 在每個版本的 Windows 都相同嗎?
  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 如何將 NTFS 的支援加入 Linux 呢?
  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 那個 linux 版本有原生的 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 File System 的縮寫. NT 是因為最初是在 Windows NT 上使用, File System, 檔案系統是電腦在磁碟上儲存檔案的方法. 不同的作業系統會用不同的方式儲存檔案.

NTFS 用於 Windows NT, 2000, XP 和 Windows Server 2003.

回頁首

1.2 NTFS 比 FAT/FAT32 好嗎?

簡單的說, 是的. NTFS 的檔案系統非常不易被損害,  它支援 Unicode 檔名, 有適當的安全性, 壓縮和加密. 主要的缺點是你只能在 Windows NT, 2000 或 XP 下讀取, 你無法使用 DOS 軟碟開機, 然後讀取資料.

所有規則皆有例外, Linux 在 1997 年 12 月時就有了 NTFS 的驅動程式, 同樣也有支援 DOS NTFS 的程式 ( 2.1 節 有詳細介紹).

回頁首

1.3 我需要使用 NTFS 嗎? (或升級)

不, 不一定需要, 雖然對大多數的人這是個好主意. 你也許不會注意到有差別. 唯一的缺點是你無法再轉換回 FAT (2.3 節 有詳細說明).

NB 你可以在 FAT16 格式的磁區上安裝 Windows NT, 在 FAT32 上安裝 Windows 2000 或 XP, 之後再升級到 NTFS.

回頁首

1.4 NTFS 在每個版本的 Windows 都相同嗎?

不是. 他們看起來很相似, 但新的版本有多加的功能. 例如 Windows 2000 有磁碟限額.

NTFS Windows 版本
v1.2 NT 3.51, NT 4
v3.0 2000
v3.1 XP, Server 2003

1.2 版有時稱 4.0 版.
3.0 和 3.1 版有時稱 5.0 和 5.1 版.

回頁首

1.5 NTFS 的限制是什麼?

容量大. NTFS 支援最大 263 位元組的檔案. NTFS 磁區可有最多 263 單位, 每個單位最大為 64KB. 如此 NTFS 的上限約為 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 格式?

開啟一個指令 xxxxxx 並輸入 (將 x: 換成正確的磁區代碼):

    convert x: /fs:ntfs

如果該磁區正在使用中, 下次重開機時才會進行轉換.

NB 這個指令不可反向使用, 詳見下個 FAQ.

回頁首

2.3 如何將 NTFS 格式轉換成 FAT 格式?

簡單說, "不行". 但如果你願意付費的話也有例外. norton.com 的 Partition Magic 能在數個檔案系統間進行轉換, 包含 NTFS 和 FAT.

回頁首

2.4 如何刪除 NTFS 磁區?

視你的作業系統而定.

DOS, Windows 95/98/ME: fdisk. 使用軟碟開機, 或在 Windows 開機時進入 DOS 模式. 然後執行 fdisk. 如果你有多個磁區, 先選擇磁區, 然後刪除非 DOS 的部分. 要小心, 你的任何變更都會馬上被執行.

Windows NT: 管理.

Windows 2000, XP 和 Server 2003: 磁碟管理. 從控制台, 選系統管理工具, 然後選電腦管理.

回頁首

2.5 如何重組 NTFS 磁區?

在一個磁區使用了一陣子, 多次寫入磁碟之後, 裡面的檔案可能是一塊一塊的, 不連續地, 分成很多小部分存在於磁碟上. 這會減慢存取那些檔案的速度.

Windows 2000, XP 和 Server 2003 都有內建的磁碟重組工具. Windows NT 的使用者, 也有一個免費的工具且完成相同的工作. "Diskeeper Lite " , 可以在 http://diskeeper.com 下載.

回頁首

2.6 如何調整 NTFS 磁區的大小?

使用我們穩定且廣泛被使用的程式, ntfsresize. 或更好的, 任一個整合這功能又簡易使用的磁碟分割工具 (DiskDrake, QTParted, YAST, EVMS, Partman, GParted, 等). 詳情請看 ntfsresize FAQ.

回頁首


3. Linux 和 NTFS

3.1 Linux 可以讀取那些版本的 NTFS 格式呢?

 這個 Linux 驅動程式可以讀取所有 NTFS 的版本. 每個版本的 NTFS 都有些微不同, 但驅動程式只需對檔案和目錄加以解釋處理. 而 NTFS 所維護的索引檔都安全地被忽略了.

當驅動程式支援對 NTFS 的寫入時, 寫入的能力會因 NTFS 版本而有不同.

回頁首

3.2 這個驅動程式也支援寫入 NTFS 磁區嗎?

不完全是, 但如果你只需要在有雙系統的機器上從 Linux 複製檔案到 Windows,  請讀以下 "如何寫入 NTFS 磁區" 部分, 你會找到一個在缺少寫入支援的情況下的解決方案. 請繼續閱讀 Linux 的 NTFS 寫入支援.

目前我們有兩個驅動程式. 原始的驅動程式, 在 2.4 核心中有部份的支援寫入的程式碼, 但使用這個來寫入是非常危險的, 有極高的危險性會摧毀你的檔案系統.

2.5.11 核心引進的新的驅動程式, 有部分支援寫入的程式碼, 但非常有限. 這個驅動程式可以抹寫已存在的檔案, 但它無法改變檔案大小, 新增或刪除現有檔案.

增加寫入的支援需耗費很長的時間. NTFS 的結構和資料庫類似. 基於一致性的考量, 任何一個變更都需要在很多其他地方作改變. 任何一的錯誤都會損壞檔案系統, 過多的錯誤會摧毀整個檔案系統. 此外, 目前的研發人員都是基於興趣, 在空閒時間投入 NTFS 的研發. 如果你願意幫忙, 請 email 至: linux-ntfs-dev@sourceforge.net

如何寫入 NTFS 磁區. 如果你使用有雙系統的機器, 只是需要 NTFS 寫入支援從 Linux 傳檔到 Windows, 你可以使用讀取 ext2/ext3 的 windows 驅動程式, 在執行 Windows 時, 從 Linux 磁區讀取檔案. 如此, 使用兩個只支援讀取的驅動程式, 你還是可以從一個磁區複製檔案到另一個磁區.

截至 2003 年 6 月 4 日, 有以下開放原碼支援 ext 2 和 ext3 的 Linux 檔案系統的 Windows 驅動程式:

回頁首

3.3 Linux 支援那些 NTFS 的功能呢?

NTFS 有非常多功能, 但 Linux NTFS 驅動程式支援的很少.

Linux NTFS 驅動程式支援: Unicode 檔名 (轉換成本機的編碼, 或 utf8); 壓縮檔; 稀疏文件.

但是, 這個驅動程式無法讀取加密的檔案, 它忽略了 Windows 的安全資訊和容量限制.

回頁首

3.4 出現問題時我該如何?

這個驅動程式再讀取方面是非常安全的, 但是我們無法對每個可能性作測試. 如過發生了任何問題, 請幫助我們找到並解決問題.

請 email: linux-ntfs-dev@lists.sourceforge.net 給研發小組, 並告訴我們你使用的是那 個版本的驅動程式, Linux 的版本 (uname -a), 還有 NTFS 的版本 (Win NT, 2K 或 XP).

此外, 如果有任何你覺得有用的紀錄檔 (/var/log/messages), 請一併寄給我們.

謝謝.

回頁首

3.5 如何將 NTFS 的支援加入 Linux 呢?

大多數的使用者不需要編譯任何程式來取得 NTFS 的支援. 幾乎所有的 Linux 版本 (除了 RedHat 之外) 都附加了 NTFS 的支援.

如果你使用 RedHat 9 (Shrike), 8.0 (Psyche) 或 7.3 (Valhalla), 只需安裝支援 NTFS 的 rpm. 這個 rpm 有詳細的使用說明.

如果你使用較早的 RedHat 版本, 或是其他沒有附加 NTFS 支援的 Linux 版本, 你必須自己編譯核心. 這不像聽起來地那麼困難. 在編譯頁有詳細說明.

回頁首

3.6 那個版本是最好的?

新的版本是比較好. 它寫得較佳, 執行速度更快, 錯誤更少, 對多處理器也更加安全. 新的驅動程式可支援 2.5.11 之後的核心,  我們也有修補程式可以使新的驅動 程式加入 2.4 的核心.

回頁首

3.7 還有那些其他的工具呢?

到目前為止, 只有很少,且針對研發人員的工具. 我們有個所有我們的工具的進度列表.

優先順序是先編寫 寫入 NTFS 的支援.

回頁首

3.8 Linux NTFS 驅動程式是如何寫成的?

微軟沒有公佈任何關於 NTFS 結構的任何文件, 所以我們必須從頭對 NTFS 使用逆向工程. 方法大概是:

  1. 以 16 進位編輯器查看磁區
  2. 執行一些命令, 例如: 新增一個檔案
  3. 以 16 進位編輯器尋找所產生的變化
  4. 將那些變化紀錄並分類
  5. 一直重覆步驟 1 至 4

如果這聽起來很繁重, 那你應該了解這個工作的困難了. 我們現在幾乎了解關於 NTFS 的所有, 而且我們紀錄在../ntfs/index.html
, 希望對他人有幫助.

事實上, 編寫驅動程式比蒐集資料要簡單的多了.

回頁首

3.9 我們該感謝誰呢?

首先我們要感謝 Martin von Löwis. 他早在 1995 時就編寫了原始的 NTFS 的驅動程式. 它在 1997 年 12 月被加入 Linux 核心 (2.1.74). Martin 得到以下友善的人的幫助:

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 Driver 的安全性如何?

原始和新的驅動程式在讀取磁區時都很安全. 他們不會更動檔案系統的任合部分, 所以不會造成任何損害.

再者, 新的驅動程式也是對多處理器也是安全的.

回頁首

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 Driver?

如果你的 Linux 核心是 2.4.x 版, 或 2.5.0 - 2.5.10 版, 那你可能有原始的版本. 如果你是比 2.5.11版新的版本, 那你有新的 NTFS 驅動程式.

一個較好的方法是查看核心中關於 NTFS 的紀錄檔. 試試任一個指令 (可能需要 root 的權限).

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

原始的驅動程式時 1.1.x 版, 新的驅動程式是 2.x 版.

回頁首

4.5 如何掛載 NTFS 磁區?

首先, 先查看你的核心是否支援 NTFS. 以下的指令會列出所有 Linux 可讀的檔案系統類型. 如果你有看到 ntfs, 那就沒問題了. 另外, 閱讀 mount 的說明也是個好主意,  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.

Back to the top

4.6 常用的掛載選項.

這些掛載選項適用於兩種驅動程式. 我們建議您閱讀 mount 的說明頁. 通用的格式是 :

    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
以唯讀的方式掛載磁區. Mount 會以可讀寫的方式來掛載磁區. 除非指定這個選項,  mount 才會以唯讀的方式來掛載磁區.
-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, 你可以指定檔案的所有人. Userid 可以是在 /etc/passwd 的任何使用者, 或任何代表使用者的代碼.
    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, 你可以指定檔案的所有群組. Groupid 可以是在 /etc/group 的任何群組, 或任何代表群組的代碼.
    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 的例子:

    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, MyFilemyfile 是完全不同的但案. 如果你希望 Linux 像 Windows 一樣對 NTFS 磁區忽視大小寫, 設 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 的例子:

    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 同時改變檔案和目錄的權限 (見 4.6 節). 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, MyFilemyfile 是完全不同的但案. 如果你希望 Linux 像 Windows 一樣對 NTFS 磁區忽視大小寫, 設 posix 選項為 true. 設為 false 會使驅動程式和 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}

這個選項控制驅動程式如何處理問題. 預設是繼續嘗 試. 任何問題將會被標記並延後解決. 另一個選擇是驅動程式試著解決. 此時驅動程式能做的就是把啟動磁區段替換成備份的資料.

    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 and gid. 他們在常用的掛載選項中有提及.

以下是一些每一個選項的例子, 和對檔案的作用. 我們會用相同的 mount 指令來示範.

    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 的使用者和群組所有. 接下來我們有試試 uidgid 的選項.

    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 磁區?

當你成功地執行了你的 mount 指令, 你可以在 /etc/fstab (filesystem table) 加一行指令來告訴 Linux 自動在啟動時掛載磁區..

以下是一些 mount 的例子和相同作用的 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 那個 Linux 版本有原生的 NTFS 支援?

已知支援 NTFS 的 Linux 是: Mandrake, Debian, SuSE, Gentoo, 和 Caldera

事實上, 如果名字不是 RedHat, 他們就會支援 NTFS.

回頁首

6.2 為何 RedHat 不支援 NTFS?

我也想知道. 根據謠言說是法律上的考量.

回頁首

6.3 為何 RedHat 在存取 NTFS 磁區時是鎖定的狀態?

用 "uname -a" 查看你的核心版本. 如果是 2.4.9 版, 那你必須更新你的核心. 詳見 RedHat 網站.

如果你願意也可以自己編譯你的核心. 詳見如何加 NTFS 支援到 Linux?.

回頁首

6.4 有可以安裝在 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 的程式碼, 如果我們每次只做了小改變而就要發布所有的核心程式碼, 那是很沒有效率的. 所以我們只要針對核心版本發布修補程式即可.

打開文件之後, 進入程式碼的目錄並使用以下的指令 (如果需要, 更改路徑和程式名稱):

    patch -p1 < path/to/patchname

這將會更動程式碼, 且在過程中應該不會有任何的錯誤發生. 接下來像平常一樣編譯核心. 在這份 FAQ 中有指導說明.

回頁首

7.5 如果我還是不了解呢?

很抱歉. 我們儘可能的幫助每一個人, 但我們只有有限的時間. 有一些其他的網站會讓你了解 Linux 的基本知識, 或是你可以像附近的 Linux 使用者俱樂部尋求幫助.

回頁首

7.6 何時新的程式碼才會放入 Linux 核心呢?

有兩個核心要考慮, 新的程式碼已經在 Linux 核心的研發版本中, 它是在 2.5.11 版是導入的.

穩定的 Linux 核心, 目前是 2.4.20 版, 仍在使用舊的驅動程式. 我們很滿意新的程式碼的現狀, 但我們仍要說服核心的管理者那是很好的.

我們仍會經常發布新的修補程式, 直到程式碼被納入核心為止.

回頁首

7.7 不可以寫個 Windows 驅動程式的封裝程式嗎?

聽起來是個好主意, 但要開始其實有很多的問題.

最大技術上的問題是把 Windows 的 DLL 加入 Lunix 的 VFS 中, 這問題可以解決, 但不完美. 它需要成為核心的一部份, 這也意味著如果它出問題整個系統會崩潰. 沒有原程式碼, 我們將無法解決這個問題.

下一個問題是相容性. 我們該用那個版本的 Windows 系統檔? 選一個會限制了它的用途, 封裝所有的版本將會是編寫程式者的惡夢.

更糟的是, 發布 Windows 系統檔會有法律上的問題. 由於 Windows 的著作權, 如果某使用者使用 NTFS 封裝程式, 核心的程式工作者將無法對所發生的問題加以研究.

總之, 曾有個勇敢的人做過. Jan Kratochvil 的 Captive 就是 Windows 驅動程式的封裝. 它有 NTFS 的寫入支援, 但是有已知的臭蟲, 且和 Linux NTFS 驅動程式相比下也慢了許多. Captive 是以 ReactOS 為基礎, 使用 LUFS 驅動程式. 如果開發 Captive 的時間像開發 Linux NTFS 驅動程式的時間一樣多, 我們就會有可靠且完全是開放原碼的, 並有寫入支援的驅動程式了.

回頁首