一、簡介
LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環(huán)境下對磁盤分區(qū)進(jìn)行管理的一種機(jī)制,LVM是建立在硬盤和分區(qū)之上的一個邏輯層,來提高磁盤分區(qū)管理的靈活性。
LVM的工作原理其實很簡單,它就是通過將底層的物理硬盤抽象的封裝起來,然后以邏輯卷的方式呈現(xiàn)給上層應(yīng)用。在傳統(tǒng)的磁盤管理機(jī)制中,我們的上層應(yīng)用是直接訪問文件系統(tǒng),從而對底層的物理硬盤進(jìn)行讀取,而在LVM中,其通過對底層的硬盤進(jìn)行封裝,當(dāng)我們對底層的物理硬盤進(jìn)行操作時,其不再是針對于分區(qū)進(jìn)行操作,而是通過一個叫做邏輯卷的東西來對其進(jìn)行底層的磁盤管理操作。比如說我增加一個物理硬盤,這個時候上層的服務(wù)是感覺不到的,因為呈現(xiàn)給上層服務(wù)的是以邏輯卷的方式。
LVM最大的特點就是可以對磁盤進(jìn)行動態(tài)管理。因為邏輯卷的大小是可以動態(tài)調(diào)整的,而且不會丟失現(xiàn)有的數(shù)據(jù)。如果我們新增加了硬盤,其也不會改變現(xiàn)有上層的邏輯卷。作為一個動態(tài)磁盤管理機(jī)制,邏輯卷技術(shù)大大提高了磁盤管理的靈活性。
基本的邏輯卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在邏輯卷管理中處于最底層,它可以是實際物理硬盤上的分區(qū),也可以是整個物理硬盤,也可以是raid設(shè)備。
VG(Volumne Group)- 卷組
卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之后可動態(tài)添加物理卷到卷組中。一個邏輯卷管理系統(tǒng)工程中可以只有一個卷組,也可以擁有多個卷組。
LV(Logical Volume)- 邏輯卷
邏輯卷建立在卷組之上,卷組中的未分配空間可以用于建立新的邏輯卷,邏輯卷建立后可以動態(tài)地擴(kuò)展和縮小空間。系統(tǒng)中的多個邏輯卷可以屬于同一個卷組,也可以屬于不同的多個卷組。
關(guān)系圖如下:
PE(Physical Extent)- 物理塊
LVM 默認(rèn)使用4MB的PE區(qū)塊,而LVM的LV最多僅能含有65534個PE (lvm1 的格式),因此默認(rèn)的LVM的LV最大容量為4M*65534/(1024M/G)=256G。PE是整個LVM 最小的儲存區(qū)塊,也就是說,其實我們的資料都是由寫入PE 來處理的。簡單的說,這個PE 就有點像文件系統(tǒng)里面的block 大小。所以調(diào)整PE 會影響到LVM 的最大容量!不過,在 CentOS 6.x 以后,由于直接使用 lvm2 的各項格式功能,因此這個限制已經(jīng)不存在了。
二、系統(tǒng)環(huán)境
實驗環(huán)境:Oracle VM VirtualBox
系統(tǒng)平臺:CentOS release 6.3 (Final)
mdadm 版本:mdadm - v3.2.6 - 25th October 2012
LVM 版本:lvm2-2.02.100-8.el6.i686
設(shè)備類型:分區(qū)、物理硬盤、raid 設(shè)備
三、磁盤準(zhǔn)備
在這篇文章中,我們將模擬raid5、分區(qū)、物理硬盤三種類型設(shè)備創(chuàng)建VG,raid5 需要四塊硬盤,分區(qū)和物理硬盤各一塊硬盤,還有擴(kuò)容時需要至少一塊硬盤,所以在虛擬機(jī)里添加八塊硬盤,每塊5GB.
四、安裝LVM管理工具
4.1 檢查系統(tǒng)中是否安裝了LVM管理工具
# rpm -qa|grep lvm
4.2 如果未安裝,則使用yum 方式安裝
# yum install lvm*
# rpm -qa|grep lvm
五、新建一個raid5 設(shè)備
使用/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde 四塊物理硬盤做軟raid模擬。
# mdadm -C /dev/md5 -ayes -l5 -n3 -x1 /dev/sd[b,c,d,e]
寫入RAID配置文件/etc/mdadm.conf 并做適當(dāng)修改。
# echo DEVICE /dev/sd{b,c,d,e} >> /etc/mdadm.conf
# mdadm –Ds >> /etc/mdadm.conf
詳細(xì)請參考上篇文章:http://www.cnblogs.com/mchina/p/linux-centos-disk-array-software_raid.html
六、新建一個分區(qū)
使用/dev/sdf 模擬分區(qū)。
# fdisk /dev/sdf
# fdisk -l /dev/sdf
準(zhǔn)備工作就緒,下面我們使用三種設(shè)備/dev/md5、/dev/sdf1、/dev/sdg 來完成LVM實驗。
七、創(chuàng)建PV
# pvcreate /dev/md5 /dev/sdf1 /dev/sdg
查看PV
# pvdisplay
還可以使用命令pvs 和pvscan 查看簡略信息。
# pvs
# pvscan
八、創(chuàng)建VG
# vgcreate vg0 /dev/md5 /dev/sdf1 /dev/sdg
說明:vg0 是創(chuàng)建的VG設(shè)備的名稱,可以隨便取;后面接上述的三個設(shè)備,也就是把三個設(shè)備組合成一個vg0.
查看VG
# vgdisplay
說明:
VG Name VG的名稱
VG Size VG的總大小
PE Size PE的大小,默認(rèn)為4MB
Total PE PE的總數(shù)量,5114 x 4MB = 19.98GB
Free PE / Size 剩余空間大小
同樣可以使用命令vgs 和vgscan 查看。
# vgs
# vgscan
九、創(chuàng)建LV
# lvcreate -L 5G -n lv1 vg0
說明:
-L 指定創(chuàng)建的LV 的大小
-l 指定創(chuàng)建的LV 的PE 數(shù)量
-n LV的名字
上面命令的意思是:從vg0 中分出5G的空間給lv1 使用
查看LV的信息
# lvdisplay
說明:
LV Path LV的路徑,全名
LV Name LV的名字
VG Name 所屬的VG
LV Size LV的大小
再來看VG 的信息
# vgs
VFree 從19.98g 減少到了14.98g,另外的5g 被分配到了lv1.
十、格式化LV
# mkfs.ext4 /dev/vg0/lv1
十一、掛載使用
# mkdir /mnt/lv1
# mount /dev/vg0/lv1 /mnt/lv1/
# df –TH
將掛載信息寫入/etc/fstab
十二、添加測試數(shù)據(jù)
下面我們將對LVM進(jìn)行擴(kuò)容和縮減操作,所以向/mnt/lv1 中寫入測試數(shù)據(jù)以驗證LVM 的磁盤動態(tài)管理。
# touch /mnt/lv1/test_lvm_dynamic.disk
# touch /mnt/lv1/test_lvm_dynamic.disk2
# touch /mnt/lv1/test_lvm_dynamic.disk3
# ll /mnt/lv1/
十三、LVM的擴(kuò)容操作
LVM最大的好處就是可以對磁盤進(jìn)行動態(tài)管理,而且不會丟失現(xiàn)有的數(shù)據(jù)。
假如有一天,lv1的使用量達(dá)到了80%,需要擴(kuò)容,那我們該怎么做呢?
因為vg0中還有很多剩余空間,所以我們可以從vg0中再分配點空間給lv1。
13.1 LV的擴(kuò)容
查看vg0 的剩余容量,還有14.98g 可用。
對lv1進(jìn)行擴(kuò)容。
# lvextend -L +1G /dev/vg0/lv1
說明:在lv1原有的基礎(chǔ)上增加了1G.
查看現(xiàn)在vg0 的剩余容量,減少了1G.
再查看lv1的容量,從5G增加到了6G.
使用df –TH 命令查看實際的磁盤容量。
發(fā)現(xiàn)實際容量并沒有變化,因為我們的系統(tǒng)還不認(rèn)識剛剛添加進(jìn)來的磁盤的文件系統(tǒng),所以還需要對文件系統(tǒng)進(jìn)行擴(kuò)容。
# resize2fs /dev/vg0/lv1
# df –TH
現(xiàn)在的可用容量已經(jīng)增加到了5.9G。
查看測試數(shù)據(jù)
數(shù)據(jù)正常,對lv1的在線動態(tài)擴(kuò)容完成。
還有一種情況,就是假如我們的vg0 空間不夠用了,怎么辦?這時我們就需要對VG進(jìn)行擴(kuò)容。
13.2 VG的擴(kuò)容
VG的擴(kuò)容可以有兩種方法,第一種方法是通過增加PV來實現(xiàn),操作如下:
A. 創(chuàng)建PV,使用/dev/sdh 來創(chuàng)建一個PV。
B. 擴(kuò)容VG
現(xiàn)在的vg0 容量為19.98g.
# vgextend vg0 /dev/sdh
# vgs
現(xiàn)在vg0 的容量為24.97g, 增加了5GB,即一塊物理硬盤的容量,VG擴(kuò)容成功。
第二種方法是通過擴(kuò)展RAID設(shè)備的容量來間接對VG進(jìn)行擴(kuò)容。這種方法在上一篇文章中有介紹,這里不再贅述,需要注意的地方是,/dev/md5 的大小變化后,需要調(diào)整PV的大小,操作如下:
# pvresize /dev/md5
十四、LVM的縮減操作
縮減操作需要離線處理。
14.1 LV的縮減
A. umount 文件系統(tǒng)
B. 縮減文件系統(tǒng)
# resize2fs /dev/vg0/lv1 4G
提示需要先運行磁盤檢查。
C. 檢查磁盤
# e2fsck –f /dev/vg0/lv1
D. 再次執(zhí)行縮減操作
縮減文件系統(tǒng)成功,下面縮減LV的大小。
E. 縮減LV
# lvreduce /dev/vg0/lv1 –L 4G
說明:Step E 和Step D 縮減的大小必須保持一致,這里的4G是縮減到的大??;如果使用的是"-4G",則表示容量減少多少的意思。
F. 掛載查看
LV 縮減成功。
G. 查看測試數(shù)據(jù)
數(shù)據(jù)正常。
14.2 VG的縮減
A. umount 文件系統(tǒng)
B. 查看當(dāng)前的PV詳情
C. 將/dev/sdg 從vg0 中移除
# vgreduce vg0 /dev/sdg
D. 再次查看PV情況
/dev/sdg 已經(jīng)不屬于vg0了。
E. 查看vg0 的情況
vg0 的大小減少了5GB.
VG 縮減成功。
十五、刪除LVM
如果要徹底的來移除LVM的話,需要把創(chuàng)建的步驟反過來操作。
15.1 umount 文件系統(tǒng)
15.2 移除LV
# lvremove /dev/vg0/lv1
15.3 移除VG
# vgremove vg0
15.4 移除PV
# pvremove /dev/md5 /dev/sdf1 /dev/sdg /dev/sdh
LVM 移除成功。
十六、LVM 快照(snapshot)
快照就是將當(dāng)時的系統(tǒng)信息記錄下來,就好像照相一樣,未來若有任何資料變動了,則原始資料會被移動到快照區(qū),沒有被改動的區(qū)域則由快照區(qū)與檔案系統(tǒng)共享。
LVM 系統(tǒng)快照區(qū)域的備份示意圖(虛線為檔案系統(tǒng),長虛線為快照區(qū))
左圖為最初建立系統(tǒng)快照區(qū)的狀況,LVM 會預(yù)留一個區(qū)域 (左圖的左側(cè)三個PE 區(qū)塊) 作為數(shù)據(jù)存放處。此時快照區(qū)內(nèi)并沒有任何數(shù)據(jù),而快照區(qū)與系統(tǒng)區(qū)共享所有的PE 數(shù)據(jù), 因此你會看到快照區(qū)的內(nèi)容與文件系統(tǒng)是一模一樣的。等到系統(tǒng)運作一陣子后,假設(shè)A 區(qū)域的數(shù)據(jù)被更動了 (上面右圖所示),則更動前系統(tǒng)會將該區(qū)域的數(shù)據(jù)移動到快照區(qū),所以在右圖的快照區(qū)被占用了一塊PE 成為A,而其他B 到I 的區(qū)塊則還是與文件系統(tǒng)共享!
快照區(qū)與被快照的LV 必須要在同一個VG 里。
16.1 建立LV
# lvcreate -L 100M -n lv1 vg0
# mkfs.ext4 /dev/vg0/lv1
# mount /dev/vg0/lv1 /mnt/lv1/
16.2 寫入測試數(shù)據(jù)
# touch /mnt/lv1/test_lvm_snapshot_1
# touch /mnt/lv1/test_lvm_snapshot_2
# cp -a /etc/ /mnt/lv1/
# cp -a /boot/ /mnt/lv1/
16.3 創(chuàng)建快照
# lvcreate -L 80M -s -n lv1snap /dev/vg0/lv1
說明:為/dev/vg0/lv1 創(chuàng)建一個大小為80M,名稱為lv1snap 的快照。
# lvdisplay
/dev/vg0/lv1snap 的LV Size 為100MB,使用量為0.01%.
16.4 將剛才創(chuàng)建的快照掛載查看
/mnt/lv1 和/mnt/snapshot 是一模一樣的。
16.5 進(jìn)行檔案的修改操作
16.6 再次查看
snapshot 的使用量為10.36%,原始資料有改動。
16.7 對snapshot 里的資料進(jìn)行打包備份,準(zhǔn)備還原
16.8 卸載并移除snapshot
16.9 卸載并格式化/mnt/lv1,清空數(shù)據(jù)
16.10 恢復(fù)數(shù)據(jù)
可以看到,原始數(shù)據(jù)已經(jīng)成功恢復(fù)。
LVM 快照實驗成功。
注意:對lv1的修改量不能超過快照的大小,由于原始數(shù)據(jù)會被搬移到快照區(qū),如果你的快照區(qū)不夠大,若原始資料被更動的實際數(shù)據(jù)量比快照區(qū)大,那么快照區(qū)當(dāng)然容納不了,這時候快照功能會失效喔!
參考資料
CentOS 6.3下配置軟RAID(Software RAID)
http://www.cnblogs.com/mchina/p/linux-centos-disk-array-software_raid.html
聯(lián)系客服