之所以想到寫這篇,是因為本人在折騰Linux系統的過程中,有多次掉入硬盤分區的陷阱的經歷。最近幾天,再一次掉入坑中,折騰了兩天才從坑中爬出來。經過多方查詢資料,終於弄明白了硬盤分區的一些概念。下面將其記錄下來,以警示來者。
說起我自己掉坑的經歷,無不與WinXP和Linux的激烈碰撞有關。多年前,我就開始在一台電腦上同時安裝WinXP和Linux,只要遵守先安裝WinXP再安裝Linux的順序,就不會出問題,Linux的安裝程序會自動識別多系統,安裝完成後可順利啟動多系統。有一天,我覺得單用Linux就夠了,於是就格了整個硬盤安裝了Linux。又有一天,我覺得還是要用WinXP,於是就重新安裝WinXP(不要對我說虛擬機,多年前我的電腦還只有256M內存,虛擬機根本跑不動),結果發現,WinXP的安裝程序沒辦法對硬盤進行分區了。這個坑是由Linux中的LVM引起的,WinXP識別不了LVM分區,那個時代的WinPE、DOS工具箱中的所有工具都沒辦法識別LVM,而那時我對Linux的了解又只停留在只會在安裝系統的時候分區,根本不知道Linux系統中還有fdisk、parted這樣的工具,所以折騰了許久才從坑裡面爬出來。多年後的現在,我又一次掉入了坑中。我工作時用的電腦是WinXP系統(天朝國情,你懂的),為了干點私活,我又裝了個Ubuntu上去了,這兩個系統一直相安無事。直到有一天,我把Ubuntu系統又折騰掛了,於是重裝,因為在分區的時候不小心選擇了默認的“清除整個盤並安裝Ubuntu”,然後硬盤就被整個格掉了,WinXP就沒有了。我當時想,這多大點兒事,我再裝個WinXP不就完了嗎。但是問題來了,無論我怎麼安裝,WinXP系統就是啟動不了。後來才整明白,這個坑是硬盤采用了GPT分區引起的。那為什麼我讓Ubuntu自動分區它就分成了GPT分區呢?這也怪這台惠普的工作用機比較奇葩,它即支持legacy BIOS,也支持EFI,當原來WinXP存在時,它用的當然是MBR分區(msdos分區),所以安裝Ubuntu時就是使用的MBR分區,而後來Ubuntu自動分區時,它看到主板支持EFI,就自動把硬盤整成GPT分區了。我也是折騰了幾天才明白這個道理,最後終於在Ubuntu LiveCD的parted程序的幫助下,使用一個mklabel msdos命令把硬盤從GPT分區更改為MBR分區,然後再按順序安裝WinXP和Ubuntu,才算是從坑裡面爬出來。
對於那些長期管理大型機房和大存儲容量的服務器的朋友,對於硬盤分區,他們肯定是早就做好了功課。不會像我這樣,直到碰到問題才會去學習相關的知識。對於硬盤分區的這些知識,我總結如下(只是簡單總結,具體內容請大家自行搜素):
1、傳統的BIOS只支持從MBR分區的硬盤啟動。MBR分區的分區表保存在硬盤的第一個扇區,而且只有64字節,所以最多只能有四個表項。也就是說,我們只能把硬盤分為4主分區,或者分成小於等於3個主分區再加一個擴展分區。擴展分區又可以分為多個邏輯分區。MBR分區的優點就是簡單,大家都用,所以大家都懂的嘛,很多操作系統都可以從MBR分區的硬盤啟動。缺點就是MBR分區不能識別大於2T的硬盤空間,也不能有大於2T的分區;
2、GPT分區的硬盤可以解決以上MBR分區的所有缺點,它沒有4個主分區的限制,想分幾個主分區就可以分幾個主分區,它可以識別大於2T的硬盤空間,每個分區的大小也可以超過2T。但是它的缺點是需要操作系統支持。比如只有WinXP 64位、Win Vista、Win 7和Win 8和比較新的Linux發行版支持GPT分區的硬盤。而且,如果沒有EFI的支持的話,以上系統也只能將GPT分區的硬盤當成數據盤,不能從GPT分區的硬盤啟動;
3、要從GPT分區的硬盤啟動,則主板使用EFI、硬盤使用GPT分區、操作系統支持GPT和EFI這三個條件缺一不可。目前比較新的64位Linux系統和Win8系統都是支持EFI的,所以都是需要從GPT分區的硬盤啟動的。現在的電腦主板已經逐漸拋棄legacy BIOS,而只支持EFI了。(像我的工作機這樣的過渡產品將越來越少。)目前很多預裝Win8的筆記本的主板幾乎都只支持EFI了。所以,學習GPT和EFI的相關知識勢在必行;
4、以上分區策略都是固定分區。硬盤分區一旦完成,則分區的大小不可改變,如果要改變分區的大小的話,只有重新分區。而且由於沒有辦法把多個硬盤分到一個區,所以再怎麼分,每個分區的大小都有限。所以我們需要一種動態分區的東西。LVM就是這樣一個東東,它叫邏輯卷管理。使用LVM的機制是這樣的:首先把硬盤分區或者整塊硬盤標記為一個物理卷(PV),然後再創建一個卷組(VG),把一個或多個物理卷加入卷組,最後對卷組進行分區,每一個分區稱為一個邏輯卷(LV)。LVM的優點就是可以隨時向卷組中添加物理卷擴展卷組的大小,以可以動態調整邏輯卷的大小。這在服務器中尤其有用,比如說有一個原本有100個用戶的服務器,其/home目錄下就會有100個用戶的主目錄,如果給他們每人分配20G的空間的話,就會占滿一個2T的硬盤,如果這時再來100個用戶怎麼辦?如果使用LVM就可以順利解決這個問題,我們可以再加一個3T的硬盤,然後把這個硬盤加入卷組就可以擴大卷組的大小,然後再調整/home所在的邏輯卷的大小即可。LVM既可以搭配MBR使用,也可以搭配GPT使用。
下面通過Ubuntu 14.04安裝過程中自動分區的策略來驗證以上知識點。首先,對於只支持legacy BIOS的電腦,安裝Ubuntu時分區選項如下:
這時,不選擇啟動LVM的選項。安裝完操作系統後,使用parted程序查看硬盤分區,通過查看/etc/fstab文件來了解哪個分區對應哪個文件系統,如下圖:
通過上面圖片中parted程序中的print命令的輸出可以看出,硬盤的分區表類型為msdos,也就是MBR分區。硬盤分為一個主分區sda1和一個擴展分區sda2,主分區sda1占20.4G,擴展分區sda2只有1072M,擴展分區中只有一個邏輯分區sda5。通過/etc/fstab可以看出主分區sda1掛載到根目錄,邏輯分區sda5為交換空間。
上面的分區方案是最簡單最常用的一種。下面來看看啟用LVM是什麼效果。在選擇分區方案的界面選擇開啟LVM的選項,如下圖:
安裝完操作系統後,還是通過parted程序和/etc/fstab來查看硬盤的分區及使用情況,如下圖:
從圖中可以看出,分區表的類型還是msdos。硬盤還是只分了一個主分區sda1和一個擴展分區sda2,但是主分區sda1只有255M,擴展分區sda2倒是有21.2G,同樣擴展分區只分為一個邏輯分區sda5,邏輯分區sda5占用擴展分區中全部的21.2G空間,而且sda5的標志是lvm,說明該分區被標記為一個物理卷(PV),它肯定是被加入到了一個卷組(VG)中。通過/etc/fstab文件可以看出,主分區sda1掛載到/boot,而根目錄和交換空間掛載的是兩個邏輯卷(LV)。
通過LVM命令可以查看系統中卷組、物理卷和邏輯卷的信息,如下圖:
通過pvs和pvdisplay命令,可以看到系統中只有一個物理卷,那就是/dev/sda5,該物理卷加入到了卷組ubuntu-vg之中。通過vgs和vgdisplay命令可以看到系統中只有一個卷組,那就是ubuntu-vg,該卷組被分為兩個邏輯卷。
再看下圖:
通過lvs和lvdisplay命令可以看到卷組分為兩個邏輯卷,它們分別掛載到根目錄和交換空間。
通過LVM命令還可以進行更多的操作,比如創建新的卷組,將新的物理卷加入到卷組,增大或減小邏輯卷的大小等等。具體用什麼命令,一個help即可搞定。
最後,來看看在主板只支持EFI的情況下,Ubuntu如何分區。安裝的啟動界面如下:
這個安裝界面和legacy BIOS系統下的安裝界面是不同的,傳統的安裝界面如下:
在EFI模式下,還是選擇自動分區。安裝完操作系統後,使用parted和/etc/fstab來查看硬盤的分區和使用情況,如下圖:
通過以上圖片可以看出,硬盤的分區表類型為gpt,硬盤分為三個區,都是主分區。其中第1個分區sda1的大小是537M,文件系統是fat32,其掛載的路徑是/boot/efi,而另外兩個分區一個掛載到根目錄,一個為交換空間。從上面的信息我們不難推斷:只支持EFI的主板只能從GPT分區的硬盤啟動,而且該硬盤第1個分區必須為fat32文件系統,該文件系統中存放的是EFI需要的各種文件。
如果在安裝Ubuntu系統的時候不是選擇自動分區,而是選擇最後那個“其它選項”來自定義分區,會發現其實Ubuntu提供的自定義分區功能很有限。它沒辦法讓人選擇是使用MBR分區還是使用GPT分區,也沒有辦法選擇是否啟用LVM。如果需要更靈活的管理的話,還是只有點擊“試用Ubuntu”按鈕,進入LiveCD的Ubuntu系統後,使用parted命令和lvm命令手動管理硬盤分區。