MBR結構解析與fdisk的bash實現

來源:互聯網
上載者:User

一、MBR結構解析

首先我們先介紹一些MBR的基本知識基礎,再晾圖片分析。MBR主要分為三大塊分別是:

1、載入引導程式(446K)

2、分區表(64k)

3、標誌結束位(2k)

載入引導程式:內容是因機器而異它裡面正如其名,就是存放載入引導程式。現在主要的載入引導程式是LILO(LInux LOader)和 GNU GRUB(GRand Unified Boot loader)。

分區表:裡面主要記錄4個16K主要磁碟分割的資訊,我們將在下文進行詳細介紹。

表示結束位:就是標誌MBR結束,一般是0xaa55。如果不是,則告訴機器前面的內容是不合法的。

然後我們執行下面的命令一起來看看MBR內容:

# dd if=/dev/sdb bs=512 count=1 | hexdump -C

vcHLttTTpsO/uPbH+NPytcS3ts6nyOfPwqO6PC9wPgo8cD48c3Ryb25nPrzT1NjS/bW8s8zQ8qO6o6gwMDAwMDAwMCC12jHX1r3afjAwMDAwMWIwILXaMTTX1r3ao6k8L3N0cm9uZz48L3A+CjxwPjxzdHJvbmc+t9bH+LHto7qjqDAwMDAwMWIwILXaMTXX1r3afjAwMDAwMWYwtdoxNNfWvdqjqTwvc3Ryb25nPjwvcD4KPHA+PHN0cm9uZz6x6ta+veHK+M67o7qjqDAwMDAwMWYwtdoxNdfWvdp+MDAwMDAxZjC12jE219a92qOpPC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPteio7q0y7Smw7vT0LXaMNfWvdo8L3N0cm9uZz48L3A+Cgo8cD7TydPat9bH+LHtsPy6rcHLztLDx9Do0qq1xLTzsr+31tDFz6KjrL3Tz8LAtM7Sw8fW2LXjveLO9tK7z8K31sf4se2hozwvcD4KPHA+MDAwMDAxYjAgIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICBjOCA4NyBkYSA5NSAwMCAwMDgwIDAxPC9wPgo8cD4wMDAwMDFjMCAgCjAxIDAwIDA3ICBmZSAgIGZmICAgZmYgICAzZiAgMDAgIDAwIDAwIDA2IDczIDQxIDA2IDAwIGZlPC9wPgo8cD4wMDAwMDFkMCAgIGZmICAgZmYgICAwZiAgIGZlICAgZmYgICBmZiAgIDQ1IDczICA0MSAwNiBiYiA1YyAwMSAxZjAwIDAwPGJyPgo8L3A+CjxwPjAwMDAwMWUwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAwMAogMDA8L3A+CjxwPjAwMDAwMWYwICAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgIDAwIDAwIDAwIDAwIDAwIDAwNTUgYWE8YnI+CjwvcD4KPHA+yc/NvNbQo6zO0sPHzqo0uPa31sf4tcTE2sjdt9ax8LHqyc/By7K7zazR1cmroaPO0sPHzqrBy7e9seO94s72w7+49tfWts6jrNLUtdrSu7j2t9bH+M6qwP3X06GjsqLH0s6qw7+49tfWvdq31sXk0ru49sP719aho77fzOXI58/Co7o8L3A+CjxwPgo8dGFibGUgYm9yZGVyPQ=="1" width="700" cellpadding="1" cellspacing="1">8001010007feffff3f00000006734106status
f1f2f3parttype
l1l2l3lba1lba2lba3lba4s1s2s3s4

雖然看起來很多,但其實只有幾類:

status:是否是可啟動盤是的話就是0x80,否則就是0x00

f3+f2+f1:分區的開始位置

l3+l2+l1:分區的結束位置

s4+s3+s2+s1:分區的大小

parttype:分區類型,在fdisk中可以查看得到對應列表如。我這裡第一個分區是07類型,也就是HPFS/NTFS的windows檔案系統。第二個分區才是Linux。


二、fdisk驗證

我們以第一個主要磁碟分割為例子對某些欄位進行簡單的驗證,是fdisk /dev/sdb的結果

Boot:第一個位元組0x80說明第一個分區是可開機磁碟分割

Id:也就是parttype欄位對應的值是0x07

System:根據id從fdisk的表格中得到HPFS/NTFS檔案系統

Blocks:這裡是s4s3s2s1=0x06417306,我們同樣利用 echo "ibase=16;06417306/2" " bc 得到52476291k也剛好驗證了上面的數值。

Start:這裡f3f2f1=0x000101,我們利用echo “ibase=16;000101/2” | bc 得到128k。這裡為什麼是128k而不是上文fdisk中的1呢?主要是由於兩個問題造成,第一個是fdisk的end和start中的數值是指磁碟的柱面。所以並不是簡單的kB或者MB,因為根據磁碟型號不同,它每個柱面的大小容量也是不一樣的。此外第二個原因是這裡可能是由於磁碟的stripe造成的。(RAID卡配置--stripe size在每個磁碟上連續寫入資料的總量,也稱作“條帶深度”。)stripe一般預設是128k。可能由於預設的原因所以不是從柱面0開始,而是從1開始。

(註:硬碟容量 =柱面數(表示每面盤面上有幾條磁軌,一般總數是1024) ×磁頭數(表示盤面數) ×扇區數(表示每條磁軌有幾個扇區,一般總數是64)× 扇區(儲存基本單元,大小一般為512B/4KB))

三、fdisk的bash實現

前些實習的日子,找到了一個比較優美的bash代碼。是檢測MBR的開機磁碟分割、分區類型、大小等資訊。這些資訊也就是從我們上面介紹的分區表中得到。這裡把代碼拿出來,雖然實用性上不強(畢竟已經有fdisk)。但是拿出來一起學習,如果有不好的地方請指正哈。



實現效果:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.