2021-05-12 14:32:11
Linux中磁碟分割區詳解
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
相關文章