1. 程式人生 > 實用技巧 >Linux核心之磁碟和分割槽

Linux核心之磁碟和分割槽

參考連結:
https://www.dell.com/community/資料儲存和保護-資料文件/AIX主機邏輯卷管理器-LVM-概念詳解-卷組-物理-邏輯卷-分割槽/ta-p/7183538 一: 磁碟
首先磁碟我們都知道,是真正的用來儲存資料的,當然幫我們往裡面寫的軟體就是磁碟驅動了
但是,磁碟寫了擦擦了寫,就會誕生很多不連續的物理空間,
於是,誕生了邏輯分割槽,即在邏輯層面模擬了磁碟分割槽,劃分的單位稱為邏輯卷,即一個邏輯上連續的邏輯卷可能地下連著多個不連續的物理空間
為了描述實現這種對映,於是誕生了物理卷等的概念,所以說所謂"物理"是相對於"邏輯"而言,其實是先有邏輯卷後有物理卷
此時幫上層應用往邏輯卷中寫資料的就是"邏輯卷驅動"了 從底層向上層,一層層來闡述吧 一. 硬體1:磁碟的組成原理
磁碟: 由很多個碟片組成的柱狀裝置,其他器件比如主軸,控制器,磁頭等協作工作將資料寫到磁碟中。


參考連結: https://mp.weixin.qq.com/s?src=11&timestamp=1591758659&ver=2391&signature=O9LSbW4ID2jVfPIcd3RLiBMfKnS-L*19FBttwHx0laKOuYe4gqnJQUK7H8jNvGY4*Wx08F8KYdjkkj-DZNhbvugrrV6lwHpMpl1bdpnvDLvTMWhoc2fchuRqllZFMQ0i&new=1
platter:碟片 head:磁頭,每個碟片一般有上下兩面,分別對應1個磁頭,共2個磁頭
wxy: 難道還存在有3個磁頭的? track:磁軌,是從碟片外圈往內圈編號0磁軌,1磁軌...,靠近主軸的同心圓用於停靠磁頭,不儲存資料
wxy: 其作用貌似就是用於劃分的,即我就是分"圈圈"維度的分割符 cylinder:柱面/磁柱,圓柱體被磁軌劃分後得到的就是一個個cylinder,一個磁碟具有cylinder數等同track的數量
wxy: 我的理解稱為磁柱更合適,因為無論是從其英文的含義還是劃分方式,都可以看做是一個空心的水桶,
磁碟是多個水桶套水桶,當然水桶也是有厚度的,這就跟扇區有關係了,下面會說。
另外,為了理解的方便往往稱之為"圈",即內外圈.... sector:扇區, 每個磁軌都被切分成很多扇形區域,每道的扇區數量相同。
wxy: 查了一些資料,sector即扇區確實是指每個磁柱的橫截面上被切分的小區域,切分者是半徑,
所以這裡其實還隱藏一個新的概念: 扇面, 顧名思義就是指橫截面被半徑切分得到的像蛋糕一樣的一個"小面",稱為"扇面"
track 和 扇面的結合就得到了 sector 扇區的大小: 每一個扇區可儲存的位元組資料,一般為512B,扇區為資料儲存的最小單元。
之前,外圈的扇區面積比內圈的大,但是因為使用的磁物質密度不同,所以內外圈(即內外cylinder)上的扇區大小都相同。
現在,內外圈已經採用相同密度物質來儲存資料,但是內外圈扇區數量不同
wxy: 內外圈大小不同,劃分數量又不同,就表示有可能每個扇區大小相同
綜上所述:
磁碟的容量 = 磁頭數 × 磁軌(柱面)數 × 每道扇區數 × 每扇區位元組數。
=有幾面(比如一般都是2面) × 從圓心向外一共有多少層 × 每一層有多少個小扇面單元 × 每一個單元中有多少位元組
二. 分割槽

硬體是死的,想要能用起來就需要驅動,作業系統這些軟體的操作,於是從安裝系統開始來講講到底是怎麼使用這一坨"死的"儲存裝置
所以接下來的概念,就有軟體層面的元素注入了。

