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分區,占用剛好1個扇區,硬盤的重要信息都在這一分區中,包含三部分
1)MBR(Master Boot Record)區:
規定專門用來存放開機引導程序,占用446byte,因為主機上電后首先就是從這里讀取數據,這樣才能進行操作系統的啟動。
 
2)DPT(Disk Partition table)區:
硬盤分區表,記錄硬盤上的分區元信息,占用64byte,每條分區記錄占用16字節,所以一塊磁盤最多只能分4個,這樣的分區我們通通稱之為"主分區(primary partition)"。
其中主引導分區他自己就占用了1條記錄,於是,剩下的部分,最多能划分成3個分區,即第2-4分區
 
3)特殊標記
用2個字節存放一個固定值:0x55AA,用來標識這個是第一分區
wxy:前面說分區的單元是cylinder,那么這個分區只占用了一個扇區,剩余的扇區呢?
 
1.2  第二分區: 數據分區們
主要用來存放數據,分為2類分區: 主分區 和 邏輯分區
為什么這么划分,那是為了能夠不受只能分4區所限。
試想一下,如果一塊磁盤就划分成4個分區,那么如果一旦我又插入一個磁盤,我該將他分到哪里了?你又不能去變更划分好的分區吧(wxy:為什么不能)
所以,我就犧牲一個主分區將其變成一個擴展分區,類似於二級指針這種,可以在這個分區里可以進一步划分成邏輯分區(Logical partitions)
主分區(Primary Partion):就是普通用於存放數據的分區,分區的元信息被記錄在DPT。這塊分區直接就可以使用。
擴展分區(Extension Partion):  需要再划分得到邏輯分區才能使用,每一個邏輯分區都是好比一個帶分區磁盤,麻雀雖小五臟俱全,所以每一個邏輯分區也包含兩部分:
                 1) 擴展引導記錄,類似於DPT,只不過不用包含MBR,就只有擴展分區表和0x55AA結束符
                 2) 擴展基本分區/邏輯分區( Logical Partion):也是兩部分,引導扇區和數據扇區
                     為了實現邏輯分區的划分,每個邏輯分區都需要軟件層面的支持即"邏輯驅動器"
 
小小結:
1.主引導記錄分區
2.數據分區  ---    主分區(2 - 4號分區)
      或   主分區  + 擴展分區(2 -  4號分區) ----   擴展引導記錄區
                                              邏輯分區 ( > 5號分區)  -----   引導扇區
                                    數據扇區
總結幾個要點:
  • 1 - 4號都是給主分區和擴展分區用的,5號之后才是給邏輯分區使用;
  • 主分區是實實在在的分區,而擴展分區類似是指針的存在,其指向的下一級才是真正代表存儲介質的分區;
  • 主分區可以有多個,但是擴展分區要么沒有(都是主分區),  要么只有一個(用來指向下一級)
 
1.3 Linux磁盤分區命名及分區示例
1). 磁盤設備的命名
   (1)  IDE磁盤為hd x,  其中 x取值a ~ d,即hda,hdb, hdc,hdd,    因為IDE磁盤最多四個;
   (2)  SCSI,SATA,USB磁盤為sd x, 其中 x取值為a ~ z, 即sda,sdb,sdc,sdd,sde,...sdz, 也就是說最多可以有26個磁盤
 
 2) 分區的命名
     hda1 - 4
     sdb1 - 4
 
3) 分區id, 常用的有
      83 Linux native partition,Linux is a Unix-like operating system written by Linus Torvalds and many others on the internet since Fall 1991. 
   8e Linux Logical Volume Manager partition,
          wxy:linux邏輯卷管理分區,所以可以認為這是一個邏輯分區? 目前還沒找到有效資料說明這一點
 
# 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 ----這個磁盤的第1主分區,MBR /dev/sda2 104859648 1953523711 924332032 8e Linux LVM ---磁盤的第2分區,id 為8e,代表是邏輯卷,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. 分區格式化與掛載

物理磁盤分區好之后,如下想要真正被使用,還需要進行格式化,即安裝上文件系統,從軟件層面將硬件納入到軟件層面的管理中來

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

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個扇區。id 為8e代表是邏輯卷

磁盤 /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) 查看物理卷信息,驗證了上一步想法
# pvdisplay
  --- Physical volume ---
  PV Name               /dev/xvda2   ###這個物理卷來自xvda2
  VG Name               cl           ###物理卷組是c1
  PV Size               29.00 GiB / not usable 3.00 MiB     ###占用的磁盤的29G的空間
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              7423
  Free PE               0
  Allocated PE          7423
  PV UUID               dj2nJv-PCac-vgHl-Tdht-FpGV-B1Nh-yMZsc3

 

4) 回頭看看邏輯卷,在設備列表中,是以什么形態呈現的

[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的第二塊分區。

 

 4)看看安裝在分區上的文件系統,以及這些文件系統如何掛載的
