設備文件
linux
的哲學理念是一切皆文件
,設備也是一種文件,設備文件主要存放在/dev
目錄下,設備文件的主要用途是將設備關聯到對應的設備驅動程序,並做爲設備的訪問入口。
設備文件和普通文件不同,它沒有大小的概念,只有設備號(major
、minor
),major
表示主設備號,用於區分設備類型,標明設備需要的驅動程序,minor
用於區分同種類型設備下,特定設備的訪問入口。
可以使用mknod
命令來創建設備文件,格式:mknod [options] name TYPE MAJOR MINOR
參數 | 類型 |
---|---|
-m | 創建設備的時候指定其權限 |
TYPE | 指定要創建的設備文件類型,b 塊設備,c 字符設備 |
MAJOR | 主設備號 |
MINOR` | 次設備號 |
mknod /dev/testdev3 b 83 3
ll | grep test.*
# brw-r--r--. 1 root root 83, 3 Jun 14 15:08 testdev3
各種接口的磁盤在 Linux 中的文件名如下所示,在centos6/7
之後,已經被統一爲/dev/sd
了。
/dev/sd[a-p][1-15]
:爲 SCSI, SATA, USB, Flash等接口的磁盤文件名;/dev/hd[a-d][1-63]
:爲 IDE 接口的磁盤文件名;
磁盤物理結構
要學習磁盤及文件系統的管理,首先要需要了解磁盤的存儲原理和讀寫機制,兩篇大神文章。
成果和榮耀歸於前輩。
磁盤分區
linux中有兩種分區方式:MBR和GPT。
MBR分區表系統
mbr
是傳統的分區機制,應用與絕大多數使用BIOS
的pc
設備,使用32
位表示扇區數,每個扇區的大小是512字節,所以mbr
能夠識別的扇區總數是2^32
個,容量爲2^32*512
字節(約爲2.2T
)。所以mbr
只能支持不超過2TB
的磁盤,超過2T
的硬盤只能使用2T
的空間。單個分區的扇區總數也不能超過2^32
個。
MBR
存放在磁盤在0
磁道0
扇區,大小爲512字節,由3個部分組成,分別是主引導記錄(Master Boot Record)、分區表(包含4個分區項)以及結束標誌。
Master Boot Record
是硬盤分區表的引導程序和數據區,一共佔用446
個字節,BIOS
讀取並執行這段代碼,如果被破壞系統就無法讀取到硬盤上的數據導致,系統無法啓動。
分區表佔用64
字節,每16
個字節標示一個分區,可以表示4
個分區,這4
個分區就是通常所說的主分區,如果想分出5
個及以上的分區,可以將分區表中的一個 16
字節區域指向硬盤的一個空間,將這個空間做爲一個新的分區表,這種分區被稱作擴展分區。
所謂擴展分區,嚴格地講它不是一個實際意義的分區,它僅僅是一個指向下一個分區的指針,這種指針結構將形成一個單向鏈表。這樣在主引導扇區中除了主分區外,僅需要存儲一個被稱爲擴展分區的分區數據,通過這個擴展分區的數據可以找到下一個分區(實際上也就是下一個邏輯磁盤)的起始位置,以此起始位置類推可以找到所有的分區。無論系統中建立多少個邏輯磁盤,在主引導扇區中通過一個擴展分區的參數就可以逐個找到每一個邏輯磁盤。
主分區和擴展分區的標識符爲 1-4,邏輯分區的的標識符爲 5 +
最後剩餘的 2 個字節是結束標識符,用來標示 Master Boot Record
是否正常有效,55AA
表示正常有效。
GPT分區表系統
GPT的全稱是全局唯一標識分區表(Globally Unique Identifier Partition Table),縮寫爲GPT
,是磁盤分區表結構佈局的標準。它是可擴展固件接口(EFI
)標準的一部分,被用於替代BIOS
系統中的MBR
分區表。
GPT
用64
位來表示扇區數,能識別的扇區總數2^64
次方,支持的最大磁盤/分區容量可以達到18EB
。
-
保護性MBR:
在GPT分區表的
0
扇區,處於兼容性考慮仍然存儲了一份傳統的MBR
,這個MBR
叫做保護性MBR
。其中包含有磁盤簽名,MBR分區表,結束標誌。這裏沒有引導代碼,分區表中只有一個分區表項,GPT不會用到,這個分區項只是爲了讓系統認爲磁盤是合法的。 -
GPT頭部
GPT頭部位於1號扇區,會定義分區表的起始位置,結束位置,分區表項個數;
分區表頭還記錄了這塊硬盤的GUID、分區表頭本身的位置和大小、備份分區表頭的位置和大小(在硬盤的最後)。它還儲存着它本身和分區表的
CRC32
校驗。固件、引導程序和操作系統在啓動時可以根據這個校驗值來判斷分區表是否出錯,如果出錯了,可以使用軟件從硬盤最後的備份GPT
中恢復整個分區表,如果備份GPT
也校驗錯誤,硬盤將不可使用。 -
分區表:分區表位於
GPT
磁盤的2
到33
號扇區,一共佔用32
個扇區,能夠容納128
個分區表項。每個分區表項大小爲128
字節。因爲每個分區表項管理一個分區,所以GPT
磁盤可以創建128
個分區。GPT分區表使用簡單而直接的方式表示分區。一個分區表項的前
16
字節是分區類型GUID
。接下來的16字節是該分區唯一的GUID(這個GUID指的是該分區本身,而之前的GUID指的是該分區的類型)。再接下來是分區起始和末尾的64位扇區編號,以及分區的名字和屬性。 -
分區區域:
GPT
分區區域就是用戶使用的分區,也是用戶進行數據存儲的區域。分區區域的起始地址和結束地址由GPT
頭定義。 -
分區表備份:分區區域結束後就是分區表備份,其地址在
GPT頭備份
扇區中有描述。分區表備份是對分區表32
個扇區的完整備份。如果分區表被破壞,系統會自動讀取分區表備份,也能夠保證正常識別分區。 -
GPT頭備份:GPT頭有一個備份,放在GPT磁盤的最後一個扇區,但這個GPT頭備份並非完全GPT頭備份,某些參數有些不一樣。複製的時候根據實際情況更改一下即可。
與主引導記錄(MBR)分區方案相比,GPT提供了更加靈活的磁盤分區機制。
-
支持2TB以上的大硬盤,且分區大小几乎沒有限制
-
每個磁盤的分區個數幾乎沒有限制(Windows系統最多隻允許劃分128個分區)。
-
分區表自帶備份。在磁盤的首尾部分分別保存了一份相同的分區表,其中一份被破壞後,可以通過 另一份恢復;
-
循環冗餘檢驗值針對關鍵數據結構而計算,提高了數據崩潰的檢測機率;
-
每個分區可以有一個名稱(不同於卷標)
要從GPT分區的硬盤啓動,則主板使用EFI、硬盤使用GPT分區、操作系統支持GPT和EFI這三個條件缺一不可。
fdisk 管理磁盤分區
-
查看硬盤分區表
fdisk [options] -l <disk>
如果指定
device
則列出指定磁盤的分區信息,不指定就返回所有磁盤的分區信息。
id
用來表示分區類型,一般83
表示普通分區,5
表示擴展分區,82
表示交換分區start
和end
對於centos6
來說表示起始柱面和結束柱面,對與centos7
來說表示起始扇區和結束扇區。 -
管理
fdisk
提供了一個交互式的接口來管理分區,他有許多的子命令分別用於管理不同的功能;並且所有的操作都在內存中完成,直到使用w
命令纔會保存到磁盤,在此之前隨時可以撤銷操作。命令格式
fdisk [options] <disk>
,如要對/dev/sdb
進行分區操作可以使用fdisk /dev/sdb
。子命令:
n 創建新分區 d 刪除已有分區 t 修改分區類型 l 查看所有已知分區類型 w 保存並退出 q 放棄修改並退出 p 顯示現有分區信息 m 查看幫助信息 需要注意的是,在已經分區過,並且其中某個分區已經被掛載的磁盤設備上創建新分區,內核可能在創建完成後無法直接識別,這時候可以通知內核強制杜宇磁盤分區表。
# 查看新的磁盤分區是否已經被內核識別 cat /proc/partitions
通知內核強制重讀磁盤分區表,若強制讀取一次不能成功,就重讀兩次。
# centos 5 partprobe [device] # centos 6/7 partx -a [device] kpartx -af [device]