0. windows的分割槽

首先,一塊物理硬碟是沒有什麼分割槽的概念的,但是為了眾所周知的原因需要分成一塊一塊分割槽,如何分呢?誰來分呢?

在裝機(安裝作業系統)之前就需要利用單獨的軟體為其分割槽,然後將分割槽的資訊儲存在主引導記錄(Master Boot Record,MBR)中,

之後開始安裝系統,相當於將作業系統程式放到一個分割槽中,然後將啟動程式(用來啟動作業系統的啟動程式)也放到MBR中

所以,MBR:這是一塊存在於磁碟驅動器開始部分的一個特殊的啟動扇區,正如上面所說的,MBR有兩個作用:記錄分割槽情況和啟動程式

最後,再回到分割槽,有以下幾個特性

1, 分割槽只能分成主分割槽和擴充套件分割槽,其實就是隻能劃分出來一個或幾個主分割槽,剩下的就叫做擴充套件分割槽。所以之有主分割槽才是真正官方圈出的地盤,也才是可以安裝作業系統的

2,主分割槽最多有4個,因為MBR中只能容納4條記錄

3,擴充套件分割槽裡可以再在作業系統層面進行劃分成若干邏輯分割槽

4,當然分割槽後還是不能直接安裝作業系統的,和Linux一樣要格式化,也就是安裝檔案系統。

5,一般我們的劃分都是一個主分割槽(第一分割槽),有了作業系統後就是C盤,然後作業系統會在剩下的擴充套件分割槽中劃分出DEF...碟符

分割槽是硬體,碟符是作業系統即軟體層面的東西,所謂分配碟符,就相當於掛載......

6,據說現在使用機械硬碟,所以沒有劃分分割槽的必要了,具體也沒有深究....

1. Linux的分割槽
硬碟為什麼要分割槽,這就像整理房間一樣,東西都要分門別類,所以我們就提前規劃好這一區域做什麼那一區域做什麼,而在這裡"區域"就是"分割槽"
學院派說: 資料安全和效能考慮? 哈哈哈哈哈哈..... 另外,分配單元是cylinder?,每一個分割槽都是連續的cylinder組成。 第一部分: 主引導記錄分割槽
稱為第1分割槽,佔用剛好1個扇區,硬碟的重要資訊都在這一分割槽中,包含三部分
1)MBR(Master Boot Record)區:
規定專門用來存放開機載入程式,佔用446byte,因為主機上電後首先就是從這裡讀取資料,這樣才能進行作業系統的啟動。 2)DPT(Disk Partition table)區:
硬碟分割槽表,記錄硬碟上的分割槽元資訊,佔用64byte,每條分割槽記錄佔用16位元組,所以一塊磁碟最多隻能分4個。那麼我們首先來看看是如何進行分割槽的。 3)特殊標記
用2個位元組存放一個固定值:0x55AA,用來標識這個是第一分割槽 wxy:前面說分割槽的單元是cylinder,那麼這個分割槽只佔用了一個扇區,剩餘的扇區呢? 第二部分: 資料分割槽們
主要用來存放資料,分為2類分割槽: 主分割槽 和 邏輯分割槽
為什麼這麼劃分,那是為了能夠不受只能分4區所限。
試想一下,如果一塊磁碟就劃分成4個分割槽,那麼如果一旦我又插入一個磁碟,我該將他分到哪裡了?你又不能去變更劃分好的分割槽吧(wxy:為什麼不能)
所以,我就搞了一個擴充套件分割槽,類似於二級指標這種,可以在這個分割槽裡可以進一步劃分,即邏輯分割槽 附: 用來存放詩句的分割槽單元我們稱之為"基本分割槽",每一個基本分割槽分為:引導扇區 和 資料扇區 主分割槽(Primary Partion):就是普通用於存放資料的分割槽,主分割槽就是"基本分割槽",分割槽的元資訊被記錄在DPT。這塊分割槽直接就可以使用。 擴充套件分割槽(Extension Partion): 需要再劃分得到邏輯分割槽才能使用,每一個邏輯分割槽都是好比一個帶分割槽磁碟,麻雀雖小五臟俱全,所以每一個邏輯分割槽也包含兩部分:
1) 擴充套件引導記錄,類似於DPT,只不過不用包含MBR,就只有擴充套件分割槽表和0x55AA結束符
2) 擴充套件基本分割槽/邏輯分割槽(Logical Partion):也是兩部分,引導扇區和資料扇區
為了實現邏輯分割槽的劃分,每個邏輯分割槽都需要軟體層面的支援即"邏輯驅動器" 小小結: 主引導記錄分割槽 資料分割槽 --- 主分割槽(1 - 4號分割槽)       擴充套件分割槽(2 - 4號分割槽)---- 擴充套件引導記錄區              邏輯分割槽( > 5號分割槽) ----- 引導扇區                                  資料扇區
總結幾個要點:
  • 1 - 4號都是給主分割槽和擴充套件分割槽用的,5號之後才是給邏輯分割槽使用;
  • 主分割槽是實實在在的分割槽,而擴充套件分割槽類似是指標的存在,其指向的下一級才是真正代表儲存介質的分割槽;
  • 主分割槽可以有多個,但是擴充套件分割槽要麼沒有(都是主分割槽), 要麼只有一個(用來指向下一級)
