1、簡介html
LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是創建在硬盤和分區之上的一個邏輯層,來提升磁盤分區管理的靈活性。linux
LVM的工做原理其實很簡單,它就是經過將底層的物理硬盤抽象的封裝起來,而後以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,咱們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其經過對底層的硬盤進行封裝,當咱們對底層的物理硬盤進行操做時,其再也不是針對於分區進行操做,而是經過一個叫作邏輯卷的東西來對其進行底層的磁盤管理操做。好比說我增長一個物理硬盤,這個時候上層的服務是感受不到的,由於呈現給上層服務的是以邏輯卷的方式。centos
LVM最大的特色就是能夠對磁盤進行動態管理。由於邏輯卷的大小是能夠動態調整的,並且不會丟失現有的數據。若是咱們新增長了硬盤,其也不會改變現有上層的邏輯卷。做爲一個動態磁盤管理機制,邏輯卷技術大大提升了磁盤管理的靈活性。工具
基本的邏輯卷管理概念:測試
PV(Physical Volume)- 物理卷
物理卷在邏輯卷管理中處於最底層,它能夠是實際物理硬盤上的分區,也能夠是整個物理硬盤,也能夠是raid設備。spa
VG(Volumne Group)- 卷組
卷組創建在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組創建以後可動態添加物理捲到卷組中。一個邏輯卷管理系統工程中能夠只有一個卷組,也能夠擁有多個卷組。.net
LV(Logical Volume)- 邏輯卷
邏輯卷創建在卷組之上,卷組中的未分配空間能夠用於創建新的邏輯卷,邏輯卷創建後能夠動態地擴展和縮小空間。系統中的多個邏輯卷能夠屬於同一個卷組,也能夠屬於不一樣的多個卷組。3d
關係圖以下:htm
PE(Physical Extent)- 物理塊 blog
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 的各項格式功能,所以這個限制已經不存在了。
2、系統環境
實驗環境: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 設備
3、磁盤準備
在這篇文章中,咱們將模擬raid五、分區、物理硬盤三種類型設備建立VG,raid5 須要四塊硬盤,分區和物理硬盤各一塊硬盤,還有擴容時須要至少一塊硬盤,因此在虛擬機裏添加八塊硬盤,每塊5GB.
4、安裝LVM管理工具
4.1 檢查系統中是否安裝了LVM管理工具
# rpm -qa|grep lvm
4.2 若是未安裝,則使用yum 方式安裝
# yum install lvm*
# rpm -qa|grep lvm
5、新建一個raid5 設備
使用/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 並作適當修改。
# echo DEVICE /dev/sd{b,c,d,e} >> /etc/mdadm.conf
# mdadm –Ds >> /etc/mdadm.conf
詳細請參考上篇文章:http://www.cnblogs.com/mchina/p/linux-centos-disk-array-software_raid.html
6、新建一個分區
使用/dev/sdf 模擬分區。
# fdisk /dev/sdf
# fdisk -l /dev/sdf
準備工做就緒,下面咱們使用三種設備/dev/md五、/dev/sdf一、/dev/sdg 來完成LVM實驗。
7、建立PV
# pvcreate /dev/md5 /dev/sdf1 /dev/sdg
查看PV
# pvdisplay
還可使用命令pvs 和pvscan 查看簡略信息。
# pvs
# pvscan
8、建立VG
# vgcreate vg0 /dev/md5 /dev/sdf1 /dev/sdg
說明:vg0 是建立的VG設備的名稱,能夠隨便取;後面接上述的三個設備,也就是把三個設備組合成一個vg0.
查看VG
# vgdisplay
說明:
VG Name VG的名稱
VG Size VG的總大小
PE Size PE的大小,默認爲4MB
Total PE PE的總數量,5114 x 4MB = 19.98GB
Free PE / Size 剩餘空間大小
一樣可使用命令vgs 和vgscan 查看。
# vgs
# vgscan
9、建立LV
# lvcreate -L 5G -n lv1 vg0
說明:
-L 指定建立的LV 的大小
-l 指定建立的LV 的PE 數量
-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.
10、格式化LV
# mkfs.ext4 /dev/vg0/lv1
11、掛載使用
# mkdir /mnt/lv1
# mount /dev/vg0/lv1 /mnt/lv1/
# df –TH
將掛載信息寫入/etc/fstab
12、添加測試數據
下面咱們將對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/
十3、LVM的擴容操做
LVM最大的好處就是能夠對磁盤進行動態管理,並且不會丟失現有的數據。
假若有一天,lv1的使用量達到了80%,須要擴容,那咱們該怎麼作呢?
由於vg0中還有不少剩餘空間,因此咱們能夠從vg0中再分配點空間給lv1。
13.1 LV的擴容
查看vg0 的剩餘容量,還有14.98g 可用。
對lv1進行擴容。
# lvextend -L +1G /dev/vg0/lv1
說明:在lv1原有的基礎上增長了1G.
查看如今vg0 的剩餘容量,減小了1G.
再查看lv1的容量,從5G增長到了6G.
使用df –TH 命令查看實際的磁盤容量。
發現實際容量並無變化,由於咱們的系統還不認識剛剛添加進來的磁盤的文件系統,因此還須要對文件系統進行擴容。
# resize2fs /dev/vg0/lv1
# df –TH
如今的可用容量已經增長到了5.9G。
查看測試數據
數據正常,對lv1的在線動態擴容完成。
還有一種狀況,就是假如咱們的vg0 空間不夠用了,怎麼辦?這時咱們就須要對VG進行擴容。
13.2 VG的擴容
VG的擴容能夠有兩種方法,第一種方法是經過增長PV來實現,操做以下:
A. 建立PV,使用/dev/sdh 來建立一個PV。
B. 擴容VG
如今的vg0 容量爲19.98g.
# vgextend vg0 /dev/sdh
# vgs
如今vg0 的容量爲24.97g, 增長了5GB,即一塊物理硬盤的容量,VG擴容成功。
第二種方法是經過擴展RAID設備的容量來間接對VG進行擴容。這種方法在上一篇文章中有介紹,這裏再也不贅述,須要注意的地方是,/dev/md5 的大小變化後,須要調整PV的大小,操做以下:
# pvresize /dev/md5
十4、LVM的縮減操做
縮減操做須要離線處理。
14.1 LV的縮減
A. umount 文件系統
B. 縮減文件系統
# resize2fs /dev/vg0/lv1 4G
提示須要先運行磁盤檢查。
C. 檢查磁盤
# e2fsck –f /dev/vg0/lv1
D. 再次執行縮減操做
縮減文件系統成功,下面縮減LV的大小。
E. 縮減LV
# lvreduce /dev/vg0/lv1 –L 4G
說明:Step E 和Step D 縮減的大小必須保持一致,這裏的4G是縮減到的大小;若是使用的是"-4G",則表示容量減小多少的意思。
F. 掛載查看
LV 縮減成功。
G. 查看測試數據
數據正常。
14.2 VG的縮減
A. umount 文件系統
B. 查看當前的PV詳情
C. 將/dev/sdg 從vg0 中移除
# vgreduce vg0 /dev/sdg
D. 再次查看PV狀況
/dev/sdg 已經不屬於vg0了。
E. 查看vg0 的狀況
vg0 的大小減小了5GB.
VG 縮減成功。
十5、刪除LVM
若是要完全的來移除LVM的話,須要把建立的步驟反過來操做。
15.1 umount 文件系統
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 移除成功。
十6、LVM 快照(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/
16.3 建立快照
# lvcreate -L 80M -s -n lv1snap /dev/vg0/lv1
說明:爲/dev/vg0/lv1 建立一個大小爲80M,名稱爲lv1snap 的快照。
# lvdisplay
/dev/vg0/lv1snap 的LV Size 爲100MB,使用量爲0.01%.
16.4 將剛纔建立的快照掛載查看
/mnt/lv1 和/mnt/snapshot 是如出一轍的。
16.5 進行檔案的修改操做
16.6 再次查看
snapshot 的使用量爲10.36%,原始資料有改動。
16.7 對snapshot 裏的資料進行打包備份,準備還原
16.8 卸載並移除snapshot
16.9 卸載並格式化/mnt/lv1,清空數據
16.10 恢復數據
能夠看到,原始數據已經成功恢復。
LVM 快照實驗成功。
注意:對lv1的修改量不能超過快照的大小,因爲原始數據會被搬移到快照區,若是你的快照區不夠大,若原始資料被更動的實際數據量比快照區大,那麼快照區固然容納不了,這時候快照功能會失效喔!
轉自:http://www.cnblogs.com/mchina/p/linux-centos-logical-volume-manager-lvm.html