MBR分區GPT分區詳解

描述:

1,什麼是磁盤分區

  磁盤分區是使用分區編輯器(partition editor)在磁盤上劃分幾個邏輯部分,盤片一旦劃分成數個分區(Partition),不同類的目錄與文件可以存儲進不同的分區。

2,硬盤結構及參數

  3D參數(Disk Geometry):CHS(Cylinder/Head/Sector) 

  C-Cylinder(柱面):柱面數表示硬盤每面盤片上有幾條磁道,最大爲1024(用10個二進制位儲);

  H-Head(磁頭):磁頭數表示硬盤總共有幾個磁頭,也就是幾面盤片,最大爲256(用8個二進制位存儲);

  S-Sector(扇區):扇區數表示每條磁道上有幾個扇區,最大爲63(用6個二進制位存儲)。

  Track(磁道):當磁盤旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁盤表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁道

  LBA:邏輯區塊地址,是描述電腦存儲設備上數據所在區塊的通用機制,一般用在像硬盤這樣的輔助記憶設備


3,分區方式:

  linux中有兩種分區方式:MBR和GPT

MBR: (Master Boot Record)主引導記錄,是傳統的分區機制,應用於絕大多數使用BIOS的PC設備,使用32位表示扇區數。

  特點:

     MBR支持32位和64位系統

     MBR支持分區數量有限

     MBR只支持不超過2T的硬盤,超過2T的硬盤將只能用2T空間(有第三方解決方法)


GPT:GUID(Globals Unique Identifiers)Partition Table 全局唯一標識,是一個較新的分區機制,解決了MBR很多缺點。

   使用128位UUID 表示磁盤和分區GPT分區表自動備份在頭和尾兩份,並有CRC校驗位

支持超過2T的磁盤(64位尋址空間),使用64位,支持128個分區,支持8Z(512Byte/block )64Z(4096Byte/block)。fdisk最大隻能建立2TB大小的分區,創建一個大於2TB的分區使用parted,gdisk分區工具

   特點: 

       向後兼容MBR

       必須在支持UEFI的硬件上才能使用(Intel提出,用於取代BIOS)

       必須使用64位系統

       Mac、Linux系統都能支持GPT分區格式

       Windows 7/8 64bit、Windows Server 2008 64bit支持GPT


MBR分區

  分區劃分基於磁盤柱面,利用參考柱面號碼的方式來處理,從CentOS6開始已經支持採用扇區的方式來劃分分區。

  其實所謂的“分區”只是針對那個64bytes 的分區表進行設置而已;

  硬盤默認的分區表僅能寫入四組分區信息;

  這四組分區信息我們稱爲主(Primary)分區或擴展(Extended)分區;

  所以,MBR的分區方式爲:4個主分區或{3主分區+1擴展(N個邏輯分區)}

wKiom1fCW3eQSWgQAAB7LMNjdHI030.png

常用分區方式:

wKioL1fCWsDxxA5pAAAWvlfJ4i4846.gif

wKiom1fCWsCR3OvoAAALt0VRUH0715.png

wKiom1fCWsDhHnt9AAATHuj2jyU711.gif

wKioL1fCWsDzrB0KAAAJbN55DFM065.png


MBR引導扇區結構

0磁道0扇區:第一個扇區512bytes MBR引導扇區

  主引導程序(boot loader):446bytes, 可以安裝引導加載程序

  主分區表(partition table):64bytes,記錄整塊硬盤分區的狀態

        16bytes: 標識一個分區,一共只能分4個分區(主+擴展)

  結束標識:  2 bytes, 55AA ,MBR區域的有效性標識;55AA爲有效


主分區表所在的64個bytes容量中,每16個bytes分爲一個項,總共分爲四組記錄區,每組記錄區記錄了該區段的起始與結束的柱面號碼,等信息

分區結構:

wKioL1fCXCbDX6yxAAA24T_n8bI531.jpg

  BYTE State:分區狀態,00=未激活,80=激活(注意此項);

  BYTE StartHead:分區起始磁頭號;

  WORD StartSC:分區起始扇區和柱面號。

  BYTE Type:分區類型,如0x0B=FAT32,0x83=Linux等,00表示此項未用;

  BYTE EndHead:分區結束磁頭號;

  WORD EndSC:分區結束扇區和柱面號,定義同前;

  DWORD Relative:在線性尋址方式下的分區相對扇區地址(對於基本分區即爲絕對地址);

  DWORD Sectors:分區大小(總扇區數)。


