天天看點

Linux之磁盤管理,分區

<a href="https://s3.51cto.com/wyfs02/M01/9D/D0/wKioL1mG0aCBngAZAACxmFPnkEo823.png" target="_blank"></a>

1)IO事件的産生

cpu輪循、硬體通知機制

2)識别硬體:

硬體層次:

1、IO端口、緩沖器

2、可程式設計中斷控制裝置:裝置注冊 不同的中斷信号

軟體/作業系統層次:

命名通過數字或字母

linux一切皆檔案:裝置檔案:通路裝置的接口、裝置類型b,c

命名方式: 硬體接口

接口速率:IDE:133MB/S,SCSI:670MB/S,SATA:700MB/S,SAS:700MB/S,USB:450MB/S

3)接收時:資料要被處理:CPU指揮着資料載入到記憶體,然後到cpu。

4)track,cylinder,sector

track: 存儲資料,

cylinder:不同盤片,相同編号的track

sector: 每個track中劃分

虛拟扇區: 不同track,sector數量一樣,大小一樣,

mbr:512bytes, uefi:4k

mbr: 446(引導加載器) 64分區表 2 55AA(510有效)

   邏輯分區和擴充分區的編号機制,擴充任意編号 邏輯從5開始

一、硬體

    cpu(運算器、控制器), 記憶體,硬碟(U盤)、網絡裝置,鍵盤、滑鼠、顯示器

如果協調的好,多個CPU能夠發揮單個CPU多倍的性能,否則協調時間占比越大,性能不升反降

2)記憶體 Random Access Memory “易失性存儲”暫時存放CPU中的運算資料,以及與硬碟等外部存儲器交換的資料。不斷的填充電荷保證資料的持久

3)硬碟:硬碟是電腦主要的存儲媒介之一,由一個或者多個鋁制或者玻璃制的碟片組成。碟片外覆寫有鐵磁性材料。

4)網卡:網卡是工作在鍊路層的網絡元件,是區域網路中連接配接計算機和傳輸媒體的接口,不僅能實作與區域網路傳輸媒體之間的實體連接配接和電信号比對,還涉及幀的發送與接收、幀的封裝與拆封、媒體通路控制、資料的編碼與解碼以及資料緩存的功能等。

二、核心

1、軟體層次,需要較為複雜的邏輯實作協調硬體工作

2、抽象硬體功能為系統調用、庫調用

3、驅動硬體,讓硬體工作起來。第三方提供商所提供硬體的驅動,為避免驅動内的惡意代碼,安裝驅動時會檢查硬體驅動的 數字簽名 ....

4、對硬體的管理,僅在硬體驅動層次的管理,對硬碟的使用、空間的配置設定,由使用者間的程式

程式員面向的程式設計接口

硬體規格:寫程式時,将會考慮更多與硬體相關的特性(cpu,ram,...)

系統調用:簡化硬體接口,較為底層

庫調用:系統call二次封裝

IOevent的基本概念

"如何"得知産生硬體事件 -- I/O裝置觸發IO事件 -- CPU如何知道"哪個"硬體需要有資料産生或需要擷取資料 --- CPU通知核心 -- 核心決定接收或拒絕資料

一、cpu如何得知硬體産生了事件或有資料産生?

輪循:也被稱為忙等待,等待别人輸入資料,自己忙的團團轉,CPU定時發出詢問,依序詢問每一個周邊裝置是否需要其服務,有即給予服務,服務結束後再問下一個周邊,接着不斷周而複始。

<a href="https://s5.51cto.com/wyfs02/M01/9D/D0/wKioL1mG1HLwBNuCAAB3HrUMoQs436.png" target="_blank"></a>

通知機制:任何一個I/O裝置當其有資料傳輸的需要時 或 有I/O事件到達時,裝置通知給CPU。

<a href="https://s5.51cto.com/wyfs02/M01/9D/D0/wKiom1mG1R7AzjvUAABYXW4f7Ng908.png" target="_blank"></a>

二、cpu如何識别是哪個硬體有資料傳輸的需要?

