1. 程式人生 > >CentOS 6.3下配置LVM(邏輯卷管理)(6.9測試也可用)

CentOS 6.3下配置LVM(邏輯卷管理)(6.9測試也可用)

一、簡介

LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁碟分割槽進行管理的一種機制,LVM是建立在硬碟和分割槽之上的一個邏輯層,來提高磁碟分割槽管理的靈活性。

LVM的工作原理其實很簡單,它就是通過將底層的物理硬碟抽象的封裝起來,然後以邏輯卷的方式呈現給上層應用。在傳統的磁碟管理機制中,我們的上層應用是直接訪問檔案系統,從而對底層的物理硬碟進行讀取,而在LVM中,其通過對底層的硬碟進行封裝,當我們對底層的物理硬碟進行操作時,其不再是針對於分割槽進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁碟管理操作。比如說我增加一個物理硬碟,這個時候上層的服務是感覺不到的,因為呈現給上層服務的是以邏輯卷的方式。

LVM最大的特點就是可以對磁碟進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的資料。如果我們新增加了硬碟,其也不會改變現有上層的邏輯卷。作為一個動態磁碟管理機制,邏輯卷技術大大提高了磁碟管理的靈活性。

基本的邏輯卷管理概念:

PV(Physical Volume)- 物理卷 
物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬碟上的分割槽,也可以是整個物理硬碟,也可以是raid裝置

VG(Volumne Group)- 卷組 
卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態新增物理捲到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。

LV(Logical Volume)- 邏輯卷 
邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴充套件和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。

關係圖如下:

63

PE(Physical Extent)- 物理塊

LVM 預設使用4MB的PE區塊,而LVM的LV最多僅能含有65534個PE (lvm1 的格式),因此預設的LVM的LV最大容量為4M*65534/(1024M/G)=256G。PE是整個LVM 最小的儲存區塊,也就是說,其實我們的資料都是由寫入PE 來處理的。簡單的說,這個PE 就有點像檔案系統裡面的block 大小。所以調整PE 會影響到LVM 的最大容量!不過,在 CentOS 6.x 以後,由於直接使用 lvm2 的各項格式功能,因此這個限制已經不存在了。

pe_vg

二、系統環境

實驗環境:Oracle VM VirtualBox

系統平臺:CentOS release 6.3 (Final)

mdadm 版本:mdadm - v3.2.6 - 25th October 2012

LVM 版本:lvm2-2.02.100-8.el6.i686

裝置型別:分割槽、物理硬碟、raid 裝置

三、磁碟準備

在這篇文章中,我們將模擬raid5、分割槽、物理硬碟三種類型裝置建立VG,raid5 需要四塊硬碟,分割槽和物理硬碟各一塊硬碟,還有擴容時需要至少一塊硬碟,所以在虛擬機器裡新增八塊硬碟,每塊5GB.

1

四、安裝LVM管理工具

4.1 檢查系統中是否安裝了LVM管理工具

# rpm -qa|grep lvm

4.2 如果未安裝,則使用yum 方式安裝

# yum install lvm*

# rpm -qa|grep lvm

3

五、新建一個raid5 裝置

使用/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde 四塊物理硬碟做軟raid模擬。

# mdadm -C /dev/md5 -ayes -l5 -n3 -x1 /dev/sd[b,c,d,e]

2

寫入RAID配置檔案/etc/mdadm.conf 並做適當修改。

# echo DEVICE /dev/sd{b,c,d,e} >> /etc/mdadm.conf

# mdadm –Ds >> /etc/mdadm.conf

六、新建一個分割槽

使用/dev/sdf 模擬分割槽。

# fdisk /dev/sdf

# fdisk -l /dev/sdf

4

準備工作就緒,下面我們使用三種裝置/dev/md5、/dev/sdf1、/dev/sdg 來完成LVM實驗。

七、建立PV

# pvcreate /dev/md5 /dev/sdf1 /dev/sdg

5

檢視PV

# pvdisplay

6

還可以使用命令pvs 和pvscan 檢視簡略資訊。

