淺嘗硬盤分區表

【0】README

0.1) text description from orange’s implemention of a os;
0.2) there are a number of analysis and attention proves to be essence of this page, I think;
0.3)Conclusion about hd partition table
數組

  • C1)存在一個硬盤的狀況下:
    • C1.1) 1~4這4個數字 爲 主引導扇區 中的分區表項所用(主引導扇區分區表能夠儲存最多1個擴展分區 和 不大於4個 的主分區,總數量==4), 從5 開始依次表示邏輯分區;(主引導扇區是硬盤的第一個扇區,而其餘引導扇區是各個分區的第一個扇區)
    • C1.2)主設備號告訴os 應該用哪一個驅動程序來處理,次設備號告訴driver 這是具體哪一個設備(分區);
  • C2)存在兩塊硬盤的狀況:
    • C2.1)主盤是hd0,次設備號是0,它的主引導扇區分區表對應的四個分區分別是 hd一、hd二、hd三、hd4;
    • C2.2)每一個擴展分區中最多有16 個邏輯分區,邏輯分區的次設備號以hd1a 爲基準遞增的;
    • C2.3)這種編號的好處是, 給定一個次設備號能夠很容易計算出它是主分區仍是擴展分區,或者是哪一個擴展分區的哪一個邏輯分區;
  • C3)百度總結:
    • C3.1) 一個硬盤主分區至少有1個,最多4個,擴展分區能夠沒有,最多1個。且主分區+擴展分區總共不能超過4個。邏輯分區能夠有若干個;
    • C3.2) MBR(主引導記錄)的分區表(主分區表)只能存放4個分區,若是要分更多的分區的話就要一個擴展分區表(EBR),擴展分區表放在一個系統ID爲0x05的主分區上,這個主分區就是擴展分區,擴展分區能能夠分若干個分區,每一個分區都是個邏輯分區;
      數據結構


      【1】intro to hard disk partioning tab

  • 1.1) 硬盤分區表其實就是一個數據結構,數組的每一個成員是一個 16字節的結構體;這個結構體數組位於引導扇區的1BEh處,共有四個成員——由於IBM 當時以爲一臺PC最多會裝四個os;
  • 1.2) 如今咱們的計算機中 每塊硬盤常常劃分爲不止四個分區, 這是由於 每一個主分區能夠進一步分紅多個邏輯分區;
    這裏寫圖片描述
    this

  • 1.3) 對硬盤進行分區操做,如何建立虛擬硬盤,參見http://blog.csdn.net/PacosonSWJTU/article/details/48846887
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    這裏寫圖片描述
    .net

如上圖所示,咱們把一個80M 的硬盤映像分紅了一個主分區和一個擴展分區,而後擴展分區又分紅了 五個邏輯分區;咱們的orange's os 安裝在 第一個邏輯分區上(標有 '*' 號);
code


【2】咱們實際看一下分區表是什麼樣子,用二進制查看器看一下引導扇區:

這裏寫圖片描述

  • Alert):
    • A1)要知道,分區表就是個結構體數組, 共有四個成員,每一個成員16個字節,那分區表結構體數組共佔64字節,也便是除外引導扇區標誌 0xAA55 後 的 最後64字節了;
    • A2)這個分區表結構體數組 存在於 引導扇區中除開 0xAA55 後的最後64個字節;
      這裏寫圖片描述
      這裏寫圖片描述
      blog

      第一個分區:00 ,01 ,01 ,00 ,83 ,0F ,3F ,13  ,3F 00 00 00 ,81 4E 00 00
        第二個分區:00 ,00 ,01 ,14 ,05 ,0F ,3F ,A1 ,C0 4E 00 00 ,20 2F 02 00

    這裏寫圖片描述


    【3】利用引導扇區中記錄的擴展分區的起始字節(0x4EC0 * 512 = 0x9D8000),咱們來查看擴展分區的信息:

    Attention):擴展分區的起始字節,也便是擴展分區的第一個邏輯分區的起始字節;
    這裏寫圖片描述
    圖片

    第一個分區:80 ,01 ,01 ,14 ,99 ,0F ,3F ,3B ,3F 00 00 00 ,41 9D 00 00
    第二個分區:00 ,00 ,01 ,3C ,05 ,0F ,3F ,59 ,80 9D 00 00 ,20 76 00 00
    這裏寫圖片描述ip