1)硬體層次:硬碟工作的内置的電器特性實作

可程式設計中斷控制裝置:微處理器與外設之間的中斷處理的橋梁,由外設發出的中斷請求需要中斷控制器來進行處理。

此裝置上有多個針腳,每個針腳可供硬體裝置注冊使用,CPU中由硬體裝置注冊使用的不同的中斷信号

針腳數量小,但是可以複用

針腳可以基于某種形式複用

i/o端口:16bits二進制數字定義端口,每個端口是一個緩沖器,一共有2^16=65535種變化或端口,每個硬體都會在cpu處注冊使用不同的端口,一般說來:其中1個端口用來發送資料,1個端口用于接收資料,cpu根據不同的端口判斷不同的硬體。

<a href="https://s2.51cto.com/wyfs02/M02/9D/D0/wKiom1mG11Ki1b1NAACDPmspWqk968.png" target="_blank"></a>

2)軟體層次

   由linux哲學思想“一切皆檔案”

識别裝置:

    人易讀的是字母:裝置檔案 

    核心隻能數字:   裝置号碼

抽象為檔案的優點:對裝置的操作僅需要通過簡潔的檔案接口實作

檔案接口:read(),write(),open(),close()

裝置類型:

    塊裝置:随機通路裝置: 存儲機關 "塊" 硬碟

    字元裝置: 線性通路敲鑼:存儲機關 "字元" 鍵盤

裝置檔案是一種特殊檔案,是裝置的通路入口

1

2

3

4

5

6

7

8

9

10

11

12

<code>crw-rw-rw-   1 root     root       1,   3 Jul 31 14:51 </code><code>/dev/null</code>

<code>c        字元型</code>

<code>rw-      </code>

<code>1       </code>

<code>左root   </code>

<code>右root    </code>

<code>1 major number 主裝置号碼:标示不同的裝置類型</code>

<code>3 minor number 次裝置号碼:同一類型裝置下不同的裝置</code>

<code>########沒有檔案大小,對于裝置檔案來說,隻有metadata(屬性資訊),沒有data</code>

裝置檔案的命名:依據裝置的接口

    主機與裝置的建立關聯關系

    主機闆提供接口

    線纜:硬體裝置和主機闆接口互動資料傳輸專門設計

    工業标準:有統一的标準、電壓、同步調工作

<a href="https://s3.51cto.com/wyfs02/M00/9D/D1/wKioL1mG37ijFuGjAAA21kSzKww982.png" target="_blank"></a>

CentOS 5:    ide /dev/hd[a-z], scsi sata sas usb /dev/sd[a-z]

CentOS 6+: ide scsi sata sas usb /dev/sd[a-z]

相同裝置不同分區命名:

/dev/sda[1- oo]   

不同接口的接口速率

并口:IDE: 133MB/S , SCSI: 640MB/S

序列槽:SATA 3.0: 6GPbs == 700MB/S , SAS: 6Gpbs

    并口:多條線纜間的信号幹擾,幹擾後就會導緻重傳 ,為了避免幹擾,傳輸速率隻能降低。

    序列槽:單線無幹擾,單車道隻要 步調一緻時,每秒隻要傳送更多的資料位即可

USB 3.0: 450MB/S

實際體驗速率取決于兩個方面:

1、接口速率

2、硬碟,例如同樣是SATA 3.0,固态硬碟和機械式硬碟哪個快?同樣是機械式硬碟,同樣的接口,西數和西捷哪個快?

機械式硬碟的基本工作機制

    組成

    盤片,磁頭,盤片轉軸及控制電機,磁頭控制器,資料轉換器,接口,緩存等幾個部分組成。

track,磁道:用于存儲資料的位置,密度越高,存儲大小越大

硬碟兩面讀寫

柱面:不同盤片的不同盤面有相同編号的磁道

扇區:每個磁道劃分成的小的區域

<a href="https://s3.51cto.com/wyfs02/M02/9D/D1/wKiom1mG4g7SyP5oAAHarGbqLkc806.png" target="_blank"></a>

