3.5. 磁碟組織
前一頁 | 章 3. UNIX 基礎概念 | 下一頁

## 3.5. 磁碟組織

FreeBSD 用來尋找檔案的最小單位就是檔案的名稱了。 檔案的名稱有大小寫之分，所以說 `readme.txt` 和 `README.TXT` 是兩個不同的檔案。 FreeBSD 並不使用副檔名 (`.txt`) 來判別這是一個程式檔、文件檔或是其他類型的檔案。

檔案存在目錄裡面。 一個目錄中可能沒有任何檔案，也可能有好幾百個檔案。 目錄之中也可以包含其他的目錄； 您可以建立階層式的目錄以便資料的管理。

檔案或目錄的對應是藉由給定的檔案或目錄名稱，然後加上正斜線符號 (`/`)；之後再視需要加上其他的目錄名稱。 如果您有一個目錄 `foo` ，裡面有一個目錄叫作 `bar`，這個目錄中又包含了一個叫 `readme.txt` 的檔案，那麼這個檔案的全名，或者說檔案的路徑就是 `foo/bar/readme.txt`。

目錄及檔案儲存在檔案系統之中。 每個檔案系統都有唯一一個最上層的目錄，叫做根目錄 (root directory)。 然後在這個根目錄下面才能有其他的目錄。

