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

參考鏈接: https://mp.weixin.qq.com/s?src=11×tamp=1591758659&ver=2391&signature=O9LSbW4ID2jVfPIcd3RLiBMfKnS-L*19FBttwHx0laKOuYe4gqnJQUK7H8jNvGY4*Wx08F8KYdjkkj-DZNhbvugrrV6lwHpMpl1bdpnvDLvTMWhoc2fchuRqllZFMQ0i&new=1
platter:盤片
wxy: 難道還存在有3個磁頭的?
wxy: 其作用貌似就是用於划分的,即我就是分"圈圈"維度的分割符
wxy: 我的理解稱為磁柱更合適,因為無論是從其英文的含義還是划分方式,都可以看做是一個空心的水桶,
磁盤是多個水桶套水桶,當然水桶也是有厚度的,這就跟扇區有關系了,下面會說。
另外,為了理解的方便往往稱之為"圈",即內外圈....
wxy: 查了一些資料,sector即扇區確實是指每個磁柱的橫截面上被切分的小區域,切分者是半徑,
所以這里其實還隱藏一個新的概念: 扇面, 顧名思義就是指橫截面被半徑切分得到的像蛋糕一樣的一個"小面",稱為"扇面"
track 和 扇面的結合就得到了 sector
之前,外圈的扇區面積比內圈的大,但是因為使用的磁物質密度不同,所以內外圈(即內外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分區,占用剛好1個扇區,硬盤的重要信息都在這一分區中,包含三部分
1)MBR(Master Boot Record)區:
規定專門用來存放開機引導程序,占用446byte,因為主機上電后首先就是從這里讀取數據,這樣才能進行操作系統的啟動。
硬盤分區表,記錄硬盤上的分區元信息,占用64byte,每條分區記錄占用16字節,所以一塊磁盤最多只能分4個,這樣的分區我們通通稱之為"主分區(primary partition)"。
用2個字節存放一個固定值:0x55AA,用來標識這個是第一分區
主要用來存放數據,分為2類分區: 主分區 和 邏輯分區
為什么這么划分,那是為了能夠不受只能分4區所限。
試想一下,如果一塊磁盤就划分成4個分區,那么如果一旦我又插入一個磁盤,我該將他分到哪里了?你又不能去變更划分好的分區吧(wxy:為什么不能)
所以,我就犧牲一個主分區將其變成一個擴展分區,類似於二級指針這種,可以在這個分區里可以進一步划分成邏輯分區(Logical partitions)
1) 擴展引導記錄,類似於DPT,只不過不用包含MBR,就只有擴展分區表和0x55AA結束符
2) 擴展基本分區/邏輯分區( Logical Partion):也是兩部分,引導扇區和數據扇區
為了實現邏輯分區的划分,每個邏輯分區都需要軟件層面的支持即"邏輯驅動器"
- 1 - 4號都是給主分區和擴展分區用的,5號之后才是給邏輯分區使用;
- 主分區是實實在在的分區,而擴展分區類似是指針的存在,其指向的下一級才是真正代表存儲介質的分區;
- 主分區可以有多個,但是擴展分區要么沒有(都是主分區), 要么只有一個(用來指向下一級)
# 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. 靈活的容量.
當使用邏輯卷時,文件系統可以擴展到多個磁盤上,你可以聚合多個磁盤或磁盤分區成單一的邏輯卷.
2.可伸縮的存儲池.
你可以使用簡單的命令來擴大或縮小邏輯卷大小,不用重新格式化或分區磁盤設備.
3.在線的數據再分配.
你可以在線移動數據,數據可以在磁盤在線的情況下重新分配.比如,你可以在線更換可熱插拔的磁盤.
4. 方便的設備命名
邏輯卷可以按你覺得方便的方式來起任何名稱.
5.磁盤條塊化.
你可以生成一個邏輯盤,它的數據可以被條塊化存儲在2個或更多的磁盤上.這樣可以明顯提升數據吞吐量.
6.鏡像卷
邏輯卷提供方便的方法來鏡像你的數據.
7.卷快照
使用邏輯卷,你可以獲得設備快照用來一致性備份或者測試數據更新效果而不影響真實數據.
2.實現原理
【核心思想】:
將整個存儲空間在邏輯上划分成一個一個卷稱為邏輯卷,為了方便和底層硬件映射,又將物理存儲介質統一用一個一個卷來划分稱為物理卷
而管理這種映射關系的稱為LVM。這個實現可以用如下的一張圖進行闡述。

注意: 物理卷實際是邏輯層面的抽象,只不過是對物理介質的抽象而已,實際上並不存在物理卷。所以按照這樣的思路我們自上而下的開始研究。
它建立在卷組之上,於是引入VG的概念。
wxy: 其實很好理解這個概念,把底層分布在各處的物理扇區整合成一個個物理卷然后集合在一起成為一個池子,最后就可以將其划分成整塊的邏輯卷。
PE的大小是可配置的,默認為4MB。所以物理卷(PV)由大小等同的基本單元PE組成。(當PV沒有加入卷組的時候 這時候PV的PE是未定的,
當PV加入卷組,PV的PE大小與卷組設定的PE大小相同)
wxy:我的理解是讓邏輯層面的物理卷並不是直接一對一對應到物理存儲介質,而是用PE來作為度量衡,然后這個度量衡還可配置。
例如上面的圖中,一個物理設備驅動而能屬於不同的PV,也就是說為了收集各個磁盤設備上的零散分區,用小單元去丈量。
PhysicalStorageMedia:物理存儲介質,指系統的物理存儲設備,如磁盤(/dev/hda、/dev/sda)等,是存儲系統最底層的存儲單元。
· 位於一個物理卷
· 跨越一個卷組的多個物理卷
· 多個鏡像位於同一卷組的不同物理卷
用如下的一張圖可以闡述這個過程

3. 快照
作用:
對某一時刻數據狀態的備份提供另一條訪問路徑,通過快照來備份數據到其它位置,備份完成后,快照就沒用了,卸載和移除該快照卷。快照空間的大小取決於數據改變的頻度和所需要使用的時間長度,即有限的時間內原文件數據改變的空間大小。
保存數據某一時刻的狀態。快照剛剛建立的時候,它的大小是空的。快照是訪問原文件的另一條路徑。快照是在數據改變之前將數據原封不動的保存到快照空間里面。注意數據變化的幅度不能超過給定快照空間的大小,否則快照將崩潰。
wxy: 還是不是很理解,反正就是一個思想是: 類似於git,如果發現數據寫錯了可以退回去。然后具體應用場景和用法可以等之后接觸到了再補充。


[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 字節
解析:
# 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的第二塊分區。
[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% /
....