什麼是擴展分區?

   所謂擴展分區,嚴格地講它不是一個實際意義的分區,它僅僅是一個指向下一個分區的指針,這種指針結構將形成一個單向鏈表。這樣在主引導扇區中除了主分區外,僅需要存儲一個被稱爲擴展分區的分區數據,通過這個擴展分區的數據可以找到下一個分區(實際上也就是下一個邏輯磁盤)的起始位置,以此起始位置類推可以找到所有的分區。無論系統中建立多少個邏輯磁盤,在主引導扇區中通過一個擴展分區的參數就可以逐個找到每一個邏輯磁盤


擴展分區結構:擴展引導記錄(EBR)+ 邏輯分區

  注:擴展分區中的每個邏輯驅動器都存在一個類似於MBR的擴展引導記錄( Extended Boot Record, EBR)


擴展引導扇區(EBR):類似於MBR的擴展引導記錄,擴展引導記錄包括一個擴展分區表和該扇區的標籤.

   擴展引導記錄將記錄只包含擴展分區中每個邏輯驅動器的第一個柱面的第一面的信息,但是,如果磁盤上沒有擴展分區,那麼就不會有擴展引導記錄和邏輯驅動器。

EBR結構:

   邏輯分區前扇區,如擴展分區0號扇區(512bytes)

    前446bytes:未使用,全爲0;

擴展分區表(64bytes):記錄分區狀態,每16bytes分爲一個項,共四個項。

    第一項:指向它自身的引導扇區;

    第二項:指向下一個邏輯驅動器的EBR

        注:如果不存在進一步的邏輯驅動器,第二項不會使用,且被記錄成一系列零。

    第三項:未使用

    第四項:未使用

結束標識(2bytes): 55AA ,有效性標識;55AA爲有效


GPT分區:

  GPT:全局唯一標識分區表(GUID Partition Table,縮寫:GPT)是一個實體磁盤的分區表的結構佈局的標準。它是可擴展固件接口(EFI)標準(被Intel用於替代個人計算機的BIOS)的     一部分,被用於替代BIOS系統中的一32bits來存儲邏輯塊地址和大小信息的主引導記錄(MBR)分區表。

  GPT分配64bits給邏輯塊地址,因而使得最大分區大小在2-1個扇區成爲了可能。對於每個扇區大小爲512字節的磁盤,那意味着可以有9.4ZB(9.4 x 10字節)或8ZiB-512字節 

wKioL1fCXMSChsIVAAB-zxRPcMc149.jpg


LBA0:保護性MBR,

 在GPT分區表的最開頭,處於兼容性考慮仍然存儲了一份傳統的MBR(LBA 0),這個MBR叫做保護性MBR(Protective MBR)。其中包含有磁盤簽名,MBR分區表,結束標誌。這裏沒有引導代碼,分區表中只有一個分區表項,GPT不會用到,這個分區項只是爲了讓系統認爲磁盤是合法的。


LBA1:主要GPT頭部:

  主要GPT頭部位於1號扇區,會定義分區表的起始位置,結束位置,分區表項個數;

分區表頭還記錄了這塊硬盤的GUID,記錄了分區表頭本身的位置和大小以及備份分區表頭和分區表的位置和大小(在硬盤的最後)。它還儲存着它本身和分區表的CRC32校驗。固件、引導程序和操作系統在啓動時可以根據這個校驗值來判斷分區表是否出錯,如果出錯了,可以使用軟件從硬盤最後的備份GPT中恢復整個分區表,如果備份GPT也校驗錯誤,硬盤將不可使用。


LBA2-33:分區表項

  分區表位於GPT磁盤的2-33號扇區,一共佔用32個扇區,能夠容納128個分區表項。每個分區表項大小爲128字節。因爲每個分區表項管理一個分區,所以GPT磁盤可以創建128個分區。

  GPT分區表使用簡單而直接的方式表示分區。一個分區表項的前16字節是分區類型GUID。接下來的16字節是該分區唯一的GUID(這個GUID指的是該分區本身,而之前的GUID指的是該分區的類型)。再接下來是分區起始和末尾的64位LBA編號,以及分區的名字和屬性。