# pvs

7

# pvscan

8

八、建立VG

# vgcreate vg0 /dev/md5 /dev/sdf1 /dev/sdg

9

說明:vg0 是建立的VG裝置的名稱,可以隨便取;後面接上述的三個裝置,也就是把三個裝置組合成一個vg0.

檢視VG

# vgdisplay

10

說明:

VG Name  VG的名稱

VG Size  VG的總大小

PE Size  PE的大小,預設為4MB

Total PE  PE的總數量,5114 x 4MB = 19.98GB

Free PE / Size  剩餘空間大小

同樣可以使用命令vgs 和vgscan 檢視。

# vgs

11

# vgscan

12

九、建立LV

# lvcreate -L 5G -n lv1 vg0

13

說明:

-L    指定建立的LV 的大小 
-l    指定建立的LV 的PE 數量 
-n    LV的名字 
上面命令的意思是:從vg0 中分出5G的空間給lv1 使用

檢視LV的資訊

# lvdisplay

14

說明:

LV Path  LV的路徑,全名

LV Name  LV的名字

VG Name  所屬的VG

LV Size  LV的大小

再來看VG 的資訊

# vgs

15

VFree 從19.98g 減少到了14.98g,另外的5g 被分配到了lv1.

十、格式化LV

# mkfs.ext4 /dev/vg0/lv1

16

十一、掛載使用

# mkdir /mnt/lv1

# mount /dev/vg0/lv1 /mnt/lv1/

# df –TH

17

將掛載資訊寫入/etc/fstab

18

十二、新增測試資料

下面我們將對LVM進行擴容和縮減操作,所以向/mnt/lv1 中寫入測試資料以驗證LVM 的磁碟動態管理。

# touch /mnt/lv1/test_lvm_dynamic.disk

# touch /mnt/lv1/test_lvm_dynamic.disk2

# touch /mnt/lv1/test_lvm_dynamic.disk3

# ll /mnt/lv1/

19

十三、LVM的擴容操作

LVM最大的好處就是可以對磁碟進行動態管理,而且不會丟失現有的資料。

假如有一天,lv1的使用量達到了80%,需要擴容,那我們該怎麼做呢?

因為vg0中還有很多剩餘空間,所以我們可以從vg0中再分配點空間給lv1。

13.1 LV的擴容

檢視vg0 的剩餘容量,還有14.98g 可用。

15

對lv1進行擴容。

# lvextend -L +1G /dev/vg0/lv1

20

說明:在lv1原有的基礎上增加了1G.

檢視現在vg0 的剩餘容量,減少了1G.

21

再檢視lv1的容量,從5G增加到了6G.

22

使用df –TH 命令檢視實際的磁碟容量。

23

發現實際容量並沒有變化,因為我們的系統還不認識剛剛新增進來的磁碟的檔案系統,所以還需要對檔案系統進行擴容。

# resize2fs /dev/vg0/lv1

# df –TH

24

現在的可用容量已經增加到了5.9G。

檢視測試資料

25

資料正常,對lv1的線上動態擴容完成。

還有一種情況,就是假如我們的vg0 空間不夠用了,怎麼辦?這時我們就需要對VG進行擴容。

13.2 VG的擴容

VG的擴容可以有兩種方法,第一種方法是通過增加PV來實現,操作如下:

A. 建立PV,使用/dev/sdh 來建立一個PV。

26

B. 擴容VG

現在的vg0 容量為19.98g.

27

# vgextend vg0 /dev/sdh

# vgs

28

現在vg0 的容量為24.97g, 增加了5GB,即一塊物理硬碟的容量,VG擴容成功。

第二種方法是通過擴充套件RAID裝置的容量來間接對VG進行擴容。這種方法在上一篇文章中有介紹,這裡不再贅述,需要注意的地方是,/dev/md5 的大小變化後,需要調整PV的大小,操作如下:

# pvresize /dev/md5

29

十四、LVM的縮減操作

縮減操作需要離線處理。

14.1 LV的縮減

A. umount 檔案系統

