Linux系統(tǒng)下的分區(qū)和文件系統(tǒng)詳解
我們的文章 “學(xué)習(xí) Linux,101:硬盤布局” 介紹了硬盤驅(qū)動器布局、分區(qū)、以及使用 fdisk
命令來查看分區(qū)信息的基本知識。您學(xué)習(xí)了主分區(qū)、擴(kuò)展分區(qū) 和邏輯分區(qū) 等分區(qū)的相關(guān)知識,了解到 Linux 文件系統(tǒng)包含一些文件,它們存儲在磁盤上或目錄 中的塊存儲設(shè)備 上。與許多其他系統(tǒng)一樣,Linux 系統(tǒng)上的目錄也可能包含其他目錄,這些目錄稱為子目錄。這篇文章還討論了一些指導(dǎo)您進(jìn)行分區(qū)選擇的注意事項(xiàng)。
本文將首先回顧一下塊設(shè)備和分區(qū),然后進(jìn)一步展示如何使用 fdisk
命令創(chuàng)建、修改或刪除塊設(shè)備上的分區(qū)。您還將學(xué)習(xí) mkfs
(mkfs 代表 make filesystem) 命令的各種形式;mkfs
命令用于將分區(qū)格式化為一種特殊的文件系統(tǒng)類型。
注意:除了 LPI 考試要求的工具和文件系統(tǒng)外,您可能會遇到或需要其他工具和文件系統(tǒng)。其他工具和文件系統(tǒng) 小節(jié)提供了其他可用工具的一個(gè)簡單摘要。
塊設(shè)備
塊設(shè)備 是能夠以固定大小塊 格式化的任意存儲設(shè)備的抽象層。單獨(dú)的塊的訪問可以獨(dú)立于其他塊的訪問。這樣的訪問通常稱為隨機(jī)訪問。
隨機(jī)可訪問的固定大小塊的抽象層允許程序使用這些塊設(shè)備,而無需擔(dān)心底層設(shè)備是硬盤驅(qū)動器、軟盤、CD、固態(tài)(solid-state)驅(qū)動器、網(wǎng)絡(luò)驅(qū)動器,還是某種虛擬設(shè)備,比如內(nèi)存中文件系統(tǒng)。
塊設(shè)備示例包括系統(tǒng)上的*** IDE 硬盤驅(qū)動器(/dev/sda 或 /dev/hda)或第二 SCSI、IDE 或 USB 驅(qū)動器(/dev/sdb)。使用 ls -l
命令來顯示 /dev 條目。每行輸出的***個(gè)字符是 b(針對一個(gè)塊設(shè)備,比如軟盤、CD 驅(qū)動器、IDE 硬盤驅(qū)動器或 SCSI 硬盤驅(qū)動器)和 c(針對一個(gè)字符設(shè)備,比如 a、終端(tty)或空設(shè)備。清單 1 展示了一些示例。
清單 1. Linux 塊設(shè)備和字符設(shè)備
[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 |
分區(qū)
對于某些塊設(shè)備,比如軟盤和 CD 或 DVD 磁盤,通常使用整個(gè)媒體作為單個(gè)文件系統(tǒng)。但是,對于大型硬盤驅(qū)動器,甚至是 USB 存儲器,更常見的用法是將可用空間劃分為幾個(gè)不同的分區(qū)。
分區(qū)的大小可能不同,不同的分區(qū)上可以擁有不同的文件系統(tǒng),因此一個(gè)磁盤可以用于多種目的,包括在多個(gè)操作系統(tǒng)之間共享該磁盤。例如,我使用的測試系統(tǒng)包含幾個(gè)不同的 Linux 發(fā)行版,有時(shí)還包含一個(gè) Windows® 系統(tǒng),它們都共享一個(gè)或兩個(gè)硬盤驅(qū)動器。
文章 “學(xué)習(xí) Linux,101:硬盤布局” 介紹過,硬盤驅(qū)動器擁有一個(gè)幾何參數(shù)(geometry),根據(jù)術(shù)語柱面、磁頭和扇區(qū)定義。即使是現(xiàn)代驅(qū)動器也使用邏輯塊尋址 (LBA),這使得幾何參數(shù)變得幾乎無關(guān)緊要,用于分區(qū)目的的基本分配單元通常仍舊是柱面。
#p#
顯示分區(qū)信息
分區(qū)信息存儲在磁盤上的分區(qū)表 中。分區(qū)表列示每個(gè)分區(qū)的起始柱面和結(jié)束柱面的相關(guān)信息,關(guān)于它的類型 的信息,以及它是否標(biāo)記為可引導(dǎo)。要?jiǎng)?chuàng)建和刪除分區(qū),需要使用一個(gè)專門設(shè)計(jì)的程序來編輯分區(qū)表。對于 LPI 考試,您需要了解 fdisk
程序,這也是本文介紹的程序,盡管也可以使用其他幾個(gè)工具。本文末尾將提到其中幾個(gè)工具。
fdisk
命令加上 -l
選項(xiàng)用于列示分區(qū)。如果想查看一個(gè)特定驅(qū)動器上的分區(qū),需要添加一個(gè)設(shè)備名稱,比如 /dev/sda。注意,分區(qū)工具需要根訪問權(quán)限。清單 2 展示了我的系統(tǒng)的兩個(gè)主硬盤驅(qū)動器上的分區(qū)。
清單 2. 使用 fdisk 列示分區(qū)
[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 |
注意:
- 標(biāo)題信息顯示磁盤大小和幾何參數(shù)。大多數(shù)使用 LBA 的磁盤每個(gè)柱面擁有 255 個(gè)磁頭,每個(gè)磁道擁有 63 個(gè)扇區(qū),總共擁有 16065 個(gè)扇區(qū),或者每個(gè)柱面 8225280 字節(jié)。
- 在第二個(gè)示例中,***個(gè)主分區(qū)(/dev/sda1)標(biāo)記為 bootable(或 active)。這允許標(biāo)準(zhǔn) DOS PC 主引導(dǎo)記錄引導(dǎo)該分區(qū)。這個(gè)標(biāo)志對 LILO 或 GRUB 引導(dǎo)裝載程序沒有意義。***個(gè)示例使用 GRUB 作為引導(dǎo)裝載程序,/dev/sda3 被標(biāo)記為 bootable 的原因可能是我以前使用這個(gè)驅(qū)動器的一次意外。
- Start 和 End 列顯示每個(gè)分區(qū)的起始和結(jié)束柱面。這些分區(qū)不能重疊且通常應(yīng)該相鄰,即中間沒有空間。
- Blocks 列顯示大小為 1K(1024 字節(jié))的塊的數(shù)量。對于本文撰寫之時(shí)使用的大多數(shù)磁盤而言,扇區(qū)大小是 512 字節(jié),因此一個(gè)分區(qū)中的塊的***數(shù)量是柱面數(shù)量(End + 1 - Start)和每個(gè)柱面的扇區(qū)數(shù)量的乘積的一半。塊數(shù)量后面的 + 號表示分區(qū)中的扇區(qū)沒有全部使用。
- Id 列表示分區(qū)的預(yù)定用途。類型 82 是表示 Linux 交換分區(qū),類型 83 表示 Linux 數(shù)據(jù)分區(qū)。已定義的分區(qū)類型大概有 100 種。第二個(gè)磁盤由幾個(gè)操作系統(tǒng)共享,其中包括 Windows/XP,因此出現(xiàn)了 Windows NTFS(也可能是 FAT32)分區(qū)。
#p#
使用 fdisk 進(jìn)行分區(qū)
您剛剛已經(jīng)看到如何使用 fdisk
命令來顯示分區(qū)信息。這個(gè)命令還提供了一個(gè)菜單驅(qū)動的環(huán)境來編輯分區(qū)表,以便創(chuàng)建或移除分區(qū)。
警告
開始修改分區(qū)之前,需要記住一些重要事項(xiàng)。如果不遵守以下這些原則,就會出現(xiàn)丟失您的現(xiàn)有數(shù)據(jù)的風(fēng)險(xiǎn)。
- 開始之前備份重要數(shù)據(jù),進(jìn)行任何可能會導(dǎo)致數(shù)據(jù)丟失的操作之前都應(yīng)這樣做。
- 不要更改正在使用的分區(qū)。事先詳細(xì)計(jì)劃,然后小心執(zhí)行。從 CD、DVD 或 USB 啟動一個(gè)實(shí)時(shí)發(fā)行版是確保沒有硬盤驅(qū)動器分區(qū)正在使用的一個(gè)好辦法。
- 了解您的工具。
fdisk
命令不會向您的磁盤提交任何更改,除非您要求它那樣做。其他工具,其中包括parted
可能會隨著您的操作提交更改。 - 如果的確犯了錯(cuò)誤,那么應(yīng)立即停止。分區(qū)工具對分區(qū)表進(jìn)行寫操作。除非您使用的工具還包含對您的磁盤的數(shù)據(jù)區(qū)域的移動、大小重置、格式化等寫操作功能,否則您的數(shù)據(jù)將不會受到影響。如果您的確犯了錯(cuò)誤,盡快停止操作并尋求幫助。您仍然有可能恢復(fù)此前的分區(qū)表定義,從而恢復(fù)您的分區(qū)和數(shù)據(jù)。
啟動 fdisk
要以交互模式啟動 fdisk
,只需提供一個(gè)磁盤的名稱(比如 /dev/hda 或 /dev/sdb)作為參數(shù)。以下示例啟動一個(gè) Knoppix 實(shí)時(shí) DVD。您需要根權(quán)限,并將看到類似于清單 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): |
大多數(shù)磁盤擁有超過 1024 個(gè)柱面,因此您通常會看到清單 3 中顯示的警告。類型 m
將顯示一個(gè)可用的單字母命令列表,如清單 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
命令來顯示這個(gè)特定磁盤上的現(xiàn)有分區(qū),清單 5 顯示輸出。
清單 5. 顯示現(xiàn)有分區(qū)表
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): |
這個(gè)特殊磁盤是一個(gè) 1TB 磁盤,包含一個(gè)略低于 80GB 的 Windows/XP 分區(qū)。它是一個(gè)主分區(qū),標(biāo)記為 bootable,這是 Windows 系統(tǒng)的典型特征。
添加分區(qū)
現(xiàn)在我們使用部分閑置空間來添加一些分區(qū)。
- 我們將創(chuàng)建一個(gè)交換分區(qū):/dev/sda4。這將是一個(gè)主分區(qū),填充 /dev/sda1 的結(jié)束柱面和 /dev/sda2 的起始柱面之間的 521 個(gè)柱面空隙。您不必對導(dǎo)致這個(gè)空隙的奇怪原因感到好奇;我只是為了撰寫本文而創(chuàng)建這個(gè)空隙。
- 我們將創(chuàng)建一個(gè) 40GB 的邏輯分區(qū):/dev/sda8。
- ***,我們將創(chuàng)建一個(gè) 2000MB 的小型邏輯分區(qū),以便在 Linux 和 Windows 系統(tǒng)之間共享數(shù)據(jù)。這個(gè)分區(qū)最終將格式化為 FAT32(或 vfat)。這個(gè)分區(qū)將命名為 /dev/sda9。
創(chuàng)建我們的分區(qū)
我們首先使用 n
命令來創(chuàng)建一個(gè)新分區(qū),如清單 6 所示。
清單 6. 創(chuàng)建***個(gè)分區(qū)
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): |
我們采用默認(rèn)值作為***個(gè)柱面并指定值 +521 作為柱面的數(shù)量。清單 6 顯示,我們的分區(qū)大小約為 4GB。由于它是一個(gè)主分區(qū),因此它的編號必須為 1 至 4。順序指定分區(qū)編號是個(gè)好主意;否則一些工具會報(bào)告錯(cuò)誤,fdisk
將警告我們:我們的分區(qū)表?xiàng)l目不再按磁盤順序排列。
還要注意一點(diǎn):我們的新分區(qū)類型被指定為 83,表明這是一個(gè) Linux 數(shù)據(jù)分區(qū)??梢詫⑦@個(gè)數(shù)字視為分區(qū)預(yù)定用途的操作系統(tǒng)的指示符。分區(qū)的最終用途應(yīng)該匹配這個(gè)設(shè)置,但這時(shí)我們的分區(qū)甚至還沒有格式化,更談不上有數(shù)據(jù)了。我們將首先創(chuàng)建其他分區(qū),然后介紹如何更改分區(qū)類型。
您可能已經(jīng)注意到,當(dāng)我們輸入 n
子命令創(chuàng)建一個(gè)新分區(qū)時(shí),惟一的選擇是 “l”(表示邏輯分區(qū))和 “p”(表示主分區(qū))。您只能看到剩余的可能分區(qū)類型的選項(xiàng)。如果驅(qū)動器還沒有擴(kuò)展分區(qū),您將看到選項(xiàng) “e”(表示擴(kuò)展分區(qū))。還要注意,我們的擴(kuò)展分區(qū)(/dev/sda3)為類型 5。
現(xiàn)在我們來定義 40GB Linux 分區(qū)和 2000MB FAT32 分區(qū)。這次我們只需指定大小 +40G 和 +2000M,分別表示 40GB 和 2000MB。結(jié)果如清單 7 所示。
清單 7. 創(chuàng)建數(shù)據(jù)分區(qū)
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): |
更改分區(qū)類型
在離開 fdisk
之前,我們將更改 swap 和 vfat 分區(qū)的分區(qū)類型。為此,我們使用 t
子命令來設(shè)置分區(qū)類型。我們將 /dev/sda4 設(shè)置為類型 82(Linux 交換分區(qū)),將 /dev/sda9 設(shè)置為類型 9(FAT32)。如果您想查看受支持類型的完整列表,請輸入 L
,如清單 8 所示。
清單 8. 更改分區(qū)類型
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ū)表
到目前為止,我們只是對分區(qū)表進(jìn)行了內(nèi)存中編輯。我們可以用 q
命令退出,不保存更改。如果某些分區(qū)不能滿足您的要求,您可以使用 d
命令來刪除一個(gè)或多個(gè)分區(qū),以便重新定義它們。如果您對設(shè)置滿意,則可以使用 v
命令來驗(yàn)證您的設(shè)置,然后使用 w
命令來寫入新的分區(qū)表并退出。參見清單 9。如果您再次運(yùn)行 fdisk -l
命令,您將看到,Linux 現(xiàn)在已能夠識別新分區(qū)。與其他操作系統(tǒng)不同的是,Linux 并不總是需要重新啟動才能看到更改。舉例來說,如果 /dev/hda3 變成 /dev/hda2,則需要重新啟動,因?yàn)樵瓉淼?/dev/hda2 已被刪除。如果需要重新啟動,fdisk
應(yīng)該會告訴您。
清單 9. 保存分區(qū)表
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
您可能已注意到,我們沒有更改任意分區(qū)上的 bootable 標(biāo)志?,F(xiàn)在,我們的磁盤還有 Windows Master Boot Record (MBR),因此將啟動標(biāo)記為 bootable 的***個(gè)主分區(qū)(我們的示例中為 NTFS 分區(qū))。
LILO 和 GRUB 都不使用 bootable 標(biāo)志。如果其中一個(gè)安裝在 MBR 中,那么它就能夠引導(dǎo) Windows/XP 分區(qū)。您也可以將 LILO 或 GRUB 安裝到您的 /boot 分區(qū)(/dev/hda2)中,將該分區(qū)標(biāo)記為 bootable 并移除 /dev/hda1 的 bootable 標(biāo)志。如果機(jī)器今后將恢復(fù)為 Windows 專用機(jī)器,那么保留原始 MBR 可能會有用。
如果需要,您還可以使用 fdisk
來修復(fù)分區(qū)表中的分區(qū)順序。這通常將會更改分區(qū)編號,因此您可能需要完成其他工作才能將您的系統(tǒng)恢復(fù)為工作系統(tǒng)。要進(jìn)行這個(gè)更改,使用 f
子命令切換到專家模式,然后使用 r
子命令修復(fù)分區(qū)順序,如清單 10 所示。如果您只是想看看新的分區(qū)順序而不實(shí)際更改,可以使用 q
子命令退出(本例的做法),而不是將更新后的分區(qū)表寫到磁盤中。
清單 10. 修復(fù)分區(qū)表順序
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 |
您現(xiàn)在已經(jīng)了解了向 Linux 工作站添加分區(qū)的一種方法。文章 “學(xué)習(xí) Linux,101:查找并放置文件系統(tǒng)” 介紹了其他可能的方法。
#p#
文件系統(tǒng)類型
Linux 支持幾種不同的文件系統(tǒng)。每個(gè)文件系統(tǒng)都有自己的優(yōu)缺點(diǎn)和性能特征。文件系統(tǒng)的一個(gè)重要屬性是日志,它允許系統(tǒng)在崩潰后更快地恢復(fù)。通常,日志文件系統(tǒng)比非日志文件系統(tǒng)更好。您可能還需要考慮,您選擇的文件系統(tǒng)是否支持 Security Enhanced Linux(或 SELinux)。以下是備考 LPI 考試需要了解的文件系統(tǒng)類型的一個(gè)簡單摘要。參考 參考資料 了解其他背景信息。
ext2 文件系統(tǒng)
ext2 文件系統(tǒng)(也稱為第二擴(kuò)展文件系統(tǒng))旨在克服早期 Linux 版本中使用的 Minix 文件系統(tǒng)的缺點(diǎn)。多年來,該文件系統(tǒng)一直廣泛應(yīng)用于 Linux。但 ext2 中沒有日志,現(xiàn)在基本上已被 ext3 取代。
ext3 文件系統(tǒng)
ext3 文件系統(tǒng)向標(biāo)準(zhǔn) ext2 文件系統(tǒng)添加了日志功能,因此是一個(gè)非常穩(wěn)定的文件系統(tǒng)的一個(gè)演化發(fā)展。它在大多數(shù)情況下提供合理的性能并且仍舊在改進(jìn)。由于它在可靠的 ext2 文件系統(tǒng)之上添加了日志功能,因此可以將現(xiàn)有 ext2 文件系統(tǒng)轉(zhuǎn)換為 ext3 文件系統(tǒng),并且在必要時(shí)還可以轉(zhuǎn)換回來。
ReiserFS 文件系統(tǒng)
ReiserFS 是一個(gè)基于 B 狀樹的文件系統(tǒng),擁有非常好的總體性能,特別是對于大量小文件。ReiserFS 擁有良好的伸縮性并具有日志功能。但該文件系統(tǒng)不再受到積極開發(fā),不支持 SELinux,基本上已被 Reiser4 取代。
XFS 文件系統(tǒng)
XFS 文件系統(tǒng)擁有日志功能,包含一些健壯的特性,并針對可伸縮性進(jìn)行了優(yōu)化。XFS 在 RAM 中強(qiáng)制緩存中轉(zhuǎn)(in-transit)數(shù)據(jù),因此如果使用 XFS,建議采用不間斷電源供應(yīng)。
交換文件系統(tǒng)
交換空間在使用之前必須相應(yīng)格式化,當(dāng)它通常不被視為文件系統(tǒng)。
vfat 文件系統(tǒng)
vfat 文件系統(tǒng)(也稱為 FAT32)沒有日志功能,且缺乏完整的 Linux 文件系統(tǒng)實(shí)現(xiàn)所需的許多特性。它可用于在 Windows 和 Linux 系統(tǒng)之間交換數(shù)據(jù),因?yàn)?Windows 和 Linux 都能讀取它。不要將這個(gè)文件系統(tǒng)用于 Linux,除非要在 Windows 和 Linux 之間共享數(shù)據(jù)。如果您在一個(gè) vfat 磁盤上解壓縮一個(gè) Linux 歸檔文件,那么您將丟失權(quán)限(比如執(zhí)行權(quán)限),還會丟失該歸檔文件中可能存儲的符號鏈接。
ext3 文件系統(tǒng)是一個(gè)成熟的文件系統(tǒng),用作幾個(gè)發(fā)行版上的默認(rèn)文件系統(tǒng)。ReiserFS 文件系統(tǒng)多年來一直用作一些發(fā)行版(包括 SUSE)的默認(rèn)文件系統(tǒng),但現(xiàn)在用得少了。
#p#
創(chuàng)建文件系統(tǒng)
Linux 使用 mkfs
命令來創(chuàng)建文件系統(tǒng),用 mkswap
命令來創(chuàng)建交換空間。mkfs
命令實(shí)際上是幾個(gè)特定于文件系統(tǒng)的命令的前端,這些命令包括針對 ext3 的 mkfs.ext3
和針對 ReiserFS 的 mkfs.reiserfs
。
您的文件系統(tǒng)上安裝的是什么文件系統(tǒng)支持?使用 ls /sbin/mk*
命令來找到答案。清單 11 展示了一個(gè)示例。
清單 11. 文件系統(tǒng)創(chuàng)建命令
[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 |
您將注意到一些命令的各種形式。例如,您通常會發(fā)現(xiàn),文件 mke2fs、mkfs.ext2 和 mkfs.ext3 是一樣的,文件 mkreiserfs 和 mkfs.reiserfs 也一樣。啟動系統(tǒng)可能需要的文件系統(tǒng)將使用多個(gè)名稱不同的相同文件。不能用于 Linux 中的 / 文件系統(tǒng)的那些文件系統(tǒng)(比如 vfat 或 msdos)可能會使用符號鏈接代替。
所有 mkfs
命令都有幾個(gè)公共選項(xiàng)。根據(jù)在 -type
選項(xiàng)中指定的文件系統(tǒng)類型,特定于正在創(chuàng)建的文件系統(tǒng)類型的選項(xiàng)將被傳遞到適當(dāng)?shù)膭?chuàng)建命令。我們的示例使用 mkfs -type
,但您也可以直接使用其他類型,效果一樣。例如,您可以使用 mkfs -type ext2
、mk2fs
或 mkfs.ext2
。要獲取一個(gè)特定文件系統(tǒng)的手冊頁,使用適當(dāng)?shù)?mkfs
命令作為名稱,比如 man mkfs.ext3
。下面的輸出示例中顯示的許多值都能通過 mkfs
的選項(xiàng)控制。
既然我們已經(jīng)創(chuàng)建了所有分區(qū),我們將重新啟動 Fedora 12 系統(tǒng)(而不是有點(diǎn)緩慢的實(shí)時(shí) Knoppix DVD)并格式化文件系統(tǒng)。當(dāng)然,如果愿意,您也可以繼續(xù)使用 Knoppix 系統(tǒng)。注意,創(chuàng)建文件系統(tǒng)需要根權(quán)限。
創(chuàng)建一個(gè) ext3 文件系統(tǒng)
我們使用 mkfs
命令將 /dev/sda8 分區(qū)格式化為 ext3,如清單 12 所示。
清單 12. 創(chuàng)建一個(gè) ext3 文件系統(tǒng)
[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. |
注意,一個(gè)日志與 ext3 一同創(chuàng)建。如果您想向一個(gè)現(xiàn)有 ext2 系統(tǒng)添加一個(gè)日志,使用 tune2fs
命令和 -j
選項(xiàng)。
針對 ext2 和 ext3 文件系統(tǒng)的一個(gè)有用選項(xiàng)是帶有一個(gè)名稱的 -L
選項(xiàng),該選項(xiàng)為分區(qū)指定一個(gè)標(biāo)簽。這個(gè)標(biāo)簽可用于在掛載文件系統(tǒng)時(shí)代替設(shè)備名稱;它針對可能需要在各種控制文件中反映的更改提供某種級別的隔離。要為一個(gè)現(xiàn)有 ext2 或 ext3 文件系統(tǒng)顯示或設(shè)置標(biāo)簽,使用 e2label
命令。標(biāo)簽的***大小限制為 16 個(gè)字符。
最近的一個(gè)進(jìn)展是使用 Universally Unique Identifier(或 UUID)而不是標(biāo)簽。UUID 是一個(gè) 128 位標(biāo)識符,通常顯示為 32 位 16 進(jìn)制數(shù)字和 4 個(gè)連詞號。大多數(shù) Linux 文件系統(tǒng)在被格式化時(shí)自動生成一個(gè) UUID。使用 blkid
命令(不需要根權(quán)限)來查看我們剛剛格式化的分區(qū)的 UUID,如清單 13 所示。與標(biāo)簽相比,UUID 更可能具備惟一性,對 USB 驅(qū)動器這樣的熱插拔設(shè)備尤其有用。
清單 13. 使用 blkid 命令顯示一個(gè) UUID
[ian@echidna ~]$ blkid /dev/sda8 /dev/sda8: UUID="87040def-920e-4525-9c81-c585ddc46384" SEC_TYPE="ext2" TYPE="ext3" |
創(chuàng)建一個(gè) XFS 文件系統(tǒng)
現(xiàn)在我們將剛才格式化為 ext3 的分區(qū)重新格式化為 XFS 文件系統(tǒng)。我們的 Fedora 12 系統(tǒng)使用 SELinux(Security Enhanced Linux),因此我們應(yīng)該使用 -i
參數(shù)指定比默認(rèn)值 256 更大的索引節(jié)點(diǎn)。推薦值是 512。注意,如果 XFS 格式化程序發(fā)現(xiàn)分區(qū)上已有一個(gè)公認(rèn)的文件系統(tǒng),那么它將會通知您。還要注意一點(diǎn),XFS 格式重新指定了 UUID。
清單 14. 創(chuàng)建一個(gè) XFS 文件系統(tǒng)
[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" |
您可以使用帶有一個(gè)名稱的 -L
選項(xiàng)來設(shè)置 XFS 系統(tǒng)的標(biāo)簽。還可以使用 xfs_admin
命令和 -L
選項(xiàng)來為一個(gè)現(xiàn)有 XFS 文件系統(tǒng)添加一個(gè)標(biāo)簽。使用帶 -l
選項(xiàng)的 xfs_admin
命令來顯示一個(gè)標(biāo)簽。與 ext2、ext3 和 ReiserFS 不同,XFS 標(biāo)簽的***長度為 12 個(gè)字符。
創(chuàng)建一個(gè) ReiserFS 文件系統(tǒng)
可以使用帶 -t reiserfs
選項(xiàng)的 mkfs
命令或 mkreiserfs
命令創(chuàng)建 ReiserFS 文件系統(tǒng)。ReiserFS 不支持 SELinux,正在被 Resier4 替代。
可以使用 -l
選項(xiàng)(或帶有一個(gè)名稱的 --label
選項(xiàng))為一個(gè) ReiserFS 系統(tǒng)設(shè)置標(biāo)簽??梢允褂?reiserfstune
命令添加標(biāo)簽或顯示現(xiàn)有 ReiserFS 文件系統(tǒng)上的標(biāo)簽。標(biāo)簽的***長度限制為 16 個(gè)字符。
您可能需要在您的系統(tǒng)上安裝 ReiserFS 包才能使用 ReiserFS ,因?yàn)樗赡懿话谀J(rèn)安裝內(nèi)。參見手冊頁或信息頁了解更多細(xì)節(jié)。
創(chuàng)建一個(gè) vfat 文件系統(tǒng)
現(xiàn)在,我們將在 /dev/sda9 上創(chuàng)建 FAT32(vfat)文件系統(tǒng)。
清單 15. 創(chuàng)建一個(gè) vfat 文件系統(tǒng)
[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 文件系統(tǒng)的 UUIDs 比標(biāo)準(zhǔn) UUIDs 短,因此不惟一的幾率要大一些。如果想用一個(gè)標(biāo)簽代替,可以使用 dosfslabel
命令。DOS 分區(qū)的標(biāo)簽的***長度限制為 11 個(gè)字符。
#p#
創(chuàng)建交換空間
現(xiàn)在我們使用 mkswap
命令在 /dev/sda4 分區(qū)上創(chuàng)建一些交換空間,如清單 16 所示。
清單 16. 創(chuàng)建交換空間
[root@echidna ~]# mkswap /dev/sda4 Setting up swapspace version 1, size = 4192960 KiB no label, UUID=8f5a3a05-73ef-4c78-bc56-0e9b1bcc7fdb |
注意,mkswap
的最近幾個(gè)版本都顯示生成的 UUID。
與常規(guī)文件系統(tǒng)不同,交換分區(qū)不能掛載。相反,它們使用 swapon
命令啟用。您的 Linux 系統(tǒng)的啟動腳本將負(fù)責(zé)自動啟用您的交換分區(qū)。
#p#
其他工具和文件系統(tǒng)
以下工具和文件系統(tǒng)不是這個(gè)考試的 LPI 目標(biāo)的內(nèi)容。這個(gè)非常簡略的概述僅觸及您可能會遇到的一些工具和文件系統(tǒng)的皮毛。
分區(qū)工具
許多 Linux 發(fā)行版都包含 cfdisk
或 sfdisk
命令。cfdisk
命令提供一個(gè)比 fdisk 更圖形化的界面,使用 ncurses 庫函數(shù),如圖 1 所示。sfdisk
命令面向程序員,可被腳本化。如果您對該命令了如指掌,盡管使用它。
圖 1. 使用 cfdisk
用于處理分區(qū)表的另一個(gè)流行工具是 parted
,該命令能夠?qū)υS多類型的分區(qū)執(zhí)行大小重置、格式化、創(chuàng)建分區(qū)以及銷毀分區(qū)等操作。盡管 parted
不能重置 NTFS 分區(qū)大小,但 ntfsresize
卻可以。qtparted
工具使用 Qt 工具包來提供一個(gè)圖形界面。它包含 parted
功能和 ntfsresize
功能。
gparted
是另一個(gè)圖形分區(qū)工具,主要用于 GNOME 桌面。它使用 GTK+GUI 庫,如圖 2 所示。(參見 參考資料 獲取到 qtparted
和 gparted
的鏈接。)
要使用上述工具,可能需要安裝相應(yīng)的包,因?yàn)樗鼈兛赡懿话谀哪J(rèn)安裝中。
圖 2. 使用 gparted
許多發(fā)行版都允許在安裝過程中對磁盤分區(qū),有時(shí)還允許縮小現(xiàn)有的 Windows NTFS 或 FAT32 分區(qū)。請參閱您的發(fā)行版的安裝文檔。
邏輯卷管理程序
Linux 的邏輯卷管理程序(或 LVM)允許將多個(gè)物理存儲設(shè)備合并為單個(gè)卷組。例如,您可能會將一個(gè)分區(qū)添加到一個(gè)現(xiàn)有卷組,而不是必須開辟出足夠您想要的文件系統(tǒng)使用的連續(xù)空間。
RAID
RAID(Redundant Array of Independent Disks)技術(shù)使用比高端系統(tǒng)上的磁盤便宜得多的廉價(jià)磁盤來提供一個(gè)可靠的數(shù)據(jù)存儲。RAID 有幾種類型,可以在硬件或軟件中實(shí)現(xiàn)。Linux 同時(shí)支持硬件和軟件 RAID。
更多文件系統(tǒng)
除了上面介紹的文件系統(tǒng)之外,您可能還會遇到其他文件系統(tǒng)。
IBM 的 Journaled File System (JFS)(目前用于 IBM 企業(yè)服務(wù)器)旨在用于高吞吐量服務(wù)器環(huán)境。它可用于 Linux,包含在幾個(gè)發(fā)行版中。要?jiǎng)?chuàng)建 JFS 文件系統(tǒng),使用 mkfs.jfs
命令。
btrfs(B-Tree 文件系統(tǒng))最初由 Oracle 開發(fā),在 GPL 許可之下可用。它是一個(gè)用于 Linux 的新型寫入時(shí)拷貝(copy-on-write)文件系統(tǒng),旨在關(guān)注容錯(cuò)性、修復(fù)和輕松管理的同時(shí)實(shí)現(xiàn)高級特性。這個(gè)文件系統(tǒng)可能不會默認(rèn)安裝,因此您可能需要安裝一個(gè)包(比如 btrfs-progs)來啟用 btrfs 支持。
還有其他文件系統(tǒng),比如通常在嵌入式設(shè)備上使用的 cramfs 文件系統(tǒng)。
【編輯推薦】
- 當(dāng)下流行的分布式文件系統(tǒng)大閱兵
- 輕松玩轉(zhuǎn)Solaris ZFS文件系統(tǒng)的備份恢復(fù)
- 細(xì)說嵌入式Linux文件系統(tǒng)的制作方法
- 6月第3周系統(tǒng)升級錄:ZFS與Linux文件系統(tǒng)的變革