上篇介紹了分割槽,都是建立在硬碟的基礎之上,但是問題出現了,硬碟的空間是固定的,一般的,無論我們的電腦還是伺服器,都可以容納多塊硬碟,甚至還可以使用USB等介面接入額外的儲存,這樣,如果都是用單個硬碟的分割槽來管理,比如擴容,非常不方便,有沒有辦法把多個硬碟視為一個整理,當做一塊硬碟來管理分割槽呢?這就是本篇說下物理卷、卷組、邏輯卷,也就是LVM(邏輯卷管理)。
現簡單說說基本概念:
物理卷(Physical Volume):從理解上說,無論是硬碟還是分割槽等,都是儲存的容器,但是他們不是一類,所以我們需要一個統一,這就是物理卷,所以當你看到物理卷這個概念的時候,你可以把它就理解成儲存空間即可,至於是什麼不重要。
卷組(Volume Group):有了多個物理卷,我們將他們組合成一個整體,它就是卷組,我們可以把卷組視為一塊邏輯上的硬碟。
邏輯卷(Logical Volume):有了卷組這個邏輯硬碟,就可以對它進行分割槽掛載使用了,這個分割槽就是邏輯卷。
所以,LVM的過程是這樣的:對每個硬碟或者分割槽建立物理卷,多個物理卷組成卷組,對卷組進行分割槽就有了邏輯卷,將邏輯卷格式化掛載使用。
用圖來說明:
下面我們開始演示:
首先,我們這裡有兩塊硬碟:/dev/sdb
和/dev/sdc
可以看到,他們都是10G,如果但使用硬碟的分割槽,我們無法建立一個15G空間的分割槽系統,但是使用邏輯卷卻可以,下面我們一步步演示。
建立物理卷
為了得到15G的空間,我們可以對兩塊硬碟直接建立物理卷,但是方便演示,我們這邊這麼做:
1、對/dev/sdb直接建立物理卷,也就是10G
2、對/dev/sdc建立一個5G的分割槽/dev/sdc1,然後將分割槽做成物理卷,也就是5G
3、對於/dev/sdb剩餘空間,我們建立分割槽/dev/sdc2,後續可以用來擴容
對/dev/sdb
直接建立物理卷,執行命令:sudo pvcreate /dev/sdb
對/dev/sdc
建立兩個5G的分割槽,這裡我直接使用fdisk
來建立(建立過程參考上一篇),執行:sudo fdisk /dev/sdc
注:我這裡採用的是fdisk
來分割槽,如果採用parted
來分割槽,這個備註可以跳過:
使用fdisk建立了分割槽,建議將分割槽型別改成Linux LVM,雖然不修改也沒問題,但是可以方便後續管理,否則哪天接手的同學沒注意,對分割槽進行了一些危險操作就尷尬了。
修改分割槽型別操作過程如下圖:
注:分割槽建立好了,可能需要重啟,或者使用sudo partprobe
更新分割槽表
接著執行下面兩個命令建立物理卷:
sudo pvcreate /dev/sdc1
sudo pvcreate /dev/sdc2
然後我們可以採用pvscan(列出所有的物理卷)或者pvdisplay(列印所有物理卷的基本資訊)來檢視:
建立卷組
我們對/dev/sdb
和/dev/sdc1
建立卷組,後續將/dev/sdc2
加入卷組進行擴容。
首先,我們介紹一個概念:
物理擴充套件(Physical Extend,PE):我們將多個物理卷拼在一起,但是他們的大小不一樣,所以我們需要有一個統一,就是定義一個基本單元,然後每個物理卷按照這個基本單元來劃分有多個,最終決定這個物理卷的大小,而這個基本單元就是PE,預設4M,比如一個101M的分割槽,可以劃分25個PE,那麼也就是說可用的空間就是100M了。PE是卷組儲存資料的最小單元。注意,PE大小在卷組建立時指定,一定卷組建立,PE大小將不可改變。
我們執行下面的命令建立卷組:
# 如果不指定PE,那麼直接執行,vg-test是卷組名稱,/dev/sdb和/dev/sdc1是物理卷名
sudo vgcreate test-vg /dev/sdb /dev/sdc1
# 如果要指定PE,可以使用-s引數,例如:
sudo vgcreate -s 8M test-vg /dev/sdb /dev/sdc1
建立完成,我們可以使用sudo vgscan
列出所有的卷組
或者透過sudo vgdisplay test-vg
來檢視卷組資訊
建立邏輯卷
首先,這裡也有個概念:
邏輯擴充(Logical Extend,LE):它類似於卷組的PE,只不過它是邏輯卷分配的最小單元,在同一卷組中,它決定於卷組的PE,且每個LE與卷組中的一個PE對應,大小相同。
有了卷組,我們可以建立邏輯卷:
# 透過指定PE個數來建立,使用-l引數指定PE個數,推薦使用這個方式
sudo lvcreate -l 3838 -n test-vg-test-lv test-vg
# 透過指定大小來建立,使用-L引數指定邏輯卷的大小,單位為:kKmMgGtT
sudo lvcreate -L 15G -n test-vg-test-lv test-vg
上面兩種方式推薦採用指定PE個數的方式,因為更直觀,只需換算一下就好了,採用其它方式指定最終也是轉換為PE個數的方式。
建立之後,我們可以採用sudo lvscan
檢視
或者使用sudo lvdisplay /dev/test-vg/test-vg-test-lv
直接列印邏輯卷的基本資訊,注意邏輯卷的名稱:
掛載
到這裡,邏輯卷就建立完成了,我們現在可以掛載使用
# 建立掛載目錄
sudo mkdir /mnt/test
# 格式化
sudo mkfs.xfs /dev/test-vg/test-vg-test-lv
# 掛載
sudo mount /dev/test-vg/test-vg-test-lv /mnt/test
接下來就可以正常使用了,我們可以透過df -h
命令檢視掛載情況
還可以透過sudo lsblk
命令檢視硬碟分割槽的使用情況
擴容
到這裡,我們已經透過將兩個10G大小的硬碟,建立出來了15G的檔案系統,接著我們繼續看看擴容。
首先,我們還有個/dev/sdc2
分割槽沒有使用,前面我們已經對它建立物理卷,接下來我們把它加入到卷組:sudo vgextend test-vg /dev/sdc2
可以看到,空間增加了5G,接著我們可以把這個5G的空間加到我們已經建立的邏輯卷中去。
# 可以使用-l指定PE個數的方式,使用+號,表示增加容量,不使用表示擴容後的大小
sudo lvextend -l +1279 /dev/test-vg/test-vg-test-lv
# 也可以使用-L指定邏輯卷的大小,使用+號,表示增加容量,不使用表示擴容後的大小
sudo lvextend -l +5G /dev/test-vg/test-vg-test-lv
同分割槽一樣,我們現在只是擴容了邏輯卷,想讓它可以可用,我們需要調整分割槽大小,注意,切記格式化,否則資料將會丟失:
# 如果是ext4,使用resize2fs命令,後面引數是分割槽
sudo resize2fs /dev/test-vg/test-vg-test-lv
# 如果是xfs,使用xfs_growfs命令,後面引數是掛載點
sudo xfs_growfs /dev/test-vg/test-vg-test-lv
基本命令
到這裡,物理卷、卷組、邏輯卷相關基礎就說完了,這裡總結一下命令,每個命令有很多引數,需要自行去嘗試:
物理卷 | 卷組 | 邏輯卷 | 說明 |
pvcreate | vgcreate | lvcreate | 建立物理卷、卷組、邏輯卷 |
pvdisplay | vgdisplay | lvdisplay | 列印物理卷、卷組、邏輯卷的基本資訊 |
pvremove | vgremove | lvremove | 刪除物理卷、卷組、邏輯卷 |
pvscan | vgscan | lvscan | 掃描物理卷、卷組、邏輯卷(只有名稱等資訊) |
vgextend | lvextend | 給卷組、邏輯卷擴容 |
總結
分割槽相關的基礎就說到這裡吧,這裡是入門,比較淺顯的,深入裡面還有很多細節,總之,系統安裝前,一定要做好磁碟分割槽的規劃,否則後續很麻煩。