Linux LVM 完整說明

LVM架構圖

PV(Physical Volume)實體卷冊
一般指實體硬碟disk partition

VG(Volume Group)卷策群組
由數個PV組成

LV(Logical Volume)
由VG中劃分出來,可格式化並掛載(實際存放資料)

PE(Physical Extents)實體單位
建立VG時決定大小,預設為4M



開始建立LVM

先用fdisk指令建立LVM的分割區,如下如所示

PV規畫
指令
pvcreate:將實體分割區建立成pv
pvscan:搜尋系統具有pv的磁碟
pvdisplay:顯示系統上的pv狀態
pvremove:移除分割區上的pv屬性

先查看目前系統是否有pv磁碟,指令pvscan

建立分割區sda5和sdb5為pv,指令pvcreate /dev/sda5 /dev/sdb5

再查看系統pv磁碟,出現剛剛所建立的sda5與sdb5

查看目前系統的pv狀態,指令pvdisplay

移除pv,指令pvremove /dev/sda5


VG規劃
指令
vgcreate:建立系統上的vg
vgscan:搜尋系統上是否有vg存在
vgdisplay:顯示系統上的vg狀態
vgextend:在vg內增加額外pv
vgreduce:在vg內移除pv
vgchange:設定vg是否啟動
vgremove:刪除vg

先建立系統的vg,指令:vgcreate -s 8m testvg /dev/sda5 /dev/sdb5

指令說明:-s後面指定pe的大小,若未指定大小預設為4MB,"testvg"是指vg的名稱可自行定義
sda5,sdb5為要加入vg的裝置
注意pe有最多數量限制,最高為65534個,如果預設pe大小為4MB,則最高上限為256GB

查看系統上vg,指令:vgscan

查看系統pv磁碟狀態

查看vg狀態,指令:vgdisplay

將pv加入vg,指令:vgextend testvg /dev/sdc1

查看vg狀態

注意:若重開機後發現vg沒啟動可用指令:vgchang -a y啟動

LV規劃
指令
lvcreate:建立lv
lvscan:查詢系統上的lv
lvdisplay:顯示系統上的lv狀態
lvextend:增加lv容量
lvreduce:減少lv容量
lvremove:刪除一個lv
lvresize:調整lv容量大小

建立lv,指令:lvcreate -L 5g -n testlv testvg

指令說明:
-L:後面接容量,單位M,G,T,最小單位為PE,所以容量不是PE的倍數時,系統會計算最相近的容量
-l:後面加上PE的個數,如PE容量為8MB則"-l 256"的容量為8MB*256=2048MB(2G)
-n:後面接lv的名稱,可自行定義
最後面須指定要從哪個vg建立lv

建立出來的lv儲存在/dev/testvg/testlv

查看目前系統lv狀態,指令:lvdisplay

格式化與掛載
將lv格式化成ext3格式,指令:mkfs -t ext3 /dev/testvg/testlv

建立目錄並掛載,指令:mkdir /mnt/testlvm && mount /dev/testvg/testlv /mnt/testlvm

查看磁碟容量,指令:df -h

增加LV容量
指令:lvresize -L +7g /dev/testvg/testlv

指令說明:
-L:後面接容量,單位M,G,T,最小單位為PE,所以容量不是PE的倍數時,系統會計算最相近的容量
-l:後面加上PE的個數,如PE容量為8MB則"-l 256"的容量為8MB*256=2048MB(2G)
最後面要指定lv的完整名稱路徑
注意-L後面要有"+"才是增加容量,如果沒有使用"+"則為修改lv容量

查看系統lv狀態

此時已掛載的lv使用df查看容量依然只顯示5G,使用resize2fs指令修改即可
指令:resize2fs /dev/testvg/testlv

指令說明:最後面要指定lv的完整名稱路徑

使用df -h指令查看磁碟容量


減少LV容量
注意變大是先lvextend(或lvresize)後再resize2fs,變小則先resize2fs在lvreduce
容量變小必須在卸載情況下再能處理

先卸載lv掛載磁區,指令:umount /mnt/testlvm

執行磁碟掃描,指令:e2fsck -f /dev/testvg/testlv

使用resize2fs指令將磁碟容量減少:指令:resize2fs /dev/testvg/testlv 10000M

指令說明:最後面指令容量,原本12G減少成10G

重新掛載目錄後查看磁碟,容量已從原本12G變成10G

此時使用lvdisplay指令查看lv的容量依然在12G,使用lvreduce指令減少lv的容量
指令:lvreduce -L 10g /dev/testvg/testlv

指令說明:
-L:後面接容量,單位M,G,T,最小單位為PE,所以容量不是PE的倍數時,系統會計算最相近的容量
-l:後面加上PE的個數,如PE容量為8MB則"-l 256"的容量為8MB*256=2048MB(2G)
最後面要指定lv的完整名稱路徑

使用lvdisplay指令查看lv的容量已經變成10G

從VG中移除PV
從下圖中看到要移除vg中的sda5,可是系統有使用到sda5的pe,sdb5未使用到任何pe
必須先將sda5的pe移動到sdb5

使用pvmove指令,將sda5的pe移動到sdb5,指令:pvmove /dev/sda5 /dev/sdb5

從vg中移除pv,指令:vgreduce testvg /dev/sda5

指令說明:"testvg"為vg的名稱,最後面接裝置名稱

使用pvscan及vgdisplay查看狀態

最後移除sda5的pv,指令:pvremove /dev/sda5

建立快照
先用vgdisplay指令查看是否有足夠的pe和容量,因為快照占用vg的容量


使用lvcreate建立lvm的快照,指令:lvcreate -L 1g -s -n testsnap /dev/testvg/testlv

指令說明:
-L:後面接容量,單位M,G,T,最小單位為PE,所以容量不是PE的倍數時,系統會計算最相近的容量
-l:後面加上PE的個數,如PE容量為8MB則"-l 256"的容量為8MB*256=2048MB(2G)
-s:建立快照
-n:建立名稱,可自行定義
最後面要指定lv的完整名稱路徑
如果在建立快照時無法建立出現以下訊息

表示snapshot模組沒有載入所造成,執行指令:modprobe dm-snapshot即可

查看快照狀態,指令:lvdisplay

移除快照,指令:lvremove /dev/testvg/testsnap

LVM相關指令整理,圖片來源:鳥哥網站

系統重新安裝後要再加入原有LVM步驟如下
打 fdisk -l 與 pvscan 應該要可以看到 pv 項目存在
vgscan 應該可以 scan 出 voulme group,若沒看到先 vgchange -ay 跑看看 active vg 項目
如果狀態變成exported請先打vgimport -a
若 vgchange -ay 成功後所有 lv 應該都會出現,那就可以進行一般的存取

留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

PHP 與 JavaScript 之間傳值利用 json