3. Linux磁碟分割槽命名及分割槽示例 1). 磁碟裝置的命名 (1) IDE磁碟為hdx, 其中x取值a ~ d,即hda,hdb, hdc,hdd, 因為IDE磁碟最多四個; (2) SCSI,SATA,USB磁碟為sdx, 其中x取值為a ~ z, 即sda,sdb,sdc,sdd,sde,...sdz, 也就是說最多可以有26個磁碟 2) 分割槽的命名 hda1 - 4 sdb1 - 4
# fdisk -l      ---檢視所有磁碟,以及磁碟的分割槽情況

磁碟 /dev/sda:1000.2 GB, 1000204886016 位元組,1953525168 個扇區    -----第一個磁碟:/dev/sda, 1000G的硬碟
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 4096 位元組
I/O 大小(最小/最佳):4096 位元組 / 4096 位元組
磁碟標籤型別:dos
磁碟識別符號:0x000809ff

   裝置 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   104859647    52428800   83  Linux   ----這個磁碟的主分割槽
/dev/sda2       104859648  1953523711   924332032   8e  Linux LVM

磁碟 /dev/mapper/cl-root:53.7 GB, 53687091200 位元組,104857600 個扇區    -----第二個磁碟: 53.7G
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 4096 位元組
I/O 大小(最小/最佳):4096 位元組 / 4096 位元組


磁碟 /dev/mapper/cl-swap:34.4 GB, 34359738368 位元組,67108864 個扇區     ------第三個磁碟
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 4096 位元組
I/O 大小(最小/最佳):4096 位元組 / 4096 位元組


磁碟 /dev/mapper/cl-home:858.5 GB, 858464976896 位元組,1676689408 個扇區    ------第四個磁碟
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 4096 位元組
I/O 大小(最小/最佳):4096 位元組 / 4096 位元組

3. 磁碟分割槽相關操作命令

<<<<<<待補充>>>>>>>>>>>>>>>>

4. 分割槽格式化與掛載

物理磁碟分割槽好之後,如下想要真正被使用,還需要進行格式化,即安裝上檔案系統,從軟體層面將硬體納入到軟體層面的管理中來

詳細的原理參見另一篇博文

https://www.cnblogs.com/shuiguizi/p/12100859.html

三:邏輯卷/物理卷的概念 1. 為什麼使用卷
  • 為了解決分割槽空間不夠用或者分割槽空間綽綽有餘的情況.
  • 解決基本磁碟分割槽的邊界是不能隨意擴充套件的問題,分割槽大小是在剛剛劃分分割槽的時候就決定了。
