Linux LVM邏輯卷

pursuer.chen發表於2016-01-08

概述  

      LVM的產生是因為傳統的分割槽一旦分割槽好後就無法線上擴充空間,也存在一些工具能實現線上擴充空間但是還是會面臨資料損壞的風險;傳統的分割槽當分割槽空間不足時,一般的解決辦法是再建立一個更大的分割槽將原分割槽解除安裝然後將資料拷貝到新分割槽,但是在企業的生產系統往往不允許停機或者允許停機的時間很短,LVM就能很好的解決線上擴充空間的問題,而且不會對資料造成影響,LVM還能通過快照在備份的過程中保證日誌檔案和表空間檔案在同一時間點的一致性;本篇文章不會對概念知識做太詳細的介紹,主要講述LVM的擴容、收縮、移除的方法。

 

原理  

PE(Physical Extend):卷的最小單位,預設4M大小,就像我們的資料是以頁的形式儲存一樣,卷就是以PE的形式儲存。

PV(Physical Volume):物理卷,如果要使用邏輯卷,首先第一步操作就是將磁碟格式化成PV,從上圖可以看出PV是保護PE的,PV內PE的數量取決於這塊磁碟的容量/4M.

VG(Volume Group):卷組,VG就是將很多PE組合在一起生成一個卷組,當然這裡的PE是可以跨磁碟的,如果當前伺服器磁碟空間不足就可以增加一個新磁碟對當前系統不會產生任何影響。

LV(Logical Volume):邏輯卷,邏輯卷最終是給使用者使用的,前面幾個都是為建立邏輯卷做的準備,建立邏輯卷的大小隻要不超過VG剩餘空間就可以。

步驟:

1.PV:格式化磁碟

2.VG:建立卷組

3.LV:建立邏輯卷

4.mkfs:格式化邏輯卷

5.mount:掛載邏輯卷

建立LV  

1.PV(格式化磁碟):pvcreate命令      

 第一步就是對磁碟格式化,不要對現有已分割槽的磁碟做這個操作。

 先檢視當前系統磁碟資訊,我電腦通過虛擬機器剛新增了兩塊塊20G的磁碟,分別是sdb、sdc,使用fdisk -l檢視

fdisk -l

格式化/dev/sdb

pvcreate /dev/sdb /dev/sdc

使用pvdisplay或者pvs檢視pv資訊

從上圖可以的資訊可以得知PV的大小和剩餘空間資訊。

2.VG(建立卷組):vgcreate命令

vgcreate vggroup /dev/sdb /dev/sdc

vggroup是卷組名稱

使用vgdisplay和vgs檢視vg資訊

 

通過vgdisplay可以檢視vg的大小和PE的大小,從上圖可以看到單個PE的預設大小是4M,當前VG總共有10238個PE,當前vg總共使用了兩個pv。

3.LV(建立邏輯卷):lvcreate -n 邏輯卷名稱 -L 邏輯卷大小 卷組名

記住建立邏輯卷大小不能超過卷組的剩餘空間大小,我這裡建立30G大小的邏輯卷。

lvcreate -n lv -L 30G vggroup

使用lvdisplay和lvs檢視lv的資訊

 

lvdisplay可以獲取到的lv資訊包括,lv的名稱和路徑、lv對應的vg組的名稱、lv的大小、當前lv包含的PE數量。

lv的檔案路徑儲存在vg下面。

4.mkfs(格式化lv)

mkfs.ext4 /dev/vggroup/lv

5.mount(掛載LV)

mount -t ext4 /dev/vggroup/lv /mnt

使用df -h檢視掛載資訊

 

注意:這裡的掛載只是臨時掛載,當伺服器重啟後掛載會沒有,需要永久掛載需要修改配置檔案,方法參考:http://www.cnblogs.com/chenmh/p/5097530.html

擴充邏輯卷(LV)  

 在對LV(邏輯卷)進行容量擴充之前先檢視VG(卷組)中剩餘空間有多少,擴充的大小不能超過VG剩餘的空間大小

vgdisplay

當前VG剩餘空間9.99G

1.lvextend(擴充邏輯卷)

為了演示線上擴充對檔案不造成影響,我先在/mnt目錄下建立了一個text測試檔案,內容為“1”

lvextend -L +9.99G /dev/vggroup/lv

這裡將VG所有的剩餘空間全部劃分給LV

vg的剩餘空間變成了0

LV的大小變成了39.99G

2.resize2fs:更新檔案系統 

resize2fs  /dev/vggroup/lv

檢視/mnt目錄下的text檔案是否受影響

 檔案沒有受影響。

擴充卷組(VG)  

 當前我係統VG已經沒有剩餘空間了,如果這個時候系統空間不夠了,這個時候就要增加一塊磁碟來增加VG的大小,在虛擬機器我增加一個10G的新磁碟sdd

1.格式化新磁碟(pvcreate)

pvcreate /dev/sdd

2.將格式化的PV新增到VG中去(vgextend)

vgextend vggroup /dev/sdd

