存儲的選型、規劃與管理等工做一直以來都是平常系統運維工做中的重點。MBR與GPT兩種類型的分區表的選擇與使用則是在磁盤管理中須要根據應用場景來注或考慮的要點。結合筆者多年的運維工做經驗,引起了對這些問題的一些思考,藉此文進行一些分享。linux
主引導記錄(Master Boot Record,縮寫:MBR),又叫作主引導扇區,是計算機開機後訪問硬盤時所必需要讀取的首個扇區,它在硬盤上的三維地址爲(柱面,磁頭,扇區)=(0,0,1)。在深刻討論主引導扇區內部結構的時候,有時也將其開頭的446字節內容特指爲「主引導記錄」(MBR),其後是4個16字節的「磁盤分區表」(DPT),以及2字節的結束標誌(55AA)。所以,在使用「主引導記錄」(MBR)這個術語的時候,須要根據具體狀況判斷其究竟是指整個主引導扇區,仍是主引導扇區的前446字節。ios
主引導扇區記錄着硬盤自己的相關信息以及硬盤各個分區的大小及位置信息,是數據信息的重要入口。若是它受到破壞,硬盤上的基本數據結構信息將會丟失,須要用繁瑣的方式試探性的重建數據結構信息後纔可能從新訪問原先的數據。主引導扇區內的信息能夠經過任何一種基於某種操做系統的分區工具軟件寫入,但和某種操做系統沒有特定的關係,即只要建立了有效的主引導記錄就能夠引導任意一種操做系統(操做系統是建立在高級格式化的硬盤分區之上,是和必定的文件系統相聯繫的)。centos
對於硬盤而言,一個扇區可能的字節數爲128×2n(n=0,1,2,3)。大多狀況下,取n=2,即一個扇區(sector)的大小爲512字節。bash
全局惟一標識分區表(GUID Partition Table,縮寫:GPT)是一個實體硬盤的分區表的結構佈局的標準。它是可擴展固件接口(EFI)標準(被Intel用於替代我的計算機的BIOS)的一部分,被用於替代BIOS系統中的一32bits來存儲邏輯塊地址和大小信息的主引導記錄(MBR)分區表。對於那些扇區爲512字節的磁盤,MBR分區表不支持容量大於2.2TB(2.2×1012字節)的分區,然而,一些硬盤製造商(諸如希捷和西部數據)注意到這個侷限性,而且將他們的容量較大的磁盤升級到4KB的扇區,這意味着MBR的有效容量上限提高到16 TiB。 這個看似「正確的」解決方案,在臨時地下降人們對改進磁盤分配表的需求的同時,也給市場帶來關於在有較大的塊(block)的設備上從BIOS啓動時,如何最佳的劃分磁盤分區的困惑。GPT分配64bits給邏輯塊地址,於是使得最大分區大小在264-1個扇區成爲可能。對於每一個扇區大小爲512字節的磁盤,那意味着能夠有9.4ZB(9.4×1021字節)或8 ZiB個512字節(9,444,732,965,739,290,426,880字節或18,446,744,073,709,551,615(264-1)個扇區×512(29)字節每扇區)。數據結構
與支持最大卷爲2TB(Terabytes)而且每一個磁盤最多有4個主分區(或3個主分區,1個擴展分區和無限制的邏輯驅動器)的MBR磁盤分區的類型相比,GPT磁盤分區樣式支持最大爲128個分區,一個分區最大18EB(Exabytes),只受到操做系統限制(因爲分區表自己須要佔用必定空間,最初規劃硬盤分區時,留給分區表的空間決定了最多能夠有多少個分區,IA-64版Windows限制最多有128個分區,這也是EFI標準規定的分區表的最小尺寸)。與MBR分區的磁盤不一樣,相當重要的平臺操做數據位於分區,而不是位於非分區或隱藏扇區。另外,GPT分區磁盤有備份分區表來提升分區數據結構的完整性。在UEFI系統上,一般是經過ESP分區中的EFI應用程序文件啓動GPT硬盤上的操做系統,而不是活動主分區上的引導程序。架構
在RHEL7系列及周邊發行版中,MBR類型的分區表是系統缺省配置,如需使用GPT類型的分區表,還須要進行特殊配置(下文會進行介紹)。運維
默認狀況下,CentOS7系列是以MBR類型的分區表來安裝操做系統的,若是不經過特殊設置,那麼在GUI安裝界面沒法選擇GPT分區表類型的。在安裝操做系統選擇的引導界面,講光標移到第一行,按下Tab鍵,插入一個空格,輸入inst gpt,按下回車鍵,繼續引導,便可將操做系統安裝到分區表類型爲GPT的分區下。具體以下圖:
其餘安裝、操做過程,大同小異。ide
[root@gpt ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 10G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 9G 0 part ├─centos_gpt-root 253:0 0 8G 0 lvm / └─centos_gpt-swap 253:1 0 1G 0 lvm [SWAP] sr0 11:0 1 1024M 0 rom [root@gpt ~]# fdisk -l /dev/sda WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. 磁盤 /dev/sda:10.7 GB, 10737418240 字節,20971520 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理):512 字節 / 4096 字節 I/O 大小(最小/最佳):4096 字節 / 4096 字節 磁盤標籤類型:gpt Disk identifier: 3B24C802-3FC5-4D42-9D76-F9D7250B310B # Start End Size Type Name 1 2048 4095 1M BIOS boot 2 4096 2101247 1G Microsoft basic 3 2101248 20969471 9G Linux LVM [root@gpt ~]# parted /dev/sda print Model: Msft Virtual Disk (scsi) Disk /dev/sda: 10.7GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: pmbr_boot Number Start End Size File system Name 標誌 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 1076MB 1074MB xfs 3 1076MB 10.7GB 9661MB lvm [root@gpt ~]# cfdisk /dev/sda cfdisk (util-linux 2.23.2) 磁盤驅動器:/dev/sda 大小:10737418240 字節,10.7 GB 磁頭數:255 每磁道扇區數:63 柱面數:1305 名稱 標誌 分區類型 文件系統 [標籤] 大小 (MB) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- sda1 啓動,不可用 主分區 GPT 10737.42 *
以上內容主要展現了lsblk、fdisk、parted、cfdisk等四款工具。lsblk主要用於查看磁盤及分區狀況,fdisk爲較爲經常使用的分區工具,支持2TB如下容量的磁盤的分區操做,若是超過2TB以上容量的磁盤,則須要使用parted來進行分區,cfdisk則是一款比較容易上手的分區工具。這些工具在以前的文章中有介紹,能夠查閱以前文章。工具
[root@mbr ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 10G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 9G 0 part ├─centos-root 253:0 0 8G 0 lvm / └─centos-swap 253:1 0 1G 0 lvm [SWAP] sdb 8:16 0 1G 0 disk sdc 8:32 0 1G 0 disk sdd 8:48 0 1G 0 disk sde 8:64 0 1G 0 disk sr0 11:0 1 1024M 0 rom [root@gpt ~]# fdisk -l /dev/sdb WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. 設備 Boot Start End Blocks Id System /dev/sdb1 2048 501759 249856 83 Linux /dev/sdb2 501760 706559 102400 83 Linux /dev/sdb3 706560 911359 102400 83 Linux /dev/sdb4 911360 1105919 97280 83 Linux 命令(輸入 m 獲取幫助):n If you want to create more than four partitions, you must replace a primary partition with an extended partition first. 命令(輸入 m 獲取幫助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盤。 [root@mbr ~]# partprobe [root@mbr ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 10G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 9G 0 part ├─centos-root 253:0 0 8G 0 lvm / └─centos-swap 253:1 0 1G 0 lvm [SWAP] sdb 8:16 0 1G 0 disk ├─sdb1 8:17 0 244M 0 part ├─sdb2 8:18 0 100M 0 part ├─sdb3 8:19 0 100M 0 part └─sdb4 8:20 0 95M 0 part sdc 8:32 0 1G 0 disk sdd 8:48 0 1G 0 disk sde 8:64 0 1G 0 disk sr0 11:0 1 1024M 0 rom
從上面的實驗,咱們能夠看出,MBR類型的分區表在使用過程當中會形成h 儲空間的浪費。也就是說,一塊磁盤,建立了4個主分區,若是4個主分區的空間使用總和小於磁盤實際可用空間,那麼就沒法再繼續進行分區操做,所以是沒法充分利用這些磁盤空間的。佈局
刪除這些分區後,從該磁盤第4個分區開始,系統默認使用擴展分區,經過擴展分區新建分區,存儲空間浪費的狀況一樣存在。
[root@mbr ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 10G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 9G 0 part ├─centos-root 253:0 0 8G 0 lvm / └─centos-swap 253:1 0 1G 0 lvm [SWAP] sdb 8:16 0 1G 0 disk ├─sdb1 8:17 0 100M 0 part ├─sdb2 8:18 0 100M 0 part ├─sdb3 8:19 0 100M 0 part ├─sdb4 8:20 0 1K 0 part ├─sdb5 8:21 0 10M 0 part ├─sdb6 8:22 0 10M 0 part └─sdb7 8:23 0 77M 0 part sdc 8:32 0 1G 0 disk sdd 8:48 0 1G 0 disk sde 8:64 0 1G 0 disk sr0 11:0 1 1024M 0 rom
下面依然使用fdisk對磁盤sdb進行分區,可是把磁盤的分區表類型改爲了GPT,部分結果以下:
[root@gpt ~]# fdisk -l /dev/sdb 命令(輸入 m 獲取幫助):g Building a new GPT disklabel (GUID: 757B3774-B7F0-4650-80B1-EAA13E59C602) 將顯示/記錄單位更改成盲區。 命令(輸入 m 獲取幫助):n 分區號 (1-128,默認 1): 第一個扇區 (2048-2097118,默認 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2097118,默認 2097118):+100M 已建立分區 1 命令(輸入 m 獲取幫助):p 磁盤 /dev/sdb:1073 MB, 1073741824 字節,2097152 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理):512 字節 / 4096 字節 I/O 大小(最小/最佳):4096 字節 / 4096 字節 磁盤標籤類型:gpt Disk identifier: 757B3774-B7F0-4650-80B1-EAA13E59C602 # Start End Size Type Name 1 2048 206847 100M Linux filesyste [root@mbr ~]# partprobe [root@mbr ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 10G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 9G 0 part ├─centos-root 253:0 0 8G 0 lvm / └─centos-swap 253:1 0 1G 0 lvm [SWAP] sdb 8:16 0 1G 0 disk ├─sdb1 8:17 0 100M 0 part ├─sdb2 8:18 0 100M 0 part ├─sdb3 8:19 0 100M 0 part ├─sdb4 8:20 0 100M 0 part ├─sdb5 8:21 0 100M 0 part ├─sdb6 8:22 0 100M 0 part └─sdb7 8:23 0 423M 0 part sdc 8:32 0 1G 0 disk sdd 8:48 0 1G 0 disk sde 8:64 0 1G 0 disk sr0 11:0 1 1024M 0 rom
從操做過程當中,咱們可用看到,分區號1-128,與前文所述一致。磁盤分區以後可用空間與實際空間差距不大,存儲空間浪費較小。
4.1 在RHEL7.X系列及周邊發行版中,在磁盤空間小於2TB的系統安裝過程當中採用的默認的分區類型是MBR,如需使用GPT還需特殊設置。
4.2 對於存儲空間大於2TB的存儲設備,儘可能在使用GPT類型的分區表,避免形成存儲空間的浪費。
4.3 在存儲設備的使用以前,要明確用途,對數據的總量有一個整體性的把握。
4.4 在基於VMware、KVM等技術架構的雲計算平臺中,磁盤空間的擴展儘可能以獨立磁盤設備的形式進行擴展,儘可能減小在原磁盤上進行空間擴展這一類操做。由於在前文已經說起,默認狀況下RHEL7.X的磁盤分區類型爲MBR。也就是說,在原磁盤上進行空間擴展的話,每次都新建主分區,那麼最多隻能擴展4次,即便後期以擴展分區進行擴展,規劃不慎,也是會形成存儲空間的浪費。這一點筆者在過去兩三年的運維生涯中深有感悟。
4.5 針對不一樣規格的存儲設備,分區工具的選擇也是有要求的,這一點須要特別注意。