3.1)對上表的分析-Analysis:it

  • A1)當前擴展分區的第一個分區的起始扇區LBA 是0x3F,這個是相對於擴展分區基地址的LBA,它的真正LBA 是 4EC0h + 3Fh = 4EFFh;
  • A2)當前擴展分區的第二個分區的分區類型是 0x05,可知它又是一個擴展分區,起始扇區LBA 爲 4EC0h + 9D80h = EC40h,字節偏移爲 EC40h * 512 = 1D88000h,咱們轉到該起始字節;

3.2)利用上述擴展分區的第一個邏輯分區的分區表數據結構 記錄的嵌套擴展分區的起始字節(EC40h * 512 = 1D88000h),咱們來查看嵌套擴展分區的信息:
(由於,擴展分區中的第一個邏輯分區的分區表記錄着 另外一個擴展分區的起始扇區,因此咱們把這種擴展分區 叫作 嵌套擴展分區)
這裏寫圖片描述
io

第一個分區:00 ,01 ,01 ,3C ,83  ,0F ,3F ,59 ,3F 00 00 00 ,E1 75 00 00
第二個分區:00 ,00 ,01 ,5A ,05 ,0F ,3F ,83 ,A0 13 01 00 ,60 A5 00 00

這裏寫圖片描述

3.3)對上表的分析-Analysis:

Attention)爲何 第一個分區的 起始扇區LBA 最後要加上 EC40h, 而第二個分區的 起始扇區LBA 最後要加上 4EC0h 呢?

  • A1)這裏須要留意一點, 前一個表項(當前擴展分區的第一個分區)中的 起始扇區LBA 是相對於當前擴展分區的,然後一個表項(當前擴展分區的第二個分區)中的起始扇區——也就是下一個擴展分區的起始扇區——是相對於硬盤主引導扇區所指明的擴展分區的起始扇區的;
  • A2)很顯然,當前擴展分區的第一個分區(前一個表項)的起始扇區LBA是相對於 當前擴展分區,而當前擴展分區的基扇區號爲 EC40,固然其要 加上 EC40了;
  • A3)還有,當前擴展分區的第二個分區(後一個表項)的起始扇區LBA是相對於 硬盤主引導扇區所指明的擴展分區的起始扇區而不是 當前擴展分區基扇區號,而引導扇區記錄的擴展分區起始扇區爲 4EC0,固然其要 加上 4EC0了(表a所示);
  • A4)還有一個重要問題就是,爲何第二個分區表示的是擴展分區,由於咱們經過它的分區類型 爲 0x05,看出來的;
  • A5)就這樣,擴展分區的分區表信息就像一個鏈表同樣,咱們能夠一步一步地遍歷全部分區;
  • A1)從分區類型值能夠看出(0x05),在這個分區中, 又包含了一個普通分區和一個擴展分區,你可能一會兒明白了,多個邏輯分區是由嵌套來實現的;
  • A2)一個擴展分區包含一個普通分區的同時, 又能夠嵌套一個擴展分區;
  • A3)當前擴展分區的第一個分區的起始扇區LBA 是0x3F,這個是相對於擴展分區基地址的LBA,它的真正LBA 是 EC40h + 3Fh = EC7Fh;
  • A4)當前擴展分區的第二個分區的分區類型是 0x05,可知它又是一個擴展分區,起始扇區LBA 爲 4EC0h + 0x113A0h = 16260h,字節偏移爲 16260h * 51與2 = 2C4C000h,咱們轉到該起始字節;
相關文章
相關標籤/搜索