3.檢視當前vg的大小(vgdisplay)

 

當前VG的大小變成了50G,剩餘空間也變成10G,當前VG的PV數變成了3

收縮邏輯卷(LG)  

 注意:對邏輯捲進行收縮操作之前必須先解除安裝邏輯卷,再縮小檔案系統,最後才是縮小邏輯卷,而且收縮的大小也不能超過剩餘空間大小。

1.解除安裝邏輯卷(unmount)

umount /mnt

2.收縮檔案系統

這步一定要操作,而且是在收縮LV之前操作

先檢查檔案系統(e2fsck)

e2fsck -f /dev/vggroup/lv

縮小檔案系統(resize2fs)

將檔案系統縮小到30G,剛才如果細心注意會發現,使用lvdisplay檢視檔案系統是39.9G,而通過df -h檢視是40G,這裡以df -h的大小為準,因為下一步收縮LV的時候是通過減操作,所以要資料一致性下一步就是-10G

--將檔案系統縮小為30G
resize2fs /dev/vggroup/lv 30G

3.縮小LV(lvreduce)

lvreduce -L -10G /dev/vggroup/lv

注意:這三步操作順序不能弄亂。

接下來再掛載lV卷看看空間是否修改

mount /dev/vggroup/lv /mnt/

可以看到重新掛載後text檔案還是存在,lv的大小也變成了30G

 

雖然可以使用收縮LV但是還是不建議這樣做,特別是企業的系統,因為收縮後的結果會存在很多的未知可能。

收縮卷組(VG)  

 收縮卷組只能對那些未使用pv進行操作,如果你的當前PV已經已經在邏輯卷中被使用,那麼該PV是不能去除的,比如剛才新增加的sdd磁碟未被使用就可以將其從VG中去除。

通過PVS檢視那些PV已被使用

pvs

當前只有/dev/sdd未被使用

1.解除安裝邏輯卷

邏輯卷對應的是卷組而不是PV,雖然sdd在前面的操作並沒有被新增到LV當中,但是這裡還是需要先將LV解除安裝

umount /mnt

2.移除PV(vgreduce)

vgreduce vggroup /dev/sdd

3.刪除pv

pvremove /dev/sdd

可以看到/dev/sdd已經被移除

 

刪除lv、vg、pv  

1.同樣刪除前先解除安裝所有lv,在當前系統只有一個lv

umount /mnt

 

2.lvremove,vgreomve,pvremove

--刪除LV
lvremove /dev/vggroup/lv

--刪除VG
vgremove vggroup

--刪除PV
pvremove /dev/sdb /dev/sdc

這些刪除操作都確保未被使用,比如刪除LV在刪除前先將資料拷貝出去然後再刪除,刪除VG確保VG組中不存在LV,刪除PV剛才已經說過了,PV需要沒有被使用。

 

重設一個lV的大小

刪除LV

解除安裝LV
umount /home
刪除lv
lvremove /dev/vg_mingyu001/lv_home

 

建立LV

建立LV
lvcreate -n lv_home -L 100G vg_mingyu001 格式化lv mkfs.ext4 /dev/vg_mingyu001/lv_home 掛載lv mount -t ext4 /dev/vg_mingyu001/lv_home /home

檢視

檢視掛載
df -h

mount掛載相關內容參考: http://www.cnblogs.com/chenmh/p/5097530.html

分割槽相關內容參考:http://www.cnblogs.com/chenmh/p/5096592.html

修改邏輯卷名

 1.檢視邏輯卷名

lvscan
[root@monitor ~]# lvscan
  ACTIVE            '/dev/vggroup/lv' [19.00 GiB] inherit

2.修改邏輯卷名

lvrename /dev/vggroup/lv /dev/vggroup/lv_data

將邏輯卷名“lv”改為“lv_data”

3.修改分割槽檔案

vim /etc/fstab

這裡同樣將lv改成lv_data

4.修改引導

vim /etc/grub.conf 

引導只針對boot分割槽,如果不是針對boot分割槽的邏輯捲進行改名那麼也就不修改修改引導的邏輯卷卷名了。

5.重啟 

reboot

 

 

 

20161410補充

總結

LVM帶來的好處不僅僅是線上擴容,在備份的過程中為了保證日誌檔案和表空間檔案一致性問題也用到了LVM,在工作當中可能會遇到這種情況,當前的邏輯空間全部分配到了一個不合理的掛載上了,現在需要將這個掛載的空間調小,這種情況下需要提前將這個掛載內的檔案拷貝到別的地方,然後解除安裝掛載刪除lv,再建立一個小的LV,將原先的檔案拷貝回來。對於特別重要的資料可以先用一個新盤掛載分配好邏輯LV將資料拷貝到新的LV上然後解除安裝舊的LV,將新的LV掛載到掛載到舊的LV的掛載點上確保新盤無誤後可以刪除舊的資料。

 

 

 不要吝嗇投上您神聖的一票!!!

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結,否則保留追究責任的權利。

《歡迎交流討論》

相關文章