虛拟扇區:虛拟視圖上看,在整個硬碟上,每個磁道,扇區大小一樣,數量一樣

    扇區的大小: mbr(512bytes) uefi(4k)

磁頭:每個盤面有一個磁頭,磁頭距離盤面不到幾毫米,磁頭固定在同一個組合臂上

    距離近,避免劃傷硬碟,應該避免振動。

機械式硬碟的分區方式

分區:把一個存儲空間邏輯角度上劃分為多個不同的空間。 當作不同的硬體裝置各自獨立使用

如何分區:按柱面分,由外向内多個柱面組合在一起作一個分區,再由外向内多個柱面組合在一起作一個分區,....。

分區的特點:越靠外的柱面,機關時間内劃過的或磁頭所能走過的距離越長,資料讀寫率越向,越靠内越差。 一般分區的編号由外向内依次增大

磁盤識别分區:

    硬碟的0柱面,0磁道,0扇區,系統預留的,不屬于任何分區,512bytes

MBR(Master Boot Record) 主引導記錄

    512 bytes = 64bytes + 446bytes + 2 bytes

446bytes: 引導加載器 bootloader

64bytes:儲存分區表,比爾蓋茨認為的,當時隻有1M大小的硬碟,分為4個分區足以。16bytes為一個分區。

<code>4個主分區</code>

<code>3個主分區(1,2,3) + 1擴充(4)+n個邏輯分區</code>

<code>**擴充分區可以為1,邏輯分區起始的編号 一定為5.</code>

2bytes: 5A , 前510個bytes有效

注意:mbr分區當硬碟大于2T時,隻能識别2T。大于2T的硬碟隻能用GPT格式分區。

分區管理工具

fdisk(各發行版均會提供) 管理15個分區

parted,sfdisk

檢視核心識别的分區

# cat /proc/partitions

讓核心重讀分區表

# partx -a &lt;disk&gt;

    -n M[-N]

        M     指定分區

        M-N 指定範圍

kpartx指令

    kpartx [OPTIONS...] /dev/DEV-FILE 

        -a 添加分區映射

        -f 強制添加

centos5上: partprobe /dev/DEV-FILE

fdisk指令

13

14

15

16

17

18

19

20

<code>#  type fdisk</code>

<code>fdisk</code> <code>is </code><code>/usr/sbin/fdisk</code>

<code>[root@izpo45bh60h6bsz ~]</code><code># fdisk --help</code>

<code>Usage:</code>

<code> </code><code>fdisk</code>  <code>&lt;disk&gt;    change partition table</code>

<code>     </code><code>Command action</code>

<code>       </code><code>d   删除一個分區</code>

<code>       </code><code>l   列出所有</code><code>id</code><code>,</code><code>id</code><code>用于标示用于那種作業系統的标示</code>

<code>       </code><code>m   擷取幫助</code>

<code>       </code><code>n   建立一個新分區</code>

<code>       </code><code>p   顯示已有分區</code>

<code>       </code><code>q   放棄更新并退出</code>

<code>       </code><code>t   改變分區</code><code>id</code>

<code>       </code><code>w   将更新寫入磁盤并退出</code>

<code> </code><code>fdisk</code> <code>[options] -l &lt;disk&gt; list partition table(s)</code>

<code> </code> 

<code> </code><code>fdisk</code> <code>-l </code><code>##列出所有分區表</code>

<code> </code><code>fdisk</code> <code>-l &lt;disk&gt; </code><code>##列出指定的分區表</code>

使用示例

檢視所有磁盤分區

<code>[root@localhost ~]</code><code># fdisk -l</code>

<code>[root@localhost ~]</code><code># fdisk -l /dev/[sh]d[a-z]</code>

檢視指定分區

<code>[root@localhost ~]</code><code># fdisk -l /dev/sda</code>

添加分區

==進入管理分區表的指令行

