Linux系統下的分區和文件系統詳解
我們的文章 “學習 Linux,101:硬盤布局” 介紹了硬盤驅動器布局、分區、以及使用 fdisk
命令來查看分區信息的基本知識。您學習了主分區、擴展分區 和邏輯分區 等分區的相關知識,了解到 Linux 文件系統包含一些文件,它們存儲在磁盤上或目錄 中的塊存儲設備 上。與許多其他系統一樣,Linux 系統上的目錄也可能包含其他目錄,這些目錄稱為子目錄。這篇文章還討論了一些指導您進行分區選擇的注意事項。
本文將首先回顧一下塊設備和分區,然后進一步展示如何使用 fdisk
命令創建、修改或刪除塊設備上的分區。您還將學習 mkfs
(mkfs 代表 make filesystem) 命令的各種形式;mkfs
命令用于將分區格式化為一種特殊的文件系統類型。
注意:除了 LPI 考試要求的工具和文件系統外,您可能會遇到或需要其他工具和文件系統。其他工具和文件系統 小節提供了其他可用工具的一個簡單摘要。
塊設備
塊設備 是能夠以固定大小塊 格式化的任意存儲設備的抽象層。單獨的塊的訪問可以獨立于其他塊的訪問。這樣的訪問通常稱為隨機訪問。
隨機可訪問的固定大小塊的抽象層允許程序使用這些塊設備,而無需擔心底層設備是硬盤驅動器、軟盤、CD、固態(solid-state)驅動器、網絡驅動器,還是某種虛擬設備,比如內存中文件系統。
塊設備示例包括系統上的*** IDE 硬盤驅動器(/dev/sda 或 /dev/hda)或第二 SCSI、IDE 或 USB 驅動器(/dev/sdb)。使用 ls -l
命令來顯示 /dev 條目。每行輸出的***個字符是 b(針對一個塊設備,比如軟盤、CD 驅動器、IDE 硬盤驅動器或 SCSI 硬盤驅動器)和 c(針對一個字符設備,比如 a、終端(tty)或空設備。清單 1 展示了一些示例。
清單 1. Linux 塊設備和字符設備
[ian@echidna ~]$ ls -l /dev/loop1 /dev/null /dev/sd[ab] /dev/sr0 /dev/tty0 brw-rw----. 1 root disk 7, 1 2010-06-14 07:25 /dev/loop1 crw-rw-rw-. 1 root root 1, 3 2010-06-14 07:25 /dev/null brw-rw----. 1 root disk 8, 0 2010-06-14 07:25 /dev/sda brw-rw----. 1 root disk 8, 16 2010-06-14 07:25 /dev/sdb brw-rw----+ 1 root cdrom 11, 0 2010-06-14 07:25 /dev/sr0 crw--w----. 1 root root 4, 0 2010-06-14 07:25 /dev/tty0 |
分區
對于某些塊設備,比如軟盤和 CD 或 DVD 磁盤,通常使用整個媒體作為單個文件系統。但是,對于大型硬盤驅動器,甚至是 USB 存儲器,更常見的用法是將可用空間劃分為幾個不同的分區。
分區的大小可能不同,不同的分區上可以擁有不同的文件系統,因此一個磁盤可以用于多種目的,包括在多個操作系統之間共享該磁盤。例如,我使用的測試系統包含幾個不同的 Linux 發行版,有時還包含一個 Windows® 系統,它們都共享一個或兩個硬盤驅動器。
文章 “學習 Linux,101:硬盤布局” 介紹過,硬盤驅動器擁有一個幾何參數(geometry),根據術語柱面、磁頭和扇區定義。即使是現代驅動器也使用邏輯塊尋址 (LBA),這使得幾何參數變得幾乎無關緊要,用于分區目的的基本分配單元通常仍舊是柱面。
#p#
顯示分區信息
分區信息存儲在磁盤上的分區表 中。分區表列示每個分區的起始柱面和結束柱面的相關信息,關于它的類型 的信息,以及它是否標記為可引導。要創建和刪除分區,需要使用一個專門設計的程序來編輯分區表。對于 LPI 考試,您需要了解 fdisk
程序,這也是本文介紹的程序,盡管也可以使用其他幾個工具。本文末尾將提到其中幾個工具。
fdisk
命令加上 -l
選項用于列示分區。如果想查看一個特定驅動器上的分區,需要添加一個設備名稱,比如 /dev/sda。注意,分區工具需要根訪問權限。清單 2 展示了我的系統的兩個主硬盤驅動器上的分區。
清單 2. 使用 fdisk 列示分區
[root@attic4 ~]# fdisk -l /dev/sda Disk /dev/sda: 640.1 GB, 640135028736 bytes 255 heads, 63 sectors/track, 77825 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00064a1a Device Boot Start End Blocks Id System /dev/sda1 1 127 1020096 83 Linux /dev/sda2 128 1402 10241437+ 82 Linux swap / Solaris /dev/sda3 * 46340 56538 81920000 83 Linux /dev/sda4 1403 46339 360956422 5 Extended /dev/sda5 1403 10420 72437053+ 83 Linux /dev/sda6 10421 19344 71681998+ 83 Linux /dev/sda7 19345 28350 72340663+ 83 Linux /dev/sda8 28351 37354 72324598+ 83 Linux /dev/sda9 37355 46339 72171981 83 Linux Partition table entries are not in disk order [root@echidna ~]# fdisk -l /dev/sda Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000de20f Device Boot Start End Blocks Id System /dev/sda1 * 1 9111 73184076 7 HPFS/NTFS /dev/sda2 9634 9730 779152+ 83 Linux /dev/sda3 9731 116679 859067842+ 5 Extended /dev/sda5 9731 20917 89859546 83 Linux /dev/sda6 20918 39644 150424596 83 Linux /dev/sda7 39645 53905 114551451 83 Linux |
注意:
- 標題信息顯示磁盤大小和幾何參數。大多數使用 LBA 的磁盤每個柱面擁有 255 個磁頭,每個磁道擁有 63 個扇區,總共擁有 16065 個扇區,或者每個柱面 8225280 字節。
- 在第二個示例中,***個主分區(/dev/sda1)標記為 bootable(或 active)。這允許標準 DOS PC 主引導記錄引導該分區。這個標志對 LILO 或 GRUB 引導裝載程序沒有意義。***個示例使用 GRUB 作為引導裝載程序,/dev/sda3 被標記為 bootable 的原因可能是我以前使用這個驅動器的一次意外。
- Start 和 End 列顯示每個分區的起始和結束柱面。這些分區不能重疊且通常應該相鄰,即中間沒有空間。
- Blocks 列顯示大小為 1K(1024 字節)的塊的數量。對于本文撰寫之時使用的大多數磁盤而言,扇區大小是 512 字節,因此一個分區中的塊的***數量是柱面數量(End + 1 - Start)和每個柱面的扇區數量的乘積的一半。塊數量后面的 + 號表示分區中的扇區沒有全部使用。
- Id 列表示分區的預定用途。類型 82 是表示 Linux 交換分區,類型 83 表示 Linux 數據分區。已定義的分區類型大概有 100 種。第二個磁盤由幾個操作系統共享,其中包括 Windows/XP,因此出現了 Windows NTFS(也可能是 FAT32)分區。
#p#
使用 fdisk 進行分區
您剛剛已經看到如何使用 fdisk
命令來顯示分區信息。這個命令還提供了一個菜單驅動的環境來編輯分區表,以便創建或移除分區。
警告
開始修改分區之前,需要記住一些重要事項。如果不遵守以下這些原則,就會出現丟失您的現有數據的風險。
- 開始之前備份重要數據,進行任何可能會導致數據丟失的操作之前都應這樣做。
- 不要更改正在使用的分區。事先詳細計劃,然后小心執行。從 CD、DVD 或 USB 啟動一個實時發行版是確保沒有硬盤驅動器分區正在使用的一個好辦法。
- 了解您的工具。
fdisk
命令不會向您的磁盤提交任何更改,除非您要求它那樣做。其他工具,其中包括parted
可能會隨著您的操作提交更改。 - 如果的確犯了錯誤,那么應立即停止。分區工具對分區表進行寫操作。除非您使用的工具還包含對您的磁盤的數據區域的移動、大小重置、格式化等寫操作功能,否則您的數據將不會受到影響。如果您的確犯了錯誤,盡快停止操作并尋求幫助。您仍然有可能恢復此前的分區表定義,從而恢復您的分區和數據。
啟動 fdisk
要以交互模式啟動 fdisk
,只需提供一個磁盤的名稱(比如 /dev/hda 或 /dev/sdb)作為參數。以下示例啟動一個 Knoppix 實時 DVD。您需要根權限,并將看到類似于清單 3 的輸出。
清單 3. 啟動交互式 fdisk
knoppix@Microknoppix:~$ su - root@Microknoppix:~# fdisk /dev/sda The number of cylinders for this disk is set to 121601. 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): |
大多數磁盤擁有超過 1024 個柱面,因此您通常會看到清單 3 中顯示的警告。類型 m
將顯示一個可用的單字母命令列表,如清單 4 所示。
清單 4. fdisk 中的幫助
Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): |
使用 p
命令來顯示這個特定磁盤上的現有分區,清單 5 顯示輸出。
清單 5. 顯示現有分區表
Command (m for help): p Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000de20f Device Boot Start End Blocks Id System /dev/sda1 * 1 9111 73184076 7 HPFS/NTFS /dev/sda2 9634 9730 779152+ 83 Linux /dev/sda3 9731 116679 859067842+ 5 Extended /dev/sda5 9731 20917 89859546 83 Linux /dev/sda6 20918 39644 150424596 83 Linux /dev/sda7 39645 53905 114551451 83 Linux Command (m for help): |
這個特殊磁盤是一個 1TB 磁盤,包含一個略低于 80GB 的 Windows/XP 分區。它是一個主分區,標記為 bootable,這是 Windows 系統的典型特征。
添加分區
現在我們使用部分閑置空間來添加一些分區。
- 我們將創建一個交換分區:/dev/sda4。這將是一個主分區,填充 /dev/sda1 的結束柱面和 /dev/sda2 的起始柱面之間的 521 個柱面空隙。您不必對導致這個空隙的奇怪原因感到好奇;我只是為了撰寫本文而創建這個空隙。
- 我們將創建一個 40GB 的邏輯分區:/dev/sda8。
- ***,我們將創建一個 2000MB 的小型邏輯分區,以便在 Linux 和 Windows 系統之間共享數據。這個分區最終將格式化為 FAT32(或 vfat)。這個分區將命名為 /dev/sda9。
創建我們的分區
我們首先使用 n
命令來創建一個新分區,如清單 6 所示。
清單 6. 創建***個分區
Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) p Selected partition 4 First cylinder (9112-121601, default 9112): Using default value 9112 Last cylinder, +cylinders or +size{K,M,G} (9112-9633, default 9633): +521 Command (m for help): p Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000de20f Device Boot Start End Blocks Id System /dev/sda1 * 1 9111 73184076 7 HPFS/NTFS /dev/sda2 9634 9730 779152+ 83 Linux /dev/sda3 9731 116679 859067842+ 5 Extended /dev/sda4 9112 9633 4192965 83 Linux /dev/sda5 9731 20917 89859546 83 Linux /dev/sda6 20918 39644 150424596 83 Linux /dev/sda7 39645 53905 114551451 83 Linux Partition table entries are not in disk order Command (m for help): |
我們采用默認值作為***個柱面并指定值 +521 作為柱面的數量。清單 6 顯示,我們的分區大小約為 4GB。由于它是一個主分區,因此它的編號必須為 1 至 4。順序指定分區編號是個好主意;否則一些工具會報告錯誤,fdisk
將警告我們:我們的分區表條目不再按磁盤順序排列。
還要注意一點:我們的新分區類型被指定為 83,表明這是一個 Linux 數據分區。可以將這個數字視為分區預定用途的操作系統的指示符。分區的最終用途應該匹配這個設置,但這時我們的分區甚至還沒有格式化,更談不上有數據了。我們將首先創建其他分區,然后介紹如何更改分區類型。
您可能已經注意到,當我們輸入 n
子命令創建一個新分區時,惟一的選擇是 “l”(表示邏輯分區)和 “p”(表示主分區)。您只能看到剩余的可能分區類型的選項。如果驅動器還沒有擴展分區,您將看到選項 “e”(表示擴展分區)。還要注意,我們的擴展分區(/dev/sda3)為類型 5。
現在我們來定義 40GB Linux 分區和 2000MB FAT32 分區。這次我們只需指定大小 +40G 和 +2000M,分別表示 40GB 和 2000MB。結果如清單 7 所示。
清單 7. 創建數據分區
Command (m for help): n First cylinder (53906-116679, default 53906): Using default value 53906 Last cylinder, +cylinders or +size{K,M,G} (53906-116679, default 116679): +40G Command (m for help): n First cylinder (59129-116679, default 59129): Using default value 59129 Last cylinder, +cylinders or +size{K,M,G} (59129-116679, default 116679): +2000M Command (m for help): p Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000de20f Device Boot Start End Blocks Id System /dev/sda1 * 1 9111 73184076 7 HPFS/NTFS /dev/sda2 9634 9730 779152+ 83 Linux /dev/sda3 9731 116679 859067842+ 5 Extended /dev/sda4 9112 9633 4192965 83 Linux /dev/sda5 9731 20917 89859546 83 Linux /dev/sda6 20918 39644 150424596 83 Linux /dev/sda7 39645 53905 114551451 83 Linux /dev/sda8 53906 59128 41953716 83 Linux /dev/sda9 59129 59384 2056288+ 83 Linux Partition table entries are not in disk order Command (m for help): |
更改分區類型
在離開 fdisk
之前,我們將更改 swap 和 vfat 分區的分區類型。為此,我們使用 t
子命令來設置分區類型。我們將 /dev/sda4 設置為類型 82(Linux 交換分區),將 /dev/sda9 設置為類型 9(FAT32)。如果您想查看受支持類型的完整列表,請輸入 L
,如清單 8 所示。
清單 8. 更改分區類型
Command (m for help): t Partition number (1-9): 4 Hex code (type L to list codes): 82 Changed system type of partition 4 to 82 (Linux swap / Solaris) Command (m for help): t Partition number (1-9): 9 Hex code (type L to list codes): b Changed system type of partition 9 to b (W95 FAT32) Command (m for help): |
保存分區表
到目前為止,我們只是對分區表進行了內存中編輯。我們可以用 q
命令退出,不保存更改。如果某些分區不能滿足您的要求,您可以使用 d
命令來刪除一個或多個分區,以便重新定義它們。如果您對設置滿意,則可以使用 v
命令來驗證您的設置,然后使用 w
命令來寫入新的分區表并退出。參見清單 9。如果您再次運行 fdisk -l
命令,您將看到,Linux 現在已能夠識別新分區。與其他操作系統不同的是,Linux 并不總是需要重新啟動才能看到更改。舉例來說,如果 /dev/hda3 變成 /dev/hda2,則需要重新啟動,因為原來的 /dev/hda2 已被刪除。如果需要重新啟動,fdisk
應該會告訴您。
清單 9. 保存分區表
Command (m for help): v 999521580 unallocated 512-byte sectors Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information. Syncing disks. root@Microknoppix:~# fdisk -l /dev/sda Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000de20f Device Boot Start End Blocks Id System /dev/sda1 * 1 9111 73184076 7 HPFS/NTFS /dev/sda2 9634 9730 779152+ 83 Linux /dev/sda3 9731 116679 859067842+ 5 Extended /dev/sda4 9112 9633 4192965 82 Linux swap / Solaris /dev/sda5 9731 20917 89859546 83 Linux /dev/sda6 20918 39644 150424596 83 Linux /dev/sda7 39645 53905 114551451 83 Linux /dev/sda8 53906 59128 41953716 83 Linux /dev/sda9 59129 59384 2056288+ b W95 FAT32 Partition table entries are not in disk order |
高級 fdisk
您可能已注意到,我們沒有更改任意分區上的 bootable 標志。現在,我們的磁盤還有 Windows Master Boot Record (MBR),因此將啟動標記為 bootable 的***個主分區(我們的示例中為 NTFS 分區)。
LILO 和 GRUB 都不使用 bootable 標志。如果其中一個安裝在 MBR 中,那么它就能夠引導 Windows/XP 分區。您也可以將 LILO 或 GRUB 安裝到您的 /boot 分區(/dev/hda2)中,將該分區標記為 bootable 并移除 /dev/hda1 的 bootable 標志。如果機器今后將恢復為 Windows 專用機器,那么保留原始 MBR 可能會有用。
如果需要,您還可以使用 fdisk
來修復分區表中的分區順序。這通常將會更改分區編號,因此您可能需要完成其他工作才能將您的系統恢復為工作系統。要進行這個更改,使用 f
子命令切換到專家模式,然后使用 r
子命令修復分區順序,如清單 10 所示。如果您只是想看看新的分區順序而不實際更改,可以使用 q
子命令退出(本例的做法),而不是將更新后的分區表寫到磁盤中。
清單 10. 修復分區表順序
Command (m for help): p Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000de20f Device Boot Start End Blocks Id System /dev/sda1 * 1 9111 73184076 7 HPFS/NTFS /dev/sda2 9634 9730 779152+ 83 Linux /dev/sda3 9731 116679 859067842+ 5 Extended /dev/sda4 9112 9633 4192965 82 Linux swap / Solaris /dev/sda5 9731 20917 89859546 83 Linux /dev/sda6 20918 39644 150424596 83 Linux /dev/sda7 39645 53905 114551451 83 Linux /dev/sda8 53906 59128 41953716 83 Linux /dev/sda9 59129 59384 2056288+ b W95 FAT32 Partition table entries are not in disk order Command (m for help): x Expert command (m for help): f Done. Expert command (m for help): r Command (m for help): p Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000de20f Device Boot Start End Blocks Id System /dev/sda1 * 1 9111 73184076 7 HPFS/NTFS /dev/sda2 9112 9633 4192965 82 Linux swap / Solaris /dev/sda3 9634 9730 779152+ 83 Linux /dev/sda4 9731 116679 859067842+ 5 Extended /dev/sda5 9731 20917 89859546 83 Linux /dev/sda6 20918 39644 150424596 83 Linux /dev/sda7 39645 53905 114551451 83 Linux /dev/sda8 53906 59128 41953716 83 Linux /dev/sda9 59129 59384 2056288+ b W95 FAT32 Command (m for help): q |
您現在已經了解了向 Linux 工作站添加分區的一種方法。文章 “學習 Linux,101:查找并放置文件系統” 介紹了其他可能的方法。
#p#
文件系統類型
Linux 支持幾種不同的文件系統。每個文件系統都有自己的優缺點和性能特征。文件系統的一個重要屬性是日志,它允許系統在崩潰后更快地恢復。通常,日志文件系統比非日志文件系統更好。您可能還需要考慮,您選擇的文件系統是否支持 Security Enhanced Linux(或 SELinux)。以下是備考 LPI 考試需要了解的文件系統類型的一個簡單摘要。參考 參考資料 了解其他背景信息。
ext2 文件系統
ext2 文件系統(也稱為第二擴展文件系統)旨在克服早期 Linux 版本中使用的 Minix 文件系統的缺點。多年來,該文件系統一直廣泛應用于 Linux。但 ext2 中沒有日志,現在基本上已被 ext3 取代。
ext3 文件系統
ext3 文件系統向標準 ext2 文件系統添加了日志功能,因此是一個非常穩定的文件系統的一個演化發展。它在大多數情況下提供合理的性能并且仍舊在改進。由于它在可靠的 ext2 文件系統之上添加了日志功能,因此可以將現有 ext2 文件系統轉換為 ext3 文件系統,并且在必要時還可以轉換回來。
ReiserFS 文件系統
ReiserFS 是一個基于 B 狀樹的文件系統,擁有非常好的總體性能,特別是對于大量小文件。ReiserFS 擁有良好的伸縮性并具有日志功能。但該文件系統不再受到積極開發,不支持 SELinux,基本上已被 Reiser4 取代。
XFS 文件系統
XFS 文件系統擁有日志功能,包含一些健壯的特性,并針對可伸縮性進行了優化。XFS 在 RAM 中強制緩存中轉(in-transit)數據,因此如果使用 XFS,建議采用不間斷電源供應。
交換文件系統
交換空間在使用之前必須相應格式化,當它通常不被視為文件系統。
vfat 文件系統
vfat 文件系統(也稱為 FAT32)沒有日志功能,且缺乏完整的 Linux 文件系統實現所需的許多特性。它可用于在 Windows 和 Linux 系統之間交換數據,因為 Windows 和 Linux 都能讀取它。不要將這個文件系統用于 Linux,除非要在 Windows 和 Linux 之間共享數據。如果您在一個 vfat 磁盤上解壓縮一個 Linux 歸檔文件,那么您將丟失權限(比如執行權限),還會丟失該歸檔文件中可能存儲的符號鏈接。
ext3 文件系統是一個成熟的文件系統,用作幾個發行版上的默認文件系統。ReiserFS 文件系統多年來一直用作一些發行版(包括 SUSE)的默認文件系統,但現在用得少了。
#p#
創建文件系統
Linux 使用 mkfs
命令來創建文件系統,用 mkswap
命令來創建交換空間。mkfs
命令實際上是幾個特定于文件系統的命令的前端,這些命令包括針對 ext3 的 mkfs.ext3
和針對 ReiserFS 的 mkfs.reiserfs
。
您的文件系統上安裝的是什么文件系統支持?使用 ls /sbin/mk*
命令來找到答案。清單 11 展示了一個示例。
清單 11. 文件系統創建命令
[ian@echidna ~]$ ls /sbin/mk* /sbin/mkdosfs /sbin/mkfs.ext2 /sbin/mkfs.ntfs /sbin/mke2fs /sbin/mkfs.ext3 /sbin/mkfs.vfat /sbin/mkfs /sbin/mkfs.ext4 /sbin/mkfs.xfs /sbin/mkfs.btrfs /sbin/mkfs.ext4dev /sbin/mkhomedir_helper /sbin/mkfs.cramfs /sbin/mkfs.msdos /sbin/mkswap |
您將注意到一些命令的各種形式。例如,您通常會發現,文件 mke2fs、mkfs.ext2 和 mkfs.ext3 是一樣的,文件 mkreiserfs 和 mkfs.reiserfs 也一樣。啟動系統可能需要的文件系統將使用多個名稱不同的相同文件。不能用于 Linux 中的 / 文件系統的那些文件系統(比如 vfat 或 msdos)可能會使用符號鏈接代替。
所有 mkfs
命令都有幾個公共選項。根據在 -type
選項中指定的文件系統類型,特定于正在創建的文件系統類型的選項將被傳遞到適當的創建命令。我們的示例使用 mkfs -type
,但您也可以直接使用其他類型,效果一樣。例如,您可以使用 mkfs -type ext2
、mk2fs
或 mkfs.ext2
。要獲取一個特定文件系統的手冊頁,使用適當的 mkfs
命令作為名稱,比如 man mkfs.ext3
。下面的輸出示例中顯示的許多值都能通過 mkfs
的選項控制。
既然我們已經創建了所有分區,我們將重新啟動 Fedora 12 系統(而不是有點緩慢的實時 Knoppix DVD)并格式化文件系統。當然,如果愿意,您也可以繼續使用 Knoppix 系統。注意,創建文件系統需要根權限。
創建一個 ext3 文件系統
我們使用 mkfs
命令將 /dev/sda8 分區格式化為 ext3,如清單 12 所示。
清單 12. 創建一個 ext3 文件系統
[root@echidna ~]# mkfs -t ext3 /dev/sda8 mke2fs 1.41.9 (22-Aug-2009) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 2624496 inodes, 10488429 blocks 524421 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 321 block groups 32768 blocks per group, 32768 fragments per group 8176 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. |
注意,一個日志與 ext3 一同創建。如果您想向一個現有 ext2 系統添加一個日志,使用 tune2fs
命令和 -j
選項。
針對 ext2 和 ext3 文件系統的一個有用選項是帶有一個名稱的 -L
選項,該選項為分區指定一個標簽。這個標簽可用于在掛載文件系統時代替設備名稱;它針對可能需要在各種控制文件中反映的更改提供某種級別的隔離。要為一個現有 ext2 或 ext3 文件系統顯示或設置標簽,使用 e2label
命令。標簽的***大小限制為 16 個字符。
最近的一個進展是使用 Universally Unique Identifier(或 UUID)而不是標簽。UUID 是一個 128 位標識符,通常顯示為 32 位 16 進制數字和 4 個連詞號。大多數 Linux 文件系統在被格式化時自動生成一個 UUID。使用 blkid
命令(不需要根權限)來查看我們剛剛格式化的分區的 UUID,如清單 13 所示。與標簽相比,UUID 更可能具備惟一性,對 USB 驅動器這樣的熱插拔設備尤其有用。
清單 13. 使用 blkid 命令顯示一個 UUID
[ian@echidna ~]$ blkid /dev/sda8 /dev/sda8: UUID="87040def-920e-4525-9c81-c585ddc46384" SEC_TYPE="ext2" TYPE="ext3" |
創建一個 XFS 文件系統
現在我們將剛才格式化為 ext3 的分區重新格式化為 XFS 文件系統。我們的 Fedora 12 系統使用 SELinux(Security Enhanced Linux),因此我們應該使用 -i
參數指定比默認值 256 更大的索引節點。推薦值是 512。注意,如果 XFS 格式化程序發現分區上已有一個公認的文件系統,那么它將會通知您。還要注意一點,XFS 格式重新指定了 UUID。
清單 14. 創建一個 XFS 文件系統
[root@echidna ~]# mkfs -t xfs -i size=512 /dev/sda8 mkfs.xfs: /dev/sda8 appears to contain an existing filesystem (xfs). mkfs.xfs: Use the -f option to force overwrite. [root@echidna ~]# mkfs -t xfs -f -i size=512 /dev/sda8 meta-data=/dev/sda8 isize=512 agcount=4, agsize=2622108 blks = sectsz=512 attr=2 data = bsize=4096 blocks=10488429, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=5121, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@echidna ~]# blkid /dev/sda8 /dev/sda8: UUID="1b6798f2-f07f-4d5e-af06-2470df37ddb3" TYPE="xfs" |
您可以使用帶有一個名稱的 -L
選項來設置 XFS 系統的標簽。還可以使用 xfs_admin
命令和 -L
選項來為一個現有 XFS 文件系統添加一個標簽。使用帶 -l
選項的 xfs_admin
命令來顯示一個標簽。與 ext2、ext3 和 ReiserFS 不同,XFS 標簽的***長度為 12 個字符。
創建一個 ReiserFS 文件系統
可以使用帶 -t reiserfs
選項的 mkfs
命令或 mkreiserfs
命令創建 ReiserFS 文件系統。ReiserFS 不支持 SELinux,正在被 Resier4 替代。
可以使用 -l
選項(或帶有一個名稱的 --label
選項)為一個 ReiserFS 系統設置標簽。可以使用 reiserfstune
命令添加標簽或顯示現有 ReiserFS 文件系統上的標簽。標簽的***長度限制為 16 個字符。
您可能需要在您的系統上安裝 ReiserFS 包才能使用 ReiserFS ,因為它可能不包含在默認安裝內。參見手冊頁或信息頁了解更多細節。
創建一個 vfat 文件系統
現在,我們將在 /dev/sda9 上創建 FAT32(vfat)文件系統。
清單 15. 創建一個 vfat 文件系統
[root@echidna ~]# mkfs -t vfat /dev/sda9 mkfs.vfat 3.0.9 (31 Jan 2010) [root@echidna ~]# blkid /dev/sda9 /dev/sda9: LABEL="" UUID="CF72-99A8" TYPE="vfat" |
vfat 文件系統的 UUIDs 比標準 UUIDs 短,因此不惟一的幾率要大一些。如果想用一個標簽代替,可以使用 dosfslabel
命令。DOS 分區的標簽的***長度限制為 11 個字符。
#p#
創建交換空間
現在我們使用 mkswap
命令在 /dev/sda4 分區上創建一些交換空間,如清單 16 所示。
清單 16. 創建交換空間
[root@echidna ~]# mkswap /dev/sda4 Setting up swapspace version 1, size = 4192960 KiB no label, UUID=8f5a3a05-73ef-4c78-bc56-0e9b1bcc7fdb |
注意,mkswap
的最近幾個版本都顯示生成的 UUID。
與常規文件系統不同,交換分區不能掛載。相反,它們使用 swapon
命令啟用。您的 Linux 系統的啟動腳本將負責自動啟用您的交換分區。
#p#
其他工具和文件系統
以下工具和文件系統不是這個考試的 LPI 目標的內容。這個非常簡略的概述僅觸及您可能會遇到的一些工具和文件系統的皮毛。
分區工具
許多 Linux 發行版都包含 cfdisk
或 sfdisk
命令。cfdisk
命令提供一個比 fdisk 更圖形化的界面,使用 ncurses 庫函數,如圖 1 所示。sfdisk
命令面向程序員,可被腳本化。如果您對該命令了如指掌,盡管使用它。
圖 1. 使用 cfdisk
用于處理分區表的另一個流行工具是 parted
,該命令能夠對許多類型的分區執行大小重置、格式化、創建分區以及銷毀分區等操作。盡管 parted
不能重置 NTFS 分區大小,但 ntfsresize
卻可以。qtparted
工具使用 Qt 工具包來提供一個圖形界面。它包含 parted
功能和 ntfsresize
功能。
gparted
是另一個圖形分區工具,主要用于 GNOME 桌面。它使用 GTK+GUI 庫,如圖 2 所示。(參見 參考資料 獲取到 qtparted
和 gparted
的鏈接。)
要使用上述工具,可能需要安裝相應的包,因為它們可能不包含在您的默認安裝中。
圖 2. 使用 gparted
許多發行版都允許在安裝過程中對磁盤分區,有時還允許縮小現有的 Windows NTFS 或 FAT32 分區。請參閱您的發行版的安裝文檔。
邏輯卷管理程序
Linux 的邏輯卷管理程序(或 LVM)允許將多個物理存儲設備合并為單個卷組。例如,您可能會將一個分區添加到一個現有卷組,而不是必須開辟出足夠您想要的文件系統使用的連續空間。
RAID
RAID(Redundant Array of Independent Disks)技術使用比高端系統上的磁盤便宜得多的廉價磁盤來提供一個可靠的數據存儲。RAID 有幾種類型,可以在硬件或軟件中實現。Linux 同時支持硬件和軟件 RAID。
更多文件系統
除了上面介紹的文件系統之外,您可能還會遇到其他文件系統。
IBM 的 Journaled File System (JFS)(目前用于 IBM 企業服務器)旨在用于高吞吐量服務器環境。它可用于 Linux,包含在幾個發行版中。要創建 JFS 文件系統,使用 mkfs.jfs
命令。
btrfs(B-Tree 文件系統)最初由 Oracle 開發,在 GPL 許可之下可用。它是一個用于 Linux 的新型寫入時拷貝(copy-on-write)文件系統,旨在關注容錯性、修復和輕松管理的同時實現高級特性。這個文件系統可能不會默認安裝,因此您可能需要安裝一個包(比如 btrfs-progs)來啟用 btrfs 支持。
還有其他文件系統,比如通常在嵌入式設備上使用的 cramfs 文件系統。
【編輯推薦】