3.6. 磁碟組織
前一頁 | 章 3. FreeBSD 基礎 | 下一頁

## 3.6. 磁碟組織

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

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

檔案或目錄的對應是藉由給定的檔案或目錄名稱，然後加上正斜線符號 (`/`)；之後再視需要加上其他的目錄名稱。 如果您有一個目錄 `foo` ，裡面有一個目錄叫作 `bar`，這個目錄中又包含了一個叫 `readme.txt` 的檔案，那麼這個檔案的全名，或者說檔案的路徑 (Path)就是 `foo/bar/readme.txt`。注意這與 Windows® 用來分隔檔案與目錄名稱所使用的 `\` 不同，且 FreeBSD 在路徑上並不使用磁碟機代號或其他磁碟機名稱，意思是，在 FreeBSD 上不會有人輸入 `c:\foo\bar\readme.txt` 這種路徑。

目錄及檔案儲存在檔案系統 (File system) 之中。 每個檔案系統都有唯一一個最上層的目錄，叫做根目錄 (Root directory)。 然後在這個根目錄下面才能有其他的目錄。其中一個檔案系統會被指定成為根檔案系統 (Root file system) 或 `/`，其他的檔案系統均會掛載 (Mount) 在該根檔案系統之下，不論在 FreeBSD 有多少個磁碟，所有目錄都會成為該磁碟的一部份。

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

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

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

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

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

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

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

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

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

使用多個檔案系統的好處

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

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

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

使用單一檔案系統的好處

- 檔案系統的大小是固定的。 若您在當初安裝 FreeBSD 的時指定了一個大小，可是後來您想把空間加大，在沒有備份的情況下很難達成，您必須將檔案系統重新建立為您需要的大小，然後將備份回存回來。

  ### 重要:

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

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

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

部份分區有使用的慣例如下：

分區 | 慣例
--- | ---
`a` | 通常內含根檔案系統
`b` | 通常內含交換空間
`c` | 通常用來代表整個切割區 (Slice)，因此大小會與其所在的切割區一樣。這可讓需要對整個切割區處理的工具 (例如硬碟壞軌檢查工具) 可在 `c` 分區上執行。一般來說不會把檔案系統建立在這個分區。
`d` | 分區 `d` 曾經有代表特殊意義，但是已經不再使用。所以現在 `d` 和一般的分區相同。

在 FreeBSD 的磁碟會分割成數個切割區 (Slice)，如同 Windows® 中由編號 1 到 4 表示的分割區。這些切割區會再分成數個分區，每個分區內含檔案系統，且會使用字母來標示。

切割區的編號在裝置名稱後面，會先以 `s` 為字首，然後從 1 開始編號。 因此 “da0s1” 是指第一個 SCSI 硬碟的第一個切割區。 一個磁碟上只能有四個實體切割區，但是在實體切割區中放進適當類型的邏輯切割區。這些延伸的切割區編號會從 5 開始，所以 “ada0s5” 是第一個 SATA 硬碟上的第一個延伸切割區。因此可以預期這些由檔案系統使用的裝置 (Device) 上均會各別佔據一個切割區。

切割區、“危險專用 (Dangerously dedicated)” 的實體磁碟機以及其他內含分割區 (Partition) 的磁碟都是以字母 `a` 到 `h` 來表示。 字母會接在裝置名稱的後面，因此 “da0a” 是第一顆 “dangerously dedicated” 磁碟機 `da` 上的 `a` 分割區。 而 “ada1s3e” 則是第二顆 SATA 硬碟上第三個切割區的第五個分區。

終於，我們可以辨識系統上的每個磁碟了，一個磁碟的名稱會有一個代碼來表示這個磁碟的類型，接著是一個表示這是那一個磁碟的編號。不像切割區，磁碟的編號從 0 開始。常見的代碼可以參考 表格 3.3, “磁碟裝置名稱”。

當要參照一個分區的時候，需包含磁碟機名稱、`s`、切割區編號以及分區字母。範例可以參考 範例 3.12, “磁碟、切割區及分區命名範例”。

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

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

表格 3.3. 磁碟裝置名稱

磁碟機類型 | 磁碟機裝置稱
--- | ---
SATA 及 IDE 硬碟 | `ada` 或 `ad`
SCSI 硬碟與 USB 儲存裝置 | `da`
SATA 與 IDE CD-ROM 光碟機 | `cd` 或 `acd`
SCSI CD-ROM 光碟機 | `cd`
軟碟機 | `fd`
各種非標準 CD-ROM 光碟機 | `mcd` 代表 Mitsumi CD-ROM 以及 `scd` 代表 Sony CD-ROM 光碟機
SCSI 磁帶機 | `sa`
IDE 磁帶機 | `ast`
RAID 磁碟機 | 範例包含 `aacd` 代表 Adaptec® AdvancedRAID，`mlxd` 及 `mlyd` 代表 Mylex®，`amrd` 代表 AMI MegaRAID®，`idad` 代表 Compaq Smart RAID，`twed` 代表 3ware® RAID.

範例 3.12. 磁碟、切割區及分區命名範例

名稱 | 意義
--- | ---
`ada0s1a` | 第一個 SATA 硬碟 (`ada0`) 上第一個切割區 (`s1`)的第一個分區(`a`) 。
`da1s2e` | 第二個 SCSI 硬碟 (`da1`) 上第二個切割區 (`s2`) 的第五個分區 (`e`) 。

範例 3.13. 磁碟的概念模型

此圖顯示 FreeBSD 中連接到系統的第一個 SATA 磁碟機內部配置圖。 假設這個磁碟的容量是 250 GB，並且包含了一個 80 GB 的切割區及一個 170 GB 的切割區 (MS-DOS® 的分割區)。 第一個切割區是 Windows® NTFS 檔案系統的 `C:` 磁碟機，第二個則安裝了 FreeBSD。 本範例中安裝的 FreeBSD 有四個資料分區及一個交換分區。

這四個分區中各有一個檔案系統。 分區 `a` 是根檔案系統、分區 `d` 是 `/var/`、分區 `e` 是 `/tmp/`，而分區 `f` 是 `/usr/`。分區字母 `c` 用來代表整個切割區，因此並不作為一般分區使用。

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

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

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