分區
根據 維基百科:
- 分區是在外存上創建一個或幾個便於分別管理的區域的過程。
一個硬盤可以被劃分為一個或者多個分區。一些場景需要使用多個分區,例如雙重或多重啟動、使用 Swap 分區等。此外,分區也可以從邏輯上隔離數據,例如為音頻和視頻數據創建單獨的分區。分區方案存儲於#分區表中,例如主引導記錄(MBR)或 GUID 分區表(GPT)。
可用分區工具創建和修改分區表。#分區工具中列出了在 Arch Linux 中可用的分區工具。
分區通常直接包含一個文件系統,這是在分區上直接創建的(即格式化)。或者,分區可能包含LVM(邏輯分卷管理器)、加密塊設備、RAID(獨立磁盤冗餘陣列),它們最終提供可存放文件系統的設備文件。
直接包含可掛載文件系統的塊設備(硬盤、分區、LUKS 設備、LVM 邏輯卷、RAID 陣列等)稱為卷(也有卷標、宗卷等稱謂)。
分區表[編輯 | 編輯原始碼]
分區信息被存放在分區表中。目前有兩種主流的模式:傳統的#主引導記錄(MBR)和新的#GUID 分區表(GPT)。後者功能更強大,解決了許多 MBR 的限制。
parted /dev/sda print
或 fdisk -l /dev/sda
查看當前分區信息。
/dev/sdX
是塊設備,依不同物理設備有不同的格式:
/dev/sda
是 SATA 設備/dev/nvme0n1
是 NVMe 設備/dev/mmcblk0
是 eMMC 設備
更多信息請參看塊設備名稱
主引導記錄[編輯 | 編輯原始碼]
主引導記錄(Master boot record,MBR)是存儲設備最開始的 512 字節。其包含操作系統啟動加載器和分區表,在 BIOS 系統的啟動流程中扮演重要角色。可參閱上述維基頁面了解 MBR 的結構。
MBR(引導代碼)[編輯 | 編輯原始碼]
MBR 的前 440 字節是引導(bootstrap)代碼。在 BIOS 系統上,它通常包含引導程序的第一階段。可以用 dd 備份、恢復、抹除引導代碼。
MBR(分區表)[編輯 | 編輯原始碼]
MBR 分區表(或稱為 DOS 分區表、MS-DOS 分區表)有三種分區類型:
- 主分區(Primary)
- 擴展分區(Extended)
- 邏輯分區(Logical)
主分區每個磁盤或者 RAID 卷上不能超過 4 個,可設置為可啟動狀態。如果分區方案要求使用多於 4 個的分區,就需將至少一個分區設置為擴展分區,並在上面建立邏輯分區。
擴展分區可以被看作是容納邏輯分區的容器。硬盤上最多只能有1個擴展分區。如果磁盤上有 1 個擴展分區,它也被看作是 1 個主分區。因此只能另外再建立 3 個主分區(例如 3 個主分區加 1 個擴展分區)。擴展分區內所包含的邏輯分區數量沒有限制。如果在雙重啟動中有 Windows,Windows 需要占據一個主分區。
通常習慣是創建主分區 sda1 到 sda3,然後建立一個擴展分區 sda4。sda4 中包含的邏輯分區編號為 sda5、sda6 等。
GUID 分區表[編輯 | 編輯原始碼]
全局唯一標識分區表(GUID Partition Table,GPT)是 UEFI 標準定義的分區規範。使用通用唯一識別碼(globally unique identifier,GUID;又稱為 universally unique identifier,UUID)定義分區和分區類型。設計上是為了替換#主引導記錄。
GUID 分區表的磁盤開始位置有一個保護 MBR(protective Master Boot Record,PMBR),用以處理不支持 GPT 軟件的訪問。這段 MBR 和真正的 MBR 一樣,具備一段#引導代碼,後者可以用在支持的啟動管理器中進行 BIOS/GPT 啟動。
選擇 GPT 還是 MBR[編輯 | 編輯原始碼]
#GUID 分區表(GPT)是一種更靈活的分區方式。它正在逐步取代#主引導記錄(MBR)系統。GPT 相對於誕生於 MS-DOS 時代的 MBR 而言,有許多優點。新版的分區工具可以讓 GPT 和 MBR 都獲得不錯的可靠性和性能。
在做出選擇前,需要考慮如下內容:
- 如果使用 GRUB legacy 作為引導程序,必須使用 MBR。
- 如果使用傳統的 BIOS,並且雙啟動中包含 Windows (無論是 32位版還是 64 位版),必須使用 MBR。
- 如果使用 UEFI 而不是 BIOS,並且雙啟動中包含 Windows 64 位版,必須使用 GPT。
- 非常老的機器需要使用 MBR,因為 BIOS 可能不支持 GPT。
- 如果不屬於上述任何一種情況,可以隨意選擇使用 GPT 還是 MBR。由於 GPT 更先進,建議選擇 GPT。
- 建議在使用 UEFI 的情況下選擇 GPT,因為有些 UEFI 固件不支持從 MBR 啟動。
GPT 相對於 MBR 的一些優勢:
- 為每個磁盤和每個分區提供相應的磁盤 UUID 和分區 UUID(partuuid),這樣對分區和磁盤的命名就與其文件系統無關。UUID 同時是 systemd 的可發現分區規範的前提,可以用於啟用了 systemd 的 initramfs。
- 提供與文件系統無關的分區名(partlabel)。
- 任意多個分區(取決於為分區表本身分配的空間)使擴展分區和邏輯分區不再必要。GPT 表的默認空間可供 128 個分區使用,但若需要更多分區,也可為分區表分配更多空間。目前僅 gdisk 支持該功能。
- 使用 64 位邏輯塊地址(logical block address),可尋址的最大硬盤空間是 2 ZiB。MBR 只支持 2 TiB 的最大硬盤。
- 在磁盤末尾儲存頭部和分區表,有助於恢復分區表。
- CRC32 校驗碼可用於偵測頭部或分區表的錯誤。
#分區工具一節列出了用於創建和修改 GPT 或 MBR 表的工具。
Btrfs 分區[編輯 | 編輯原始碼]
Btrfs可以獨占整個存儲設備並替代 #MBR 和 #GPT 分區方案。請參考創建 Btrfs 文件系統以獲取更多信息。
分區方案[編輯 | 編輯原始碼]
雖然有一些關於分區方案的通用建議,但沒有嚴格的準則。有許多影響分區方案的因素,例如對靈活性的期望、訪問速度、安全性以及可用磁盤空間的硬性限制。實際上就是個人取捨的問題。
如果你想雙啟動 Arch Linux 和 Windows,請參考 Dual boot with Windows。
- UEFI 系統需要有 EFI 系統分區。
- 在 BIOS 系統上使用 #GPT 進行分區後,安裝 GRUB 時會需要一個額外的 BIOS 啟動分區。
- 如果使用的是 Btrfs,可以用子卷模擬分區,請參考 Btrfs 子卷。
單root分區[編輯 | 編輯原始碼]
這種是最簡單,同時也能滿足大部分應用場景的方案。如果需要的話,可以建立一個交換文件。通常剛開始的時候建議一個單獨的 /
分區,然後根據應用場景的需要,例如 RAID,加密,獨立的多媒體分區等建立其他的分區。
多分區[編輯 | 編輯原始碼]
將某個路徑掛載為獨立分區可以使其擁有不同的文件系統和掛載參數。某些情況下(例如多媒體文件分區),可以被多個操作系統共享。
下面這些路徑可以作為獨立分區的掛載點,你也可以根據實際需要做出其他決定。file-hierarchy(7) 介紹了各個目錄的作用。
根分區[編輯 | 編輯原始碼]
根目錄是目錄樹的頂層,這裡是主文件系統掛載和其他文件系統掛靠的地方。所有文件和目錄都在根目錄 /
顯示,即使它們實際上存儲在其他的物理設備上。根文件系統中的內容必須足以啟動、恢復、修復系統。因此 /
目錄下的特定目錄是不能作為獨立分區的。
/
分區或叫根分區是最重要而且必需的,需要最先掛載,其他其他分區可以被它取代。
因為它通常包括 /usr
目錄,根據安裝的軟件數量,會產生非常明顯的增長。15-20 GiB 對於大多數用戶來說是一個比較合適的取值。如果你打算在這裡放一個交換文件的話,需要適當調大取值。
/boot[編輯 | 編輯原始碼]
/boot
分區包含內核、ramdisk 鏡像以及引導加載程序配置文件和引導加載程序階段。它也可以存放內核在執行用戶態程序之前所使用的其他數據。/boot
在日常系統運行中並不需要,只在啟動和內核升級(重建 initial ramdisk 時)的時候用到。
- 僅當你的引導加載程序不能訪問
/
下的/boot
目錄時才需要單獨的/boot
分區。例如,當引導加載程序不支持文件系統,或是/
位於堆疊塊設備(如軟 RAID、加密卷或 LVM 卷)上且引導加載程序沒有相應的驅動程序。更多關於引導加載程序的需求和能力的信息可參見引導加載程序。 - 如果使用的 UEFI 引導加載程序沒有其他文件系統的驅動程序,建議將 EFI 系統分區掛載到
/boot
。
不使用 EFI 系統分區 時,/boot
的建議大小為 200 MiB;否則需要至少 300 MiB 空間。
/boot
分區。/home[編輯 | 編輯原始碼]
/home
目錄包含用戶定義的配置文件、緩存、應用程序數據和媒體文件。
將/home
目錄獨立使得/
分區可以單獨重新劃分。但是請注意,在 /home
沒有獨立分區的情況下,仍然可以在不修改 /home
目錄內容的情況下重裝 Arch —— 刪除其他頂級目錄,然後執行 pacstrap。
不能與使用其他發行版的用戶共享同一個 home 目錄,因為不同的發行版可能使用不兼容的軟件版本和補丁。可以共享媒體目錄,或至少使用 /home
分區下的不同 home 目錄。分區大小跟着存儲的內容而定。
/var[編輯 | 編輯原始碼]
/var
目錄存儲變量數據例如 spool 目錄和文件,管理和登錄數據,pacman 的緩存,ABS 樹等等。它通常被用作緩存或者日誌記錄,因此讀寫頻繁。將它獨立出來可以避免由於大量日誌寫入造成的磁盤空間耗盡等問題。
它的存在是方便將 /usr
設置為只讀掛載。所有在操作系統運行過程(而非安裝或軟件維護)中,從前要寫入 /usr
的東西,放到 /var
下。
/var
包含許多小文件。如果將其作為獨立分區,在文件系統的選擇上需要考慮這一點。值得一提的是,/var
包含 pacman 緩存。保留緩存的包提供了軟件包降級的能力,因此非常有用。也正因為這樣,/var
的大小會隨着時間推移而增長。尤其是 pacman 緩存將會隨着新軟件的安裝、系統的升級而增長。在磁盤空間不足的時候,可以安全地清理這個目錄。/var
分配 8~12 GiB 對於桌面系統來說是比較合適的取值,具體取值取決於安裝的軟件數量。
/data[編輯 | 編輯原始碼]
可以為需要多用戶共享的文件建立一個「data」分區。也可以使用 /home
分區用於這一目的。
Swap[編輯 | 編輯原始碼]
交換文件或分區提供的硬盤空間作為虛擬內存使用。它們有同樣的功能,沒有明顯的性能區別,但是後者更易於根據需要調整大小。如果沒有使用休眠特性的話,交換分區可以被多個系統共享。
以前,在擁有不足 512 MiB 內存的機器上,通常為交換分區分配兩倍內存大小的空間。如果有更大的內存(大於 1024 MiB),可以分配較少的空間,甚至不需要交換空間。
要使用休眠(掛起到硬盤)功能,最好分配與內存同樣大的交換分區。雖然內核會嘗試壓縮休眠文件到交換分區的大小,但如果交換空間過於小則不一定成功。請參見休眠。
布局示例[編輯 | 編輯原始碼]
- UEFI/GPT 並沒有真正的「boot」標誌。啟動僅依賴於設備上的相應記錄。某些 GPT 分區工具標記的「boot」僅意味着它是一個 EFI 系統分區。
- 不要求所有的分區都在同一個硬盤上。
- 不要求所有的硬盤使用相同的分區表類型。
UEFI/GPT 示例[編輯 | 編輯原始碼]
Mount point | Partition | Partition type GUID | Partition attributes | Suggested size |
---|---|---|---|---|
/boot or /efi
|
/dev/sda1
|
C12A7328-F81F-11D2-BA4B-00A0C93EC93B : EFI system partition
|
550 MiB | |
/
|
/dev/sda2
|
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 : Linux x86-64 root (/)
|
23 - 32 GiB | |
[SWAP]
|
/dev/sda3
|
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F : Linux swap
|
More than 512 MiB | |
/home
|
/dev/sda4
|
933AC7E1-2EB4-4F13-B844-0E14E2AEF915 : Linux /home
|
Remainder of the device |
MBR/BIOS 示例[編輯 | 編輯原始碼]
Mount point | Partition | Partition type ID | Boot flag | Suggested size |
---|---|---|---|---|
/
|
/dev/sda1
|
83 : Linux
|
是 | 23 - 32 GiB |
[SWAP]
|
/dev/sda2
|
82 : Linux swap
|
否 | More than 512 MiB |
/home
|
/dev/sda3
|
83 : Linux
|
否 | Remainder of the device |
UEFI 帶單獨的 /home[編輯 | 編輯原始碼]
Mount point | Partition | Partition type GUID | Partition attributes | Suggested size |
---|---|---|---|---|
None | /dev/sda1
|
21686148-6449-6E6F-744E-656564454649 : BIOS boot partition
|
1 MiB | |
/
|
/dev/sda2
|
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 : Linux x86-64 root (/)
|
2 : Legacy BIOS bootable
|
23 - 32 GiB |
[SWAP]
|
/dev/sda3
|
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F : Linux swap
|
More than 512 MiB | |
/home
|
/dev/sda4
|
933AC7E1-2EB4-4F13-B844-0E14E2AEF915 : Linux /home
|
Remainder of the device |
分區工具[編輯 | 編輯原始碼]
下面表格可以幫助選擇。
MBR | GPT | |
---|---|---|
對話框 | fdisk parted |
fdisk gdisk parted |
模擬圖形界面 | cfdisk | cfdisk cgdisk |
非交互 | sfdisk parted |
sfdisk sgdisk parted |
圖形界面 | gparted gnome-disk-utility partitionmanager |
gparted gnome-disk-utility partitionmanager |
fdisk/gdisk[編輯 | 編輯原始碼]
請參考 fdisk。
- fdisk — Linux 自帶的命令行分區工具。
- cfdisk — 使用 ncurses 庫編寫的具有偽圖形界面的命令行分區工具。
- sfdisk — 支持腳本的 fdisk.
- cgdisk — GPT 版的 cfdisk。
- sgdisk — Scriptable version of gdisk.
GNU Parted[編輯 | 編輯原始碼]
下面工具在 GNU Parted 中有介紹。
- GNU Parted — 命令行分區工具。
- GParted — GTK 圖形界面的分區工具。
- GNOME Disks — GTK 寫的圖形分區工具.
- Partitionmanager — QT 圖形界面的分區工具。
備份[編輯 | 編輯原始碼]
請參閱 fdisk#Backup and restore partition table 或 gdisk#Backup and restore partition table.
恢復[編輯 | 編輯原始碼]
- TestDisk — 該工具可恢復 MBR 或 GPT 丟失分區。
分區對齊[編輯 | 編輯原始碼]
恰當的分區對齊有助於提升性能和使用壽命。這是由硬件層面和文件系統層面的每次塊 I/O 操作特性決定的。對齊的關鍵是分區大小(至少)是塊大小的倍數,塊大小取決於選用的硬件設備。如果分區沒有以塊大小的整數倍對齊,對齊文件系統就失去意義了,因為從分區的起始偏移開始就是有偏差的。
fdisk/gdisk 和 parted 會自動處理分區對齊。GNU Parted#Check alignment 介紹了如何驗證分區是否對齊。
有些硬盤使用 高級格式 會提供更好的讀寫效率。
提示與技巧[編輯 | 編輯原始碼]
MBR 轉換為 GPT[編輯 | 編輯原始碼]
參閱 GPT fdisk#Convert between MBR and GPT.
GPT 內核支持[編輯 | 編輯原始碼]
Linux 內核中 CONFIG_EFI_PARTITION
選項配置是否啟用內核 GPT 支持(即使名稱為 EFI PARTITION)。此選項必須內置於內核,不能作為可加載模塊。即使 GPT 磁盤只用作數據存儲而不作為啟動盤,此選項也是必須的。在 Arch [core] 倉庫中的 linux包 和 linux-lts包 內核默認啟用此選項。如果自定內核,設置 CONFIG_EFI_PARTITION=y
啟用此選項。
參考資料[編輯 | 編輯原始碼]
- Wikipedia:Disk partitioning
- Wikipedia:Binary prefix
- Understanding Disk Drive Terminology
- What is a Master Boot Record (MBR)?
- Rod Smith's page on What's a GPT? and Booting OSes from GPT
- Make the most of large drives with GPT and Linux - IBM Developer Works
- Microsoft's Windows and GPT FAQ
- Partition Alignment (with examples)