LVM將儲存虛擬化,使用邏輯卷,你不會受限於物理磁碟的大小,另外,與硬體相關的儲存設定被其隱藏,你可以不用停止應用或解除安裝檔案系統來調整卷大小或資料遷移.這樣可以減少操作成本. LVM與直接使用物理儲存相比,有以下優點:
1. 靈活的容量.
當使用邏輯卷時,檔案系統可以擴充套件到多個磁碟上,你可以聚合多個磁碟或磁碟分割槽成單一的邏輯卷.
2.可伸縮的儲存池.
你可以使用簡單的命令來擴大或縮小邏輯卷大小,不用重新格式化或分割槽磁碟裝置.
3.線上的資料再分配.
你可以線上移動資料,資料可以在磁碟線上的情況下重新分配.比如,你可以線上更換可熱插拔的磁碟.
4. 方便的裝置命名
邏輯卷可以按你覺得方便的方式來起任何名稱.
5.磁碟條塊化.
你可以生成一個邏輯盤,它的資料可以被條塊化儲存在2個或更多的磁碟上.這樣可以明顯提升資料吞吐量.
6.映象卷
邏輯卷提供方便的方法來映象你的資料.
7.卷快照
使用邏輯卷,你可以獲得裝置快照用來一致性備份或者測試資料更新效果而不影響真實資料. wxy: 即分割槽在使用一段時間後碎片化了無法使用連續的空間,另外看來前面想的是對的,果然劃分完了就不能再劃分了。 所以為了解決劃分完還想繼續加工,那麼我們可以將劃分好的儲存空間重新虛擬化出來一個"磁碟",然後對他進行分割槽。
2.實現原理
【核心思想】:
將整個儲存空間在邏輯上劃分成一個一個卷稱為邏輯卷,為了方便和底層硬體對映,又將物理儲存介質統一用一個一個捲來劃分稱為物理卷
而管理這種對映關係的稱為LVM。這個實現可以用如下的一張圖進行闡述。