到目前為止大概和其他您用過的的作業系統都差不多。 還是有些不一樣的地方就是了，例如 MS-DOS® 用 `\` 當檔案和目錄名稱的分隔符號，而 Mac OS® 則是用 `:` 符號。

FreeBSD 的路徑中並沒有使用磁碟機代號或其他的磁碟名稱。 因此，您不可以使用像 `c:/foo/bar/readme.txt` 這樣子的檔案名稱。

相對的，在 FreeBSD 系統中有一個檔案系統被指定為根檔案系統。 根檔案系統的根目錄由 `/` 表示。 然後其他的檔案系統再掛載 (mount) 在根檔案系統之下。因此無論您的 FreeBSD 系統上有多少顆硬碟，每一個目錄看起來就像在同一個磁碟上。

假設您有三個檔案系統，分別叫作 `A`、 `B` 及 `C`。 每個檔案系統都包含兩個目錄，叫做 `A1`、`A2` (依此類推得 `B1`、`B2` 及 `C1`、`C2`)。

稱 `A` 為主要的檔案系統；如果您用 `ls` 指令查看此目錄的內容，您會看到兩個子目錄： `A1` 及 `A2`，如下所示：

一個檔案系統必須以目錄形式掛載於另一個檔案系統上。 因此，假設您將 `B` 掛載於 `A1` 之上，則 `B` 的根目錄就變成了 `A1`，而在 `B` 之下的任何目錄的路徑也隨之改變:

在 `B1` 或 `B2` 目錄中的任何檔案必須經由路徑 `/A1/B1` 或 `/A1/B2` 才能達到。 所有原來在 `/A1` 中的檔案會暫時被隱藏起來，直到 `B` 被「移除 (unmounted)」後才會再顯現出來。

如果 `B` 掛載在 `A2` 之上，則會變成：

上面的路徑分別為 `/A2/B1` 及 `/A2/B2`。

檔案系統可以掛在其他檔案系統的目錄之上。 延續之前的例子，`C` 檔案系統可以掛在檔案系統 `B` 的 `B1` 目錄之上，如圖所示：

或者 `C` 直接掛載於 `A` 的 `A1` 目錄之上：

如果您熟悉 MS-DOS® 的話，這和 `join` 指令很類似 (雖然不儘相同)。

一般情況下您不需要擔心這些東西。 除非您要安裝新的磁碟，不然通常在您安裝 FreeBSD 時建立好檔案系統並決定好要掛載在何處之後就不會再做任何更動了。

您完全可以使用單一的一個大的根檔案系統 (root file system) 而不建立其他的檔案系統。 這樣有好處也有有壞處。

使用多個檔案系統的好處

- 不同的檔案系統在掛上的時候可以有不同的 掛載參數。 舉例來說，為求謹慎您可以將根檔案系統設成唯讀， 以避免不小心刪除或修改掉重要的檔案。 將使用者可寫入的檔案系統 (例如 `/home`) 獨立出來也可以讓他們用 nosuid 的參數掛載，此選項可以讓在這個檔案系統中執行檔的 suid/guid bits 失效，也許可以讓系統更安全。

- FreeBSD 會自動根據您檔案系統的使用方式來做最佳的檔案配置方式。 因此，一個有很多小檔案、 常常寫入的檔案系統跟只有幾個較大的檔案的檔案系統配置是不一樣的。 如果您只有單一一個大的檔案系統，這部分就沒用了。

- FreeBSD 的檔案系統在停電的時候很穩固。 然而，在某些重要的時候停電仍然會對檔案系統結構造成損害。 分割成許多個檔案系統的話在系統在停電後比較能夠正常啟動， 以便您在需要的時候將備份資料回存回來。

使用單一檔案系統的好處

- 檔案系統的大小是固定的。 您當初安裝 FreeBSD 的時候應該會給定一個大小，可是後來您可能會想把空間加大。 如果沒有備份的話是很難達成的； 您必須將檔案系統重新建立為您需要的大小，然後將備份回存回來。

  ### 重要:

  FreeBSD 的 growfs(8) 指令可以突破此限制直接變更檔案系統的大小。

檔案系統包含在分割區裡面。 因為 FreeBSD 承襲 UNIX® 架構，這邊講的分割區和一般提到的分割區 (例如 MS-DOS® 分割區) 不同。 每一個分割區由一個代號(字母)表示，從 `a` 到 `h`。 每個分割區只能包含一個檔案系統。 因此除了說常見到用檔案系統同的掛載點來表示檔案系統外， 也可以用包含他的分割區代號來表示。

FreeBSD 也會拿磁碟空間來當 swap space。 Swap space 給 FreeBSD 當作虛擬記憶體用。 這讓您的電腦好像擁有比實際更多的記憶體。 當 FreeBSD 的記憶體用完的時候，它會把一些目前沒用到的資料移到 swap space，然後在用到的時候移回去 (同時移出部份沒用到的)。

某些分割區有慣例的使用方式如下：

分割區 | 慣例
--- | ---
`a` | 通常包含根檔案系統 (root file system)
`b` | 通常是 swap space
`c` | 通常和整個 slice 的大小一樣，給一些會用到整個 slice 的工具程式 (例如硬碟壞軌檢查工具) 來使用。 一般來說您應該不會把檔案系統建立在這個分割區。
`d` | 分割區 `d` 曾經有代表特殊意義，但是已經不再使用。 所以現在 `d` 就和其他一般的分割區相同了。

每個包含有檔案系統的分割區是存在所謂的 slice 裡面。 FreeBSD 的 slice 就是指平常我們稱為分割區 (partition) 的東西。 同樣地，會這樣子稱呼也是因為 FreeBSD 的 UNIX® 色彩。 而 slice 是有編號的，從 1 號編到 4 號。

slice 號碼跟在裝置名稱後面，先接一個字母 `s`，然後從 1 號開始編下去。 因此 “da0s1” 就是指第一個 SCSI 硬碟的第一個 slice。 一個磁碟上只能有四個實體的 slice，但是在實體的 slice 中您可以塞進適當類型的邏輯 slice。 這些延伸的 slice 編號從 5 開始，所以 “ad0s5” 是第一個 IDE 硬碟上的第一個延伸 slice。 檔案系統在裝置 (device) 裡就是在一個 slice 之中。

Slices、“dangerously dedicated” 模式的實體磁碟機，以及其他包含分割區(partition) 的磁碟都是以字母 `a` 到 `h` 的編號來表示。 編號是接在裝置名稱的後面的，因此 “da0a” 是磁碟機 da 上的第一個 “dangerously dedicated”模式之分割區。 而 “ad1s3e” 則是第二顆 IDE 硬碟上第三個 slice 的第五個分割區。

最後，我們就可以把系統上的每個磁碟都區分出來了。 一個磁碟的名稱會有一個代碼來表示這個磁碟的類型，接著是一個數字， 表示這是哪一個磁碟。 這邊跟 slice 每個磁碟編號從 0 開始不一樣。 常見的代碼可以參考 表格 3.1, “磁碟機代號”。

當要參照一個分割區的時候，FreeBSD 會要您一併輸入包含這個分割區的 slice 及磁碟機名稱；當要參照一個 slice 的時候，也必須輸入包含這個 slice 的磁碟名稱。 怎麼做呢？首先先列出磁碟名稱，然後 `s` 加上 slice 編號，最後再輸入分割區字母代號。 範例可以參考 範例 3.1, “磁碟、slice 及分割區命名範例”.

範例 3.2, “磁碟的概念模型” 示範了一個基本的磁碟分布模式，相信對您有些幫助。

要安裝 FreeBSD，您必須先建置磁碟的 slice，接著於 slice 中建立要給 FreeBSD 用的分割區。 最後在這些分割區中建立檔案系統 (或 swap space) 並決定要將這些檔案系統掛載於哪裡。

表格 3.1. 磁碟機代號

代號 | 意義
--- | ---
`ad` | ATAPI(IDE) 磁碟機
`da` | SCSI 直接存取磁碟機
`acd` | ATAPI(IDE) 光碟機
`cd` | SCSI 光碟機
`fd` | 軟碟機

範例 3.1. 磁碟、slice 及分割區命名範例

名稱 | 意義
--- | ---
`ad0s1a` | 第一個 IDE 硬碟 (`ad0`) 上第一個 slice (`s1`)的第一個分割區(`a`) 。
`da1s2e` | 第二個 SCSI 硬碟 (`da1`) 上第二個 slice (`s2`) 的第五個分割區 (`e`) 。

範例 3.2. 磁碟的概念模型

此圖顯示 FreeBSD 中接到系統的第一個 IDE 磁碟機內部配置圖。 假設這個磁碟的容量是 4 GB，並且包含了兩個 2 GB 的 slice (MS-DOS® 的分割區)。 第一個 slice 是 DOS 的 `C:` 磁碟機，第二個則安裝了 FreeBSD。 本範例的 FreeBSD 有三個分割區以及一個 swap 分割區。

這三個分割區每個都是一個檔案系統。 `a` 分割是根 (root) 檔案系統；分割 `e` 是 `/var`；而 `f` 分割是 `/usr` 目錄結構。

前一頁 | 上一層 | 下一頁
3.4. 目錄結構 | 起始頁 | 3.6. 掛載與卸載檔案系統

本文及其他文件，可由此下載： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。