首頁 > 軟體

Linux中磁碟分割區詳解

2020-06-16 17:03:39

Linux中磁碟分割區——理論篇

現在主流的分割區的方式有兩種——MBR分割區和GPT分割區,本文將著重介紹MBR分割區底層原理,及用相關命令驗證相關原理

為什麼要對磁碟進行分割區

優化I/O效能

隔離系統和應用程式

實現磁碟空間的配額限制

同一磁碟可採用不同的檔案系統

同一磁碟上可以安裝多個作業系統

//當然,分割區也會有若干缺點,這裡忽略不計

MBR分割區

MBR:Master Boot Record, MBR磁碟分割區是一種使用最為廣泛的分割區結構,它應用於Windows系統平台,Linux系統平台和基於X86的UNIX等系統平台。

實現原理

使用位於磁碟的0號磁區(一磁區等於512位元組),來表示整個磁碟的整體分割區情況,整個0號磁區簡稱為MBR磁區。

從硬體角度講,MBR分割區是按柱面進行的,也就是說,磁碟上的同一柱面只能歸於一個分割區。但是,在CentOS 6.8上,同一柱面上的不同磁區可以屬於不同分割區。

MBR磁區組成

MBR磁區由引導程式碼、MBR分割區表、MBR結束標誌3部分構成,一共佔用512個位元組。

其中引導程式碼占用446個位元組,MBR分割區占用64個位元組,MBR結束標誌佔用2個位元組,MBR磁區一共佔用512個位元組。

引導程式碼:占MBR分割區的前446位元組,負責整個系統的啟動。如果引導程式碼被破壞,系統將無法啟動

MBR分割區:佔引導程式碼後面的64個位元組,是整個硬碟的分割區表。每個分割區使用的位元組為16個,所以這確定了MBR分割區方式最多只有4個主分割區(包含擴充套件分割區在內)。

MBR結束標誌:佔用最後2個位元組,一直為"55AA".

分割區規則

1.一塊磁碟上主分割區和擴充套件分割區的個數總和不能超過4個

2.一塊磁碟上最多只能有1個擴充套件分割區

3.擴充套件分割區中可以建立邏輯分割區,個數限制視磁碟型別而定

實驗

注意:這些實驗具有一定的破壞性,強烈建議不要在生產環境下操作,在虛擬機器上操作上時,最好進行快照處理,以便於造成不可恢復性的操作時,可以使用快照功能將系統恢復到操作前的狀態。

檢視磁碟MBR磁區資料

hexdump /dev/sda -C -n 512
# hexdump命令可檢視二進位制檔案,也可以直接檢視硬碟資料
-C選項,以十六進位制顯示資料
-n選項,讀取輸入資料的位元組個數
  • 顯示結果
...
000001d0  07 19 83 fe ff ff 00 48  06 00 00 00 80 02 00 fe  |.......H........|
000001e0  ff ff 83 fe ff ff 00 48  86 02 00 00 40 01 00 fe  |.......H....@...|
000001f0  ff ff 05 fe ff ff 00 48  c6 03 00 b8 39 15 55 aa  |.......H....9.U.|
00000200
# 最後幾行的結果
  • 顯示結果倒數第二行,最後四個字母“55 aa”,可見MBR磁區最後兩個位元組為“55aa”. 可以將其修改,然後reboot(註:不要在生產環境下操作),機器就啟動不了,可以通過救援模式將這兩個位元組修改為"55 aa".

修改MBR磁區資料

下面“破壞”mbr磁區資料

  • 檢視分割區資訊是否正常
[root@linuxidc ~]#fdisk -l

Disk /dev/sda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000455a4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2637    20971520   83  Linux
/dev/sda3            2637        3942    10485760   83  Linux
/dev/sda4            3942       26109   178052096    5  Extended
/dev/sda5            3943        4204     2097152   82  Linux swap / Solaris
/dev/sda6            4204       26109   175952896   83  Linux

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

使用fdisk命令檢視磁碟資訊,fdisk命令是直接查詢mbr分割區表的資訊

  • 備份mbr分割區資訊
[root@linuxidc ~]#dd if=/dev/sda of=/tmp/mbr bs=1 count=512
512+0 records in
512+0 records out
512 bytes (512 B) copied, 0.00102281 s, 501 kB/s

讀取/dev/sda裝置中讀取資料,並儲存到/tmp/mbr檔案中,塊大小為1位元組,數目為512個

  • 修改mbr分割區資訊
[root@linuxidc ~]#dd if=/dev/zero of=/dev/sda bs=1 count=512
512+0 records in
512+0 records out
512 bytes (512 B) copied, 0.0019455 s, 263 kB/s

把/dev/sda分割區表的512個位元組資料全部資料改為0

  • 檢視mbr分割區資訊
[root@linuxidc ~]#fdisk -l

Disk /dev/sda: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
# 顯示不出磁碟分割區的具體資訊了
  • 修復磁碟分割區資訊
[root@linuxidc ~]#dd if=/tmp/mbr of=/dev/sda bs=1 count=512
512+0 records in
512+0 records out
512 bytes (512 B) copied, 0.0012424 s, 412 kB/s

理論篇到此就結束了,歡飲閱讀下一篇實踐篇

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2017-10/148093p2.htm


IT145.com E-mail:sddin#qq.com