注意: 物理卷實際是邏輯層面的抽象,只不過是對物理介質的抽象而已,實際上並不存在物理卷。所以按照這樣的思路我們自上而下的開始研究。 LV(Logical Volume): 邏輯卷,相當於為上層提供的儲存單元,類似於實際的物理層面中的磁碟扇區,在邏輯卷之上可以建立檔案系統。
它建立在卷組之上,於是引入VG的概念。 VG(Volume Group:卷組,起到一箇中間轉換的角色,卷組是由一個或多個物理卷組成的儲存池,在卷組上又能建立一個或多個邏輯卷。
wxy: 其實很好理解這個概念,把底層分佈在各處的物理扇區整合成一個個物理卷然後集合在一起成為一個池子,最後就可以將其劃分成整塊的邏輯卷。 PV(Physical Volume): 物理卷,是指在Logical層看到的磁碟分割槽或從與磁碟分割槽具有同樣功能的裝置(如RAID),對於LVM來說就是基本的儲存邏輯塊。 PE(Physical Extent):物理塊,每一個物理卷PV被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM定址的最小單元。
PE的大小是可配置的,預設為4MB。所以物理卷(PV)由大小等同的基本單元PE組成。(當PV沒有加入卷組的時候 這時候PV的PE是未定的,
當PV加入卷組,PV的PE大小與卷組設定的PE大小相同)
wxy:我的理解是讓邏輯層面的物理卷並不是直接一對一對應到物理儲存介質,而是用PE來作為度量衡,然後這個度量衡還可配置。
例如上面的圖中,一個物理裝置驅動而能屬於不同的PV,也就是說為了收集各個磁碟裝置上的零散分割槽,用小單元去丈量。

PhysicalStorageMedia:物理儲存介質,指系統的物理儲存裝置,如磁碟(/dev/hda、/dev/sda)等,是儲存系統最底層的儲存單元。 邏輯卷(lv)是將幾個磁碟分割槽或者塊裝置(pv,pv的id必須是8e的,pv可以位於不同的磁碟分割槽裡,pv大小可以不一)組織起來形成一個大的擴充套件分割槽(vg,卷組,一個vg至少要包含一個pv。),該擴充套件分割槽不能直接用,需要將其劃分成邏輯卷(lv)才能使用,lv可以格式化成不同的檔案系統,掛載後直接使用。 lv的擴充套件和縮減是不會影響原有資料的,但邏輯捲縮減的風險大於邏輯卷擴充套件的風險。邏輯卷可以支援快照功能。 邏輯卷只能屬於一個卷組。一個邏輯卷可以:
· 位於一個物理卷
· 跨越一個卷組的多個物理卷
· 多個映象位於同一卷組的不同物理卷
用如下的一張圖可以闡述這個過程
3. 快照
作用:
對某一時刻資料狀態的備份提供另一條訪問路徑,通過快照來備份資料到其它位置,備份完成後,快照就沒用了,解除安裝和移除該快照卷。快照空間的大小取決於資料改變的頻度和所需要使用的時間長度,即有限的時間內原檔案資料改變的空間大小。 工作原理:
儲存資料某一時刻的狀態。快照剛剛建立的時候,它的大小是空的。快照是訪問原檔案的另一條路徑。快照是在資料改變之前將資料原封不動的儲存到快照空間裡面。注意資料變化的幅度不能超過給定快照空間的大小,否則快照將崩潰。
wxy: 還是不是很理解,反正就是一個思想是: 類似於git,如果發現數據寫錯了可以退回去。然後具體應用場景和用法可以等之後接觸到了再補充。 四.Device mapper機制 Device mapper 是 Linux 2.6 核心中提供的一種從邏輯裝置到物理裝置的對映框架機制,在該機制下,使用者能夠很方便的根據自己的需要定製實現儲存資源的管理策略,當前比較流行的 Linux 下的邏輯卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基於該機制實現的。 wxy: 前面的章節我們講述了邏輯卷/物理卷概念的提出以及實現原理,而這種實現原理在核心中稱為Device mapper機制,具體的實現程式碼則有各種版本,包括LVM2,EVMS,dmraid等。 1. DM機制原理 參考連結:https://www.ibm.com/developerworks/cn/linux/l-devmapper/index.html 核心架構圖如下:

wxy: 首先,Device mapper 在核心中作為一個塊裝置驅動被註冊, 這裡我認為確切的說是某個基於DM機制實現的LVM2,EVMS,dmraid等 其次,關於DM的層次劃分,從使用者態到底層物理裝置,     ... 然後,說說MD機制中的三個關鍵的概念   1)mapped device,是核心抽象出來的邏輯裝置,他並不是真正的儲存裝置,而是由DM幫我們抽象出來的,給使用者層看的儲存裝置。 2) target device,代表底層物理裝置,注意是"代表", 他是DM機制裡對底層裝置的抽象,表示的是 mapped device 所對映的物理空間段。 3)對映表,從 Mapped device 到一個 target device 的對映表由一個多元組表示,該多元組由表示 mapped device 邏輯的起始地址、範圍、和表示在 target device 所在物理裝置的地址偏移量以及target 型別等變數組成(這些地址和偏移量都是以磁碟的扇區為單位的,即 512 個位元組大小)。 最後,三個關鍵的物件(mapped device,對映表,target device) ,結合底層裝置驅動(target driver)一起構成了一個可迭代的裝置樹, 該樹的根節點就是mapped device,作為邏輯裝置對外提供儲存; 該樹的葉子節點為target device ,表示的底層物理裝置提供真正的儲存介質。 2. 如何檢視DM狀況 在使用者態,可以使用device mapper庫介面函式 或 dmsetup工具檢視對映情況,如下: 1) 檢視邏輯磁碟裝置的對映表
[root@k8s220 ~]# dmsetup  table
cl-swap: 0 6291456 linear 202:2 2048
cl-root: 0 54517760 linear 202:2 6293504
[root@k8s220 ~]# ll /dev |grep xvda
brw-rw----. 1 root disk 202, 0 11月 24 14:17 xvda
brw-rw----. 1 root disk 202, 1 11月 24 14:17 xvda1
brw-rw----. 1 root disk 202, 2 11月 24 14:17 xvda2