注:文件系統的章節見:
[root@k8s220 /]# df -Th
文件系統            類型      容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root xfs        26G   11G   16G   41% /
devtmpfs            devtmpfs  3.9G     0  3.9G    0% /dev
tmpfs               tmpfs     3.7G     0  3.7G    0% /dev/shm
tmpfs               tmpfs     3.7G  380M  3.3G   11% /run
tmpfs               tmpfs     3.7G     0  3.7G    0% /sys/fs/cgroup
/dev/xvda1          xfs      1014M  121M  894M   12% /boot
tmpfs               tmpfs     746M     0  746M    0% /run/user/0
overlay             overlay    26G   11G   16G   41% /var/lib/docker/overlay2/ba835bf0837a7c3e88a0b3898f1376a839525d1492493837a684a3569b231158/merged
shm                 tmpfs      64M     0   64M    0% /var/lib/docker/containers/de050fb946e9362930426fb98d5b2c11aa4daca18f9aa24ba7a483cb7852663a/shm

解析: 

第一塊物理分區: /dev/xvda1,安裝的是xfs類型的文件系統,被掛載到了/boot目錄下

第二塊物理分區/dev/xvda2,其中一塊被映射成/dev/mapper/cl-root(假)設備, 安裝的是xfs類型的文件系統,被掛載到了根目錄下

 

一個例子

 

【需求】
一台虛擬機上,目前的磁盤不夠,於是重新分配了新的磁盤,需要擴充到根目錄中
此時磁盤信息在之前的基礎上(見上面)增加如下
...

磁盤 /dev/xvde:75.2 GB, 75161927680 字節,146800640 個扇區       ----新增的磁盤
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
 
邏輯卷情況如下:
[root@tmp-82 ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/xvda2
  VG Name               cl    ----根目錄使用的邏輯卷所屬的卷組的名稱
  PV Size               29.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              7423
  Free PE               0
  Allocated PE          7423
  PV UUID               dj2nJv-PCac-vgHl-Tdht-FpGV-B1Nh-yMZsc3

 

【基本思路】
首先,因為都是使用的邏輯卷方式(Device Mapper)掛載到的根目錄,
然后,同樣將新增的磁盤虛擬化,即映射成邏輯卷,
最后,將新卷擴充到根目錄中

 

 

 【操作步驟】

1. 將物理磁盤直接添加到物理卷組中

[root@tmp-82 ~]# vgextend cl /dev/xvde
  Physical volume "/dev/xvde" successfully created.
  Volume group "cl" successfully extended
[root@tmp-82 ~]# 

結果:
[root@tmp-82 cl]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/xvda2
  VG Name               cl
  PV Size               29.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              7423
  Free PE               0
  Allocated PE          7423
  PV UUID               dj2nJv-PCac-vgHl-Tdht-FpGV-B1Nh-yMZsc3
   
  --- Physical volume ---
  PV Name               /dev/xvde
  VG Name               cl
  PV Size               70.00 GiB / not usable 4.00 MiB       ----注:總共70G, 但是其中有4M不能用
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              17919
  Free PE               17919
  Allocated PE          0
  PV UUID               Z6H0y5-9Ajl-5to6-Q7Bk-2rbN-sNZQ-3OUssC

 

 2. 物理卷池子中空間增大了,於是可以通知為邏輯卷添加空間

[root@tmp-82 cl]# lvextend -L +70g /dev/cl/root
  Insufficient free space: 17920 extents needed, but only 17919 available
解析:差一塊,原因是有4M不能用

[root@tmp-82 cl]#  lvextend -L +65g /dev/cl/root
  Size of logical volume cl/root changed from 26.00 GiB (6655 extents) to 91.00 GiB (23295 extents).
  Logical volume cl/root successfully resized.
或
lvextend -L +65g /dev/mapper/cl-root

 

說明:之所以擴充的的如上的目錄s,是因為有如下的對應關系

[root@tmp-82 cl]# ll /dev/mapper/cl-root
lrwxrwxrwx 1 root root 7 11月  9 10:21 /dev/mapper/cl-root -> ../dm-0

[root@tmp-82 cl]# ll /dev/cl/root
lrwxrwxrwx 1 root root 7 11月  9 10:21 /dev/cl/root -> ../dm-0

[root@tmp-82 cl]# ll |grep dm
lrwxrwxrwx 1 root root 7 11月  9 10:21 root -> ../dm-0
lrwxrwxrwx 1 root root 7 11月  9 10:21 swap -> ../dm-1 即: /dev/mapper/cl-root =  ../dm-0 = /dev/cl/root

 

 3.  邏輯卷池子增大了,於是可以通知為文件系統增加空間了

# xfs_growfs /dev/mapper/cl-root
meta-data=/dev/mapper/cl-root    isize=512    agcount=4, agsize=1703680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=6814720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=3327, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 6814720 to 23854080

注:
resize2fs 命令 針對的是ext2、ext3、ext4文件系統
xfs_growfs 命令 針對的是xfs文件系統

 

 

4. 結果, 從26 + 65 = 91
[root@tmp-82 cl]# df -Th
文件系統 類型 容量 已用 可用 已用% 掛載點
/dev/mapper/cl-root xfs 91G 16G 76G 18% /

....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM