Linux 磁盤分區之分區篇
了解如何在 Linux 統中設計磁盤分區的布局。您可以運用本文中的資料來學習。這一節講述的是Linux 磁盤分區之分區篇。 一、分區 第一個 SCSI 驅動器通常是 /dev/sda。在較早的 Linux 系統中,第一個 IDE 硬盤驅動器是 /dev/hda。隨著串行(SATA)IDE 驅動器的發明,混合 PATA/SATA 系統有時會使用 /dev/hda 作為第一個 PATA 驅動器,使用 /devsda 表示第一個 SATA 驅動器。在較新的系統上,所有 IDE 驅動器都命名為 /dev/sda、/dev/sdb 等。IDE 驅動器名稱的更改是熱插拔 系統造成的,最初支持的是 USB 驅動器。熱插拔允許您在插入新設備后立即開始使用新設備,而現在這種命名用于所有設備,無論是內置于系統之中的設備,還是隨后使用 USB 或 Firewire(IEEE 1394)或其他類型的連接插入正在運行的系統的設備。 傳統上,硬盤驅動器會格式化為 512 字節的扇區。磁盤盤片在無需移動磁頭的前提下即可讀取的所有扇區組成一個磁道。磁盤通常具有多個盤片。各盤片上在無需移動磁頭的前提下即可讀取的磁道的集合稱為柱面。硬盤驅動器的設定參數 使用柱面、每個柱面的磁道(或磁頭)數以及扇區/磁道表示。在本文撰寫之時,驅動器制造商開始生產具有 4K 扇區的磁盤。如果文件系統仍然假定使用 512 字節的扇區,而某個分區并非從位于 4K 邊界的扇區開始,則將導致性能降低。 PC 系統上 DOS 操作系統中對于柱面、磁頭和扇區大小的限制帶來了 BIOS 轉換的設定參數,以支持更大的硬盤驅動器。最終,即便這樣的方法也不足以解決問題。磁盤驅動器技術的最新發展帶來了邏輯塊尋址(LBA),因而 CHS 設定參數指標的重要性有所降低,現代磁盤上報告的設定參數可能與物理扇區布局關系不大或者完全無關。如今,我們使用的磁盤更大,這迫使 LBA 推出了稱為 LBA48 的擴展,最多可保留 48 個位供扇區號使用。 硬盤驅動器上的空間劃分(或者說分區)為多個分區。分區不能重疊,未分配給分區的空間稱為剩余空間。分區名的形式類似于 /dev/hda1、/dev/hda2、/dev/hda3、/dev/sda1 等。在未使用 IDE 驅動器熱插拔支持的系統上,IDE 驅動器最多支持 63 個分區。通過熱插拔支持的 SCSI 驅動器、USB 驅動器和 IDE 驅動器最多可有 15 個分區。一個分區通常會分配為整數個柱面(柱面概念可能存在不準確之處)。 如果兩種不同的分區程序對于指定的磁盤設定參數有著不同的理解,就有可能出現一種分區程序在遇到另一個分區程序創建的分區時報錯或發生問題的情況。如果將磁盤從一個系統移動到另一個系統,也可能會出現此類問題,若兩個系統的 BIOS 功能不同則更容易出現問題。 在 Linux 系統中,您可以使用 parted 或 fdisk 工具查看指定設定參數。較早版本的 Linux 參數也會在 /proc 文件系統中一個類似于 /proc/ide/hda/geometry 的文件中報告設定參數,而在較新版本的系統中可能無法找到這個文件。清單 1 展示了如何使用 fdisk 命令來顯示附加 SATA 的 IDE 硬盤驅動器的分區和設定參數。fdisk 的 -v 參數顯示版本。要顯示或操縱分區表,您需要是 root 用戶,或者通過 sudo 命令獲得 root 權限,如本清單所示。 清單 1. 硬盤設定參數 ian@attic4:~$ fdisk -v fdisk (util-linux-ng 2.16) ian@attic4:~$ sudo fdisk /dev/sdb [sudo] password for ian: The number of cylinders for this disk is set to 30401. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/sdb: 250.1 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000404d6 Device Boot Start End Blocks Id System /dev/sdb1 1 25 200781 83 Linux /dev/sdb2 26 12965 103940550 83 Linux /dev/sdb3 12966 30401 140054670 83 Linux Command (m for help): 在清單 1 中,請注意 fdisk 將打印一條關于柱面 1024 末尾指定位置的警告。某些舊版系統的 BIOS 僅能引導位于磁盤的前 1024 個柱面內的分區,在這種情況下,柱面 1024 極為重要。這很可能出現在沒有 LBA 支持的 BIOS 中或者某些舊版本的引導管理器中。在現代機器中,這通常不會造成問題,但您應該注意,可能存在這樣的限制。 您可以使用 fdisk 顯示扇區中的單元,使用 -u 選項即可,也可在交互模式中使用 u 子命令在扇區和柱面之間切換。parted 命令支持多種不同的單元。清單 2 展示了清單 1 所示的同一個磁盤內的 parted 中不同單元的使用。 #p# 清單 2. 使用 parted 的不同單元 ian@attic4:~$ sudo parted /dev/sdb [sudo] password for ian: GNU Parted 1.8.8.1.159-1e0e Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) help u unit UNIT set the default unit to UNIT UNIT is one of: s, B, kB, MB, GB, TB, compact, cyl, chs, %, kiB, MiB, GiB, TiB (parted) p Model: ATA HDT722525DLA380 (scsi) Disk /dev/sdb: 250GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 32.3kB 206MB 206MB primary ext3 2 206MB 107GB 106GB primary ext4 3 107GB 250GB 143GB primary ext3 (parted) u s (parted) p Model: ATA HDT722525DLA380 (scsi) Disk /dev/sdb: 488397168s Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 63s 401624s 401562s primary ext3 2 401625s 208282724s 207881100s primary ext4 3 208282725s 488392064s 280109340s primary ext3 (parted) u chs (parted) p Model: ATA HDT722525DLA380 (scsi) Disk /dev/sdb: 30401,80,62 Sector size (logical/physical): 512B/512B BIOS cylinder,head,sector geometry: 30401,255,63. Each cylinder is 8225kB. Partition Table: msdos Number Start End Type File system Flags 1 0,1,0 24,254,62 primary ext3 2 25,0,0 12964,254,62 primary ext4 3 12965,0,0 30400,254,62 primary ext3 (parted) 請注意,parted 和 fdisk 輸出所顯示的起始柱面和結束柱面截然不同,這是由于 parted 從零開始計算柱面,而 fdisk 從 1 開始計算。清單 3 表明,fdisk 與 parted 的起始扇區和結束扇區實際上是完全相同的。 清單 3. 檢查起始和結束扇區號 ian@attic4:~$ sudo fdisk -ul /dev/sdb Disk /dev/sdb: 250.1 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x000404d6 Device Boot Start End Blocks Id System /dev/sdb1 63 401624 200781 83 Linux /dev/sdb2 401625 208282724 103940550 83 Linux /dev/sdb3 208282725 488392064 140054670 83 Linux ian@attic4:~$ echo $(( 208282725 / 255 / 63 )) 12965 #p# 二、分區類型 IDE 驅動器上有三種類型的分區:主、邏輯 和擴展。分區表 位于磁盤主引導記錄(MBR)之中。MBR 是磁盤上的第一個扇區,因而分區表在其中所占空間不大。這限制了一個磁盤上的主分區數量,最多為 4 個。如果需要 4 個以上的主分區(往往需要 4 個以上的主分區),其中一個主分區就必須以擴展分區的形式出現。 擴展分區 就是一個或多個邏輯分區的容器。這種分區模式最初是由 MS DOS 和 PC DOS 采用的,允許 DOS、Windows 或 Linux 系統使用 PC 磁盤。一個磁盤可能僅包含一個擴展分區。數據存儲在擴展分區內的邏輯分區中。必須首先在擴展分區內創建一個邏輯分區,之后才能將數據存儲到擴展分區中。 Linux 將主分區或擴展分區編號為 1 至 4,因而 dev/sda 可能擁有四個主分區:/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4。也可以有一個主分區 /dev/sda1 和一個擴展分區 /dev/sda2。如果定義了邏輯分區,則邏輯分區的編號從 5 開始,/dev/sda 上的第一個邏輯分區將為 /dev/sda5,即便磁盤上不存在主分區,只有一個擴展分區也是如此(/dev/sda1)。因此,如果您希望一個 IDE 驅動器上有四個以上的分區,就需要給擴展分區分配一個分區號。盡管理論上支持熱插拔的內核的 IDE 驅動器分區數量理論上最多為 15 個,但您也許能創建最后幾個,也可能無法創建最后幾個。如果您計劃在一個驅動器上使用超過 12 個分區,應務必謹慎地檢查所有方面。 上面的示例中使用的磁盤具有三個主分區,均格式化為供 Linux 使用。其中兩個主分區使用 ext3 文件系統,而另一個主分區使用 ext4 文件系統。清單 4 展示了針對 Ubuntu 9.10 系統上帶有主、擴展和邏輯分區的內部驅動器和附加到 Fedora 12 系統的 USB 驅動器的 parted 命令 p 的輸出結果。請注意不同的文件系統類型。另外還要注意,您可以在命令行中指定一個或多個 parted 命令,避免使用交互模式。 清單 4. 使用 parted 命令顯示分區表 ian@attic4:~$ sudo parted /dev/sda u s p [sudo] password for ian: Model: ATA WDC WD6401AALS-0 (scsi) Disk /dev/sda: 1250263728s Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 63s 2040254s 2040192s primary ext3 2 2040255s 22523129s 20482875s primary linux-swap(v1) 4 22523130s 1250258624s 1227735495s extended boot 5 22523193s 167397299s 144874107s logical ext3 6 167397363s 310761359s 143363997s logical ext3 7 310761423s 455442749s 144681327s logical ext3 8 455442813s 600092009s 144649197s logical ext3 [root@echidna ~]# parted /dev/sdc p Model: WD My Book (scsi) Disk /dev/sdc: 750GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 32.3kB 135GB 135GB primary fat32 lba 2 135GB 750GB 616GB extended 5 135GB 292GB 157GB logical ext3 6 292GB 479GB 187GB logical ext3 7 479GB 555GB 76.5GB logical ext3 8 555GB 750GB 195GB logical ext3
【編輯推薦】
- 3.2.5 Linux安裝模式下,磁盤分區的選擇(極重要)
- Linux磁盤分區的操作工具與命令使用
- 簡單剖析Linux磁盤分區命令
- 讓Linux操作系統支持FAT格式的磁盤分區
- Linux配置文件
- Linux下文件的清理