解析: 有兩個邏輯分割槽,儲存情況如下

分割槽cl-swap, 6291456個扇區大小( 對應邏輯裝置的0 ~ 6291456-1號扇區),

       以線性對映的方式對應到物理裝置202:2(代表/dev/xvda2)的第2048號開始的扇區( 結束於2048 +6291456 - 1= 6293503 )

分割槽cl-root, 54517760 個扇區大小(對應邏輯裝置的0 ~54517760 -1 號扇區),

      以線性對映的方式對應到物理裝置202:2(代表/dev/xvda2)的第6293504號開始的扇區( 結束於 6293504+ 54517760- 1= 60,811,263)

2) 從磁碟資訊的角度檢視

[root@k8s220 ~]# fdisk -l

磁碟 /dev/xvda:32.2 GB, 32212254720 位元組,62914560 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x000bfce9

    裝置 Boot      Start         End      Blocks   Id  System
/dev/xvda1   *        2048     2099199     1048576   83  Linux      ---主分割槽,可以直接使用
/dev/xvda2         2099200    62914559    30407680   8e  Linux LVM  ---擴充套件分割槽,不可直接使用, 需要再劃分才可以使用, 共60,815,359個扇區

磁碟 /dev/mapper/cl-root:27.9 GB, 27913093120 位元組,54517760 個扇區   ---mapper路徑下,為邏輯分割槽1,
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組


磁碟 /dev/mapper/cl-swap:3221 MB, 3221225472 位元組,6291456 個扇區     ----mapper路徑下,為邏輯分割槽2
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組

解析:

首先,邏輯扇區對映表中記錄的資訊剛好在磁碟裝置中有對應,大小符合 然後,對於真正的物理磁碟, 只有1個主分割槽 和 1個擴充套件分割槽(2號), 沒有邏輯分割槽(>5號) 其中主分割槽是可以直接使用的(檢視檔案系統可以看出,該分割槽已經掛載到了"/" 目錄下) 但是擴充套件分割槽是不能使用的,其必須有後面的邏輯分割槽才行,而此時並沒有 > xvda(>5), 即沒有邏輯分割槽,所以這個擴充套件分割槽(指標)指向了哪裡呢? 最後, 真正被擴充套件分割槽(指標)指向的是Device mapper機制管理的底層物理儲存裝置,即被Device mapper做邏輯卷映射了 所以,在邏輯卷分割槽表中的兩個分割槽,其儲存空間的和 =6291456 +54517760 =60,809,216, 佔用的是/dev/xvda2的2048 ~60,811,263 號扇區

3) 回頭看看邏輯卷,在裝置列表中,是以什麼形態呈現的

[root@k8s220 mapper]# ll /dev/mapper/
總用量 0
lrwxrwxrwx. 1 root root 7 11月 24 14:17 cl-root -> ../dm-0
lrwxrwxrwx. 1 root root 7 11月 24 14:45 cl-swap -> ../dm-1
crw-------. 1 root root 10, 236 11月 24 14:17 control


[root@k8s220 mapper]# ll /dev/ |grep dm
crw-------. 1 root root 10, 60 11月 24 14:17 cpu_dma_latency
brw-rw----. 1 root disk 253, 0 11月 24 14:17 dm-0
brw-rw----. 1 root disk 253, 1 11月 24 14:45 dm-1
crw-------. 1 root root 1, 12 11月 24 14:17 oldmem

解析:

雖然認為是"裝置",但實際上虛擬出來的,待邏輯層面(使用者側)看是裝置dm-0和dm-1, 但實際上其就是/dev/xvda2這塊裝置,

更確切的說是磁碟xvda的第二塊分割槽。

四:特殊磁碟型別