前言
通常情況下,在操作系統上新建了一個分區並在此分區創建文件系統後,該文件系統的大小就固定了。假如要增加此文件系統的大小,我們不得不添加一塊硬盤並重新分區,創建文件系統,然後把原文件系統的數據完整複製過來。如果第二次分區時分配的空間太大,用不完又浪費該怎麼辦呢?重複此前的流程又將花費大量的時間,有沒有更便捷的辦法呢?下面介紹的邏輯卷管理器就是解決這個問題的。
一、簡介
LVM(Logical Volume Manager),譯爲邏輯卷管理器。所謂卷(Volume),意味着可伸縮,我們可以彈性調整文件系統的容量大小,並且不會損壞數據。LVM是對磁盤管理的一種機制,是建立在硬盤和分區之上、文件系統之下的一個邏輯層;LVM的工作原理其實很簡單,它就是通過將底層的物理硬盤抽象的封裝起來將一個或多個底層塊設備組成一個邏輯的工具。
1、Physical Volume(PV),物理卷:創建分區時,標記分區類型爲8e後,就可以將該分區做成物理卷供LVM使用了。可以用任意塊設備做成物理卷,單個分區、整塊硬盤、RAID設備都可以。
2、Volume Group(VG),卷組:顧名思義,就是將一個或多個PV組合爲一個卷組,以PE爲存儲單位。一個VG至少包含一個PV,VG可以創建多個。
3、Physical Extent(PE),物理區域:PE是整個LVM中可分配的最小存儲單元,大小在創建卷組時指定且確定後不能更改;同一卷組的PE大小需一致。新的PV加入卷組後,PE的大小會自動更改爲原卷組PE的大小。
4、Logical Volume(LV),邏輯卷:建立在卷組的基礎上,卷組中空閒的PE可分配給LV使用,創建LV後可通過增加或減少PE來動態擴展和縮小空間大小。LV可以直接創建文件系統並掛載使用。兩種寫入模式:線性模式(linear)、交錯模式(triped)。
二、物理卷(PV)的常用管理命令
pvcreate #創建一個物理卷 pvchange #修改物理卷的屬性 pvresize #調整一個PV的大小 pvremove #刪除一個PV pvdisplay #顯示PV的屬性信息 pvmove #移動PE到指定物理卷 pvscan #搜索所有磁盤上的物理卷 pvs #顯示PV的簡要信息
示例1:創建3個PV
[root@qin ~]# parted /dev/sdb mklabel msdos [root@qin ~]# parted /dev/sdb mkpart primary ext2 0G 10G [root@qin ~]# parted /dev/sdb mkpart primary ext2 10G 20G [root@qin ~]# parted /dev/sdb mkpart primary ext2 20G 30G [root@qin ~]# pvcreate /dev/sdb{1..3}
示例2:將PV1上的數據遷移到PV2,然後刪除該PV。
[root@qin ~]# pvmove /dev/sdb1 /dev/sdb2 #注意:兩個PV必須在同一卷組內 [root@qin ~]# pvremove /dev/sdb1 #刪除PV前要確保該PV沒有在任何卷組中
三、卷組(VG)的常用管理命令。
vgcreate #創建卷組 -l:設置可容納的LV最大數,默認爲255 -p:設置包含PV的最大數,默認爲255 -s:設置PE大小,默認爲4M vgextend #擴展VG大小 vgdisplay #顯示VG屬性信息 vgchange #修改VG屬性信息 vgreduce #縮減VG大小 vgremove #刪除VG vgscan #搜索所有磁盤上的卷組 vgs #顯示VG簡要信息 vgck #檢查VG元數據
示例1:創建一個卷組,要求PE大小爲8M,名稱爲Myvg,最大支持LV不能超過10個,包含的PV不能超過2個
[root@qin ~]# vgcreate -s 8M -l 10 -p 2 Myvg /dev/sdb{1,2} [root@qin ~]# vgdisplay Myvg #查看VG屬性信息驗證結果 --- Volume group --- VG Name Myvg #VG名稱 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 10 #可以看到,支持最大LV數爲10個 Cur LV 0 Open LV 0 Max PV 2 #支持最大PV數爲2個 Cur PV 2 Act PV 2 VG Size 18.61 GiB PE Size 8.00 MiB #PE大小 Total PE 2382 Alloc PE / Size 0 / 0 Free PE / Size 2382 / 18.61 GiB VG UUID LdOZtc-4ccd-5ryh-Ux7V-O29f-CEhc-VVuuSF
示例2:擴展Myvg大小
[root@qin ~]# vgextend Myvg /dev/sdb3 #由於此前定義了VG的最大PV數,無法擴展 No space for '/dev/sdb3' - volume group 'Myvg' holds max 2 physical volume(s). Unable to add physical volume '/dev/sdb3' to volume group 'Myvg'. [root@qin ~]# vgchange -p 3 Myvg #修改VG屬性 [root@qin ~]# vgextend Myvg /dev/sdb3 #擴展VG成功
示例3:縮減Myvg大小;然後刪除Myvg
[root@qin ~]# vgreduce Myvg /dev/sdb2 #注意:把PV移出卷組時要保證該PV數據已遷移或未使用 [root@qin ~]# vgchange -an Myvg #標記Myvg爲不可用狀態 [root@qin ~]# vgremove Myvg #不論VG包含多少PV都可刪除,前提是該VG上沒有任何LV,如果有就需要先刪除LV
四、邏輯卷(LV)的常用管理命令
lvcreate #創建LV -l:設置LV大小,以PE爲單位 -L:設置LV大小,以字節爲單位 -n:設置LV名稱 -p:設置LV權限讀寫權限,默認爲可讀可寫 -s:設置一個快照卷,對一個已存在的LV做快照 lvextend #擴展LV大小 lvreduce #縮減LV大小 lvchange #修改LV屬性信息 -ay:標記LV爲可用狀態 -an:標記LV爲不可用狀態 lvremove #刪除LV lvdisplay #顯示LV屬性信息 lvscan #搜索所有磁盤上的邏輯卷 lvs #顯示LV簡要信息
示例1:創建一個LV,要求大小爲10G,名稱爲lv001,指定卷組爲Myvg。
[root@qin ~]# lvcreate -L 10G -n lv001 Myvg
示例2:擴展lv001的大小,要求增加5G空間大小
#方法一: [root@qin ~]# lvextend -L +5G /dev/Myvg/lv001 #方法二: [root@qin ~]# lvextend -L 15G /dev/Myvg/lv001
示例3:縮減lv001的大小,要求減少8G空間大小
[root@qin ~]# lvreduce -L -8G /dev/Myvg/lv001 #注意,縮減前需確保LV爲卸載狀態
示例4:刪除lv001
[root@qin ~]# lvchange -an /dev/Myvg/lv001 #標記lv001爲不可用狀態 [root@qin ~]# lvremove /dev/Myvg/lv001
示例5:對lv001創建一個快照卷
[root@qin ~]# lvcreate -L 10G -n lv001_snap -p r -s /dev/Myvg/lv001 #必須跟目標邏輯卷在同一卷組中
五、實驗:在線擴容和離線縮減邏輯卷的大小。
1、查看當前系統掛載及邏輯卷的相關信息。
2、縮減/data的空間大小,並驗證查看。
注意:縮減邏輯卷大小前必須先縮減文件系統的大小,而且要強制檢查文件系統
縮減不能少於已經存儲的所有數據空間的大小
3、擴展邏輯卷大小
先查看當前LV大小,卷組可用空間,文件系統大小
然後擴展邏輯卷大小
最後擴展文件系統大小
總結:
LVM的添加順序:PV-->VG-->LV
LVM的刪除順序:LV-->VG-->PV
邏輯卷可在線擴展,但必須離線縮減
縮減很危險,不到萬不得已不要執行縮減操作!!!
擴展邏輯卷後文件系統也要擴容
縮減邏輯卷前要先縮減文件系統