LBA34:分區區域

   GPT分區區域就是用戶使用的分區,也是用戶進行數據存儲的區域。分區區域的起始地址和結束地址由GPT頭定義。


LBA -33~-2:分區表備份

  分區區域結束後就是分區表備份,其地址在GPT頭備份扇區中有描述。分區表備份是對分區表32個扇區的完整備份。如果分區表被破壞,系統會自動讀取分區表備份,也能夠保證正常識別分區


LBA -1:GPT頭備份

 GPT頭有一個備份,放在GPT磁盤的最後一個扇區,但這個GPT頭備份並非完全GPT頭備份,某些參數有些不一樣。複製的時候根據實際情況更改一下即可。


GPT分區優點:

   與目前普遍使用的主引導記錄(MBR)分區方案相比,GPT提供了更加靈活的磁盤分區機制。它具有如下優點:

1、支持2TB以上的大硬盤。

2、每個磁盤的分區個數幾乎沒有限制(Windows系統最多隻允許劃分128個分區)。

3、分區大小幾乎沒有限制。

4、分區表自帶備份。在磁盤的首尾部分分別保存了一份相同的分區表,其中一份被破壞後,可以通過

  另一份恢復;

5、循環冗餘檢驗值針對關鍵數據結構而計算,提高了數據崩潰的檢測機率;

6、雖然MBR提供1字節分區類型代碼,但GPT使用一個16字節的全局唯一標識符(GUID)值來標識分區

  類型,這使分區類型更不容易衝突;

7、每個分區可以有一個名稱(不同於卷標)。


總結:

1,對於新的磁盤進行分區,最多隻能劃分4個主分區(三主+1擴展),分區號1-4是留給主分區的,分區號5,6,7...是留給邏輯分區的,若主分區不足4個,邏輯分區的編號也是從5開始

wKiom1fCaoCBMKEsAAAO0Ia5Ylk151.png

wKioL1fCaoHBL9sBAAAVxsc6v0s584.png

wKioL1fCaoHQo7xxAAAjkgTI1-M252.png

2,使用lsblk可以查看當前系統所有的磁盤分區情況

3,在不關機情況下實現添加新磁盤並顯示在系統中的步驟:

  a,掃描磁盤,在命令行中輸入如下命令

    echo "- - -" > /sys/class/scsi_host/host2/scan 

  b,查看系統磁盤情況

   # lsblk 

  c,查看分區

   # fdisk -l /dev/sd[a-z]

  d,查看mbr

   # hexdump  -C -n 512 /dev/sd[a-z]

  e,備份mbr (以/dev/sda爲例,目錄已事先存在,if是“in filesystem”,of是“of filesystem”,bs是“block size”,count是總數

   dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512

  f,查看是否備份成功

   hexdump  -C -v /testdir/mbrbak 

  g,恢復mbr (恢復至新添加的磁盤/dev/sdd的主引導分區)

   dd if=/testdir/mbrbak of=/dev/sdd 

  h,查看/dev/sdd的主引導分區

   fdisk /dev/sdd -l


4,破壞boot loader之後的恢復 (先備份在/testdir/mbrbak目錄下)

  a,查看磁盤分區標識:

   hexdump  -C -n 512 /dev/sdd

  b,破壞boot loader

   dd if=/dev/zero of=/dev/sdd bs=1 count=446

   hexdump  -C -v -n 512 /dev/sdd

  c,清除分區標識

   dd if=/dev/zero of=/dev/sdd bs=1 count=2 skip=510 seek=510 

   hexdump  -C -v -n 512 /dev/sdd

   fdisk -l /dev/sdd

  d,恢復分區標識

   dd if=/testdir/mbrbak  of=/dev/sdd bs=1 count=2 skip=510 seek=510

  e,恢復分區表

   dd if=/dev/zero  of=/dev/sdd bs=1 count=64 skip=446  seek=446

   hexdump  -C -v -n 512 /dev/sdd


5,查看磁盤分區表

 fdisk -l 

6,查看內核中的分區表

 cat /proc/partitions

 lsblk

 ls /dev/sd*


7,centos6中如何在新增和刪除分區後同步顯示分區表

  增加分區,同步分區表

   partx -a /dev/sda

  刪除分區,同步分區表

   partx -d --nr 6-8 /dev/sda


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章