<a href="https://s4.51cto.com/wyfs02/M02/9D/F3/wKiom1mJPpTCR7K6AAAb24ZcA5w164.png-wh_500x0-wm_3-wmp_4-s_1506057092.png" target="_blank"></a>

==顯示已有的分區,mbr中隻能有4個分區,如果要更多時,需要添加擴充分區

<a href="https://s1.51cto.com/wyfs02/M01/9D/F3/wKiom1mJPsrxIaaOAAA6teE2Gw8447.png-wh_500x0-wm_3-wmp_4-s_773585717.png" target="_blank"></a>

==目前分區編号為2可以繼續添加主分區

<a href="https://s4.51cto.com/wyfs02/M02/9D/F3/wKioL1mJPvHCeicSAAAmyBqgM4Q354.png-wh_500x0-wm_3-wmp_4-s_3746757474.png" target="_blank"></a>

==顯示添加的結果,并儲存退出

<a href="https://s3.51cto.com/wyfs02/M02/9D/F3/wKiom1mJPyHydeYVAABZXdpgXyk903.png-wh_500x0-wm_3-wmp_4-s_3112791621.png" target="_blank"></a>

顯示目前核心中識别的分區資訊

<a href="https://s5.51cto.com/wyfs02/M02/9D/F3/wKiom1mJPR6QB1HEAAAcRaR139s135.png" target="_blank"></a>

核心重讀分區表(此處多添加了一個擴充分區和邏輯分區,添加擴充分區見結尾處)

<a href="https://s1.51cto.com/wyfs02/M01/9D/F3/wKioL1mJO1_AChiQAABMYeGprXs992.png" target="_blank"></a>

删除指定的分區

======添加擴充分區=====驗證邏輯分區隻能從5開始

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

<code>1、檢視指定裝置</code>

<code>[root@localhost ~]</code><code># fdisk -l /dev/sdb</code>

<code>Disk </code><code>/dev/sdb</code><code>: 21.5 GB, 21474836480 bytes</code>

<code>255 heads, 63 sectors</code><code>/track</code><code>, 2610 cylinders</code>

<code>Units = cylinders of 16065 * 512 = 8225280 bytes</code>

<code>Sector size (logical</code><code>/physical</code><code>): 512 bytes / 512 bytes</code>

<code>I</code><code>/O</code> <code>size (minimum</code><code>/optimal</code><code>): 512 bytes / 512 bytes</code>

<code>Disk identifier: 0x00000000</code>

<code>[root@localhost ~]</code><code># </code>

<code>2、分區</code>

<code>[root@localhost ~]</code><code># fdisk  /dev/sdb  ##改變/dev/sdb分區表</code>

<code>Command (m </code><code>for</code> <code>help): n              </code><code>##添加一個新分區</code>

<code>Command action</code>

<code>   </code><code>e   extended</code>

<code>   </code><code>p   primary partition (1-4)</code>

<code>e                        </code><code>##邏輯分區</code>

<code>Partition number (1-4): 1</code>

<code>First cylinder (1-2610, default 1): </code>

<code>Using default value 1</code>

<code>Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): </code>

<code>Using default value 2610</code>

<code>Command (m </code><code>for</code> <code>help): p</code>

<code>Disk identifier: 0x52ca09b2</code>

<code>   </code><code>Device Boot      Start         End      Blocks   Id  System</code>

<code>/dev/sdb1</code>               <code>1        2610    20964793+   5  Extended     </code><code>##擴充分區可為1</code>

<code>Command (m </code><code>for</code> <code>help): n</code>

<code>   </code><code>l   logical (5 or over)</code>

<code>l</code>

<code>Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G</code>

<code>/dev/sdb1</code>               <code>1        2610    20964793+   5  Extended</code>

<code>/dev/sdb5</code>               <code>1        1306    10490382   83  Linux   </code><code>##邏輯分區起始區5</code>

<code>Command (m </code><code>for</code> <code>help):</code>

<code></code>

本文轉自 lccnx 51CTO部落格,原文連結:http://blog.51cto.com/sonlich/1954050,如需轉載請自行聯系原作者

繼續閱讀