一、簡介 LVM(Logical Volume Manager)邏輯捲管理,是在硬碟分區和文件系統之間添加的一個邏輯層,為文件系統屏蔽下層硬碟分區佈局,並提供一個抽象的盤捲,在盤捲上建立文件系統。管理員利用LVM可以在硬碟不用重新分區的情況下動態調整文件系統的大小,並且利用LVM管理的文件系統可以跨 ...
目錄
一、簡介
LVM(Logical Volume Manager)邏輯捲管理,是在硬碟分區和文件系統之間添加的一個邏輯層,為文件系統屏蔽下層硬碟分區佈局,並提供一個抽象的盤捲,在盤捲上建立文件系統。管理員利用LVM可以在硬碟不用重新分區的情況下動態調整文件系統的大小,並且利用LVM管理的文件系統可以跨越物理硬碟。當伺服器添加了新的硬碟後,管理員不必將原有的文件移動到新的硬碟上,而是通過LVM直接擴展文件系統來跨越物理硬碟。
LVM就是通過將底層的物理硬碟封裝,然後以邏輯捲的方式呈現給上層應用。當我們對底層的物理硬碟進行操作時,不再是針對分區進行操作,而是通過邏輯捲對底層硬碟進行管理操作。
基礎術語
物理存儲介質(The physical media):LVM存儲介質,可以是硬碟分區、整個硬碟、raid陣列或SAN硬碟。設備必須初始化為LVM物理捲,才能與LVM結合使用。
物理捲PV(physical volume):物理捲就是LVM的基本存儲邏輯塊,但和基本的物理存儲介質比較卻包含與LVM相關的管理參數,創建物理捲可以用硬碟分區,也可以用硬碟本身。
捲組VG(Volume Group):LVM捲組類似於非LVM系統中的物理硬碟,一個捲組VG由一個或多個物理捲PV組成。可以在捲組VG上建立邏輯捲LV。
邏輯捲LV(logical volume):類似於非LVM系統中的硬碟分區,邏輯捲LV建立在捲組VG之上。在邏輯捲LV之上建立文件系統。
物理塊PE(physical Extent):物理捲PV中可以分配的最小存儲單元,PE的大小可以指定,預設為4MB
邏輯塊LE(Logical Extent):邏輯捲LV中可以分配的最小存儲單元,在同一捲組VG中LE的大小和PE是相同的,並且一一相對。
創建LV邏輯捲流程圖
LVM的優點
捲組VG可以使多個硬碟空間看起來像是一個大硬碟。
邏輯捲LV可以創建跨多個硬碟空間的分區。
在使用邏輯捲LV時,可以在空間不足時動態調整大小,不需要考慮邏輯捲LV在硬碟上的位置,不用擔心沒有可用的連續的空間。
可以線上對捲組VG、邏輯捲LV進行創建、刪除、調整大小等操作。但LVM上的文件系統也需要重新調整大小。
LVM允許創建快照,用來保存文件系統的備份。
二、實驗
1)分區(非必須,也可以不分區),這裡我拿一塊盤分區,一塊盤不分區
不知道怎麼分區的可以參考我之前的文章:Linux磁碟分區、格式化、掛載
2)使用pvcreate創建物理捲PV
$ pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc
# 檢查
$ pvs
/dev/sdb1之前用ext4格式化過,這裡就會提示是否擦除它,選擇[y]擦除就行
檢查
文件類型已經是LVM2_member類型了
查看詳情
$ pvdisplay /dev/sdb1
3)創建捲組VG
使用vgcreate創建捲組VG,並且此處可以-s選項指定PE(LE)的大小,(預設PE大小4M)
$ vgcreate vg /dev/sdb1 /dev/sdb2 /dev/sdc
創建完成後查看一下
$ vgs
$ vgdisplay vg
[root@centos8-nat-168-182-152 ~]# vgdisplay vg
--- Volume group ---
VG Name vg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size <9.99 GiB
PE Size 4.00 MiB //可以看到vg的PE大小為4M,預設大小
Total PE 2557
Alloc PE / Size 0 / 0
Free PE / Size 2557 / <9.99 GiB
VG UUID EWYDq2-cg88-ps4t-ZT8P-Fm7m-qkJq-8CKe0j
註意:PE大,讀取速度快,但浪費空間。反之,讀取速度慢,但節省空間。類似於socket
4)創建邏輯捲LV
使用lvcreate創建LV。lvcreate -n lvname -L lvsize(M,G) vgname
#創建三個LV
$ lvcreate -n lv1 -L 64M vg
$ lvcreate -n lv2 -L 128M vg
$ lvcreate -n lv3 -L 256M vg
#查看
$ lvs
此時我們再看下pv和vg的使用情況
$ pvdisplay /dev/sdb1
$ vgdisplay vg
5)格式化與掛載
註意:在格式化之前需要知道xfs文件系統只支持增大,不支持減小。ext2、ext3、ext4增大減小都支持。
所以這裡我們先使用ext4的文件系統格式化
#將lv1格式化成ext4
$ mkfs.ext4 /dev/vg/lv1
#創建掛載目錄
$ mkdir /opt/lv1
$ mount /dev/vg/lv1 /opt/lv1
這裡的/dev/vg/lv1實際是一個軟鏈接,實際地址如下
6)邏輯捲LV擴容(動態擴容)
首先需要確認是否有可用的擴容空間,邏輯捲LV是從捲組VG中創建的,所有在邏輯捲LV擴容前需要查看捲組VG的空間使用情況。
$ vgs
$ vgdisplay vg
在確認有多餘空間的情況下,使用lvextend命令的-L選項擴展邏輯捲LV的大小
#+100M是增加100M
$ lvextend -L +100M /dev/vg/lv1
#直接使用1024M是增加到1024M
$ lvextend -L 1024M /dev/vg/lv1
$ lvs
但是在我們使用df命令查看時,會發現我們文件系統並沒有擴展
$ df -h /opt/lv1
但是通過lsblk看是已經擴容了
$ lsblk
這是因為文件系統也需要擴容。ext4文件系統擴容使用"resize2fs [邏輯捲名稱]",xfs文件系統擴容使用"xfs_growfs 掛載點"
#ext4文件系統擴容
$ resize2fs /dev/vg/lv1
當然來到CentOS7後,我們還可以使用lvextend命令的-r選項來使文件系統自動擴容,實例如下:
$ lvextend -L +1024M -r /dev/vg/lv1
$ df -h
7)捲組VG擴容
捲組的擴容相當簡單,一般是LVM空間不夠時,添加一塊新硬碟時使用。
增加一塊磁碟/dev/sdd
擴容
$ vgextend vg /dev/sdd
$ vgs
$ pvs
8)邏輯捲LV縮小
邏輯捲LV縮小命令lvreduce與擴容命令類似,縮減邏輯捲LV請謹慎操作,實例如下:
1、lvreduce命令使用-L選項減少空間,-r選項減少文件系統空間,實現動態調整(這是ext4文件系統)
#縮容到100M
$ lvreduce -L 100M -r /dev/vg/lv1
$ df -h /opt/lv1
知識擴展
#擴展lv使用vg剩餘的所有空間 將/data1使用vg1剩餘的所有空間
$ lvextend -l +100%FREE /dev/vg/lv1 #註意這裡是小寫的l
#將vg剩餘的所有空間創建為一個lv
$ lvcreate -l 100%FREE -n lv2 vg #註意這裡是小寫的l
2、如果不使用-r選項,那麼需要卸載掛載點再使用resize2fs調整
#卸載掛載
$ umount /opt/lv1
#運行e2fsck 檢測文件系統
$ e2fsck -f /dev/vg/lv1
$ resize2fs /dev/vg/lv1 100M
$ lvreduce -L 100M /dev/vg/lv1
$ mount /dev/vg/lv1 /opt/lv1
註意:應該先縮小文件系統後再縮小邏輯捲,否則在進行lv邏輯捲縮小時產生文件系統大小與物理分區不匹配的錯誤
【問題】
-ext4 lvreduce報錯Either the superblock or the partition table is likely to be corrupt!
【解決】
# 卸載
$ umount /opt/lv1
# 擴容至原來lv大小
$ lvresize -L 100M /dev/vg/lv1
# 檢查ext4文件系統,並校正
$ e2fsck -f /dev/vg/lv1
# lvreduce縮容
$ lvreduce -L 50M /dev/vg/lv1
$ mount /dev/vg/lv1 /opt/lv1
9)xfs文件系統的實驗
1、格式化、掛載
$ mkfs.xfs /dev/vg/lv2
$ mkdir /opt/lv2
$ mount /dev/vg/lv2 /opt/lv2
$ df -h /opt/lv2
2、使用lvextend的-L選項和-r選項動態擴容
# 使用-r動態擴容
$ lvextend -L +20M -r /dev/vg/lv2
# 下麵兩句就是動態擴容
$ lvextend -L 200M /dev/vg1/lv2
$ xfs_growfs /opt/lv2
3、縮容
使用lvreduce的-r選項嘗試減小空間,縮容失敗
$ lvreduce -L -20M -r /dev/vg/lv2
再試試lvreduce和xfs_growfs組合能不能動態減少空間。這裡為什麼說動態呢?因為xfs_groefs必須是掛載情況下才能使用,後面跟的是掛載點。
$ df -h /opt/lv2
$ lvreduce -L 100M /dev/vg/lv2
$ xfs_growfs /opt/lv2
一樣失敗了
結論:xfs文件系統真的只能增大,不能減小。
10)捲組VG縮小
捲組VG的縮小,要查看物理捲PV是否被使用,因為無法縮減一個正在使用的物理捲PV。如下:
#拷貝一些數據
$ cp /etc/passwd /opt/lv1/
$ pvs
$ vgreduce vg /dev/sdd
場景多用於更換舊硬碟。
11)刪除LVM
刪除LVM步驟:umount卸載-->lvremove移除邏輯捲LV-->vgremove移除捲組VG-->pvremove移除物理捲PV
#卸載,一定要卸載,要不然移除不了
umount /opt/lv1
umount /opt/lv2
umount /opt/mail-lv
#移除lv
lvremove /dev/vg/lv1
lvremove /dev/vg/lv2
lvremove /dev/vg/lv3
lvremove /dev/mail/mail-lv
#移除vg
$ vgremove vg
$ vgremove mail
#移除pv
$ pvremove /dev/sdb1
$ pvremove /dev/sdb2
$ pvremove /dev/sdc
$ pvremove /dev/sdd
$ pvs
12)擴展
SSM工具:檢查關於可用硬碟和LVM捲的信息。顯示關於現有磁碟存儲設備、存儲池、LVM捲和存儲快照的信息。
1、SSM的安裝
$ yum -y install system-storage-manager
2、SSM工具常用命令
1)列出設備信息
$ ssm list dev
2)列出存儲池信息
$ ssm list pool
3)列出捲信息
$ ssm list vol
4)SSM創建LVM
ssm create -s [lv大小] -n [lv名稱] --fstype [lv文件系統類型] -p [捲組名] [設備] [掛載點]
自動把設備變成pv,創建pv、lv,格式化文件系統,掛載目錄自動創建,自動掛載
$ ssm create -s 1G -n mail-lv --fstype xfs -p mail /dev/sd[c-d] /opt/mail-lv