描述:
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個邏輯分區)}
常用分區方式:
MBR引導扇區結構:
0磁道0扇區:第一個扇區512bytes MBR引導扇區
主引導程序(boot loader):446bytes, 可以安裝引導加載程序
主分區表(partition table):64bytes,記錄整塊硬盤分區的狀態
16bytes: 標識一個分區,一共只能分4個分區(主+擴展)
結束標識: 2 bytes, 55AA ,MBR區域的有效性標識;55AA為有效
主分區表所在的64個bytes容量中,每16個bytes分為一個項,總共分為四組記錄區,每組記錄區記錄了該區段的起始與結束的柱面號碼,等信息
分區結構:
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字節
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開始
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
原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/41231