30

B. 縮減檔案系統

# resize2fs /dev/vg0/lv1 4G

31

提示需要先執行磁碟檢查。

C. 檢查磁碟

# e2fsck –f /dev/vg0/lv1

32

D. 再次執行縮減操作

33

縮減檔案系統成功,下面縮減LV的大小。

E. 縮減LV

# lvreduce /dev/vg0/lv1 –L 4G

34

說明:Step E 和Step D 縮減的大小必須保持一致,這裡的4G是縮減到的大小;如果使用的是"-4G",則表示容量減少多少的意思。

F. 掛載檢視

35

LV 縮減成功。

G. 檢視測試資料

36

資料正常。

14.2 VG的縮減

A. umount 檔案系統

37

B. 檢視當前的PV詳情

38

C. 將/dev/sdg 從vg0 中移除

# vgreduce vg0 /dev/sdg

39

D. 再次檢視PV情況

40

/dev/sdg 已經不屬於vg0了。

E. 檢視vg0 的情況

41

vg0 的大小減少了5GB.

VG 縮減成功。

十五、刪除LVM

如果要徹底的來移除LVM的話,需要把建立的步驟反過來操作。

15.1 umount 檔案系統

37

15.2 移除LV

# lvremove /dev/vg0/lv1

45

15.3 移除VG

# vgremove vg0

46

15.4 移除PV

# pvremove /dev/md5 /dev/sdf1 /dev/sdg /dev/sdh

62

LVM 移除成功。

十六、LVM 快照(snapshot)

快照就是將當時的系統資訊記錄下來,就好像照相一樣,未來若有任何資料變動了,則原始資料會被移動到快照區,沒有被改動的區域則由快照區與檔案系統共享

snapshot

LVM 系統快照區域的備份示意圖(虛線為檔案系統,長虛線為快照區)

左圖為最初建立系統快照區的狀況,LVM 會預留一個區域 (左圖的左側三個PE 區塊) 作為資料存放處。此時快照區內並沒有任何資料,而快照區與系統區共享所有的PE 資料, 因此你會看到快照區的內容與檔案系統是一模一樣的。等到系統運作一陣子後,假設A 區域的資料被更動了 (上面右圖所示),則更動前系統會將該區域的資料移動到快照區,所以在右圖的快照區被佔用了一塊PE 成為A,而其他B 到I 的區塊則還是與檔案系統共享!

快照區與被快照的LV 必須要在同一個VG 裡。

16.1 建立LV

# lvcreate -L 100M -n lv1 vg0

# mkfs.ext4 /dev/vg0/lv1

# mount /dev/vg0/lv1 /mnt/lv1/

16.2 寫入測試資料

# touch /mnt/lv1/test_lvm_snapshot_1

# touch /mnt/lv1/test_lvm_snapshot_2

# cp -a /etc/ /mnt/lv1/

# cp -a /boot/ /mnt/lv1/

51

16.3 建立快照

# lvcreate -L 80M -s -n lv1snap /dev/vg0/lv1

說明:為/dev/vg0/lv1 建立一個大小為80M,名稱為lv1snap 的快照。

# lvdisplay

53

/dev/vg0/lv1snap 的LV Size 為100MB,使用量為0.01%.

16.4 將剛才建立的快照掛載檢視

55

/mnt/lv1 和/mnt/snapshot 是一模一樣的。

16.5 進行檔案的修改操作

56

16.6 再次檢視

57

snapshot 的使用量為10.36%,原始資料有改動。

16.7 對snapshot 裡的資料進行打包備份,準備還原

58

16.8 解除安裝並移除snapshot

59

16.9 解除安裝並格式化/mnt/lv1,清空資料

60

16.10 恢復資料

61

可以看到,原始資料已經成功恢復。

LVM 快照實驗成功。

注意:對lv1的修改量不能超過快照的大小,由於原始資料會被搬移到快照區,如果你的快照區不夠大,若原始資料被更動的實際資料量比快照區大,那麼快照區當然容納不了,這時候快照功能會失效喔!

################################