一、LVM2簡介
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它由Heinz Mauelshagen在Linux 2.4內核上實現。LVM將一個或多個硬盤的分區在邏輯上集合,相當於一個大硬盤來使用,當硬盤的空間不夠使用的時候,可以繼續將其它的硬盤的分區加入其中,這樣可以實現磁盤空間的動態管理,相對於普通的磁盤分區有很大的靈活性。與傳統的磁盤與分區相比,LVM爲計算機提供了更高層次的磁盤存儲。它使系統管理員可以更方便的爲應用與用戶分配存儲空間。在LVM管理下的存儲卷可以按需要隨時改變大小與移除(可能需對文件系統工具進行升級)。LVM也允許按用戶組對存儲捲進行管理,允許管理員用更直觀的名稱(如"sales'、'development')代替物理磁盤名(如'sda'、'sdb')來標識存儲卷。
如圖所示LVM模型:
由四個物理卷分區可以組成一個很大的空間,叫做卷組VG,然後在這些空間上劃分一些邏輯分區【LV】,當一個邏輯分區的空間不夠用的時候,可以從剩餘空間上劃分一些空間給空間不夠用的分區使用。
二、LVM基本術語
物理卷(Physical Volume,PV)
指磁盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
卷組(Volume Group,VG)
類似於非LVM系統中的物理磁盤,其由一個或多個物理卷PV組成。可以在卷組上創建一個或多個LV(邏輯卷)。
邏輯卷(Logical Volume,LV)
類似於非LVM系統中的磁盤分區,邏輯卷建立在卷組VG之上。在邏輯卷LV之上可以建立文件系統(比如/home或者/usr等)。
物理塊(Physical Extent,PE)
每一個物理卷PV被劃分爲稱爲PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。所以物理卷(PV)由大小等同的基本單元PE組成。
邏輯塊(Logical Extent,LE)
邏輯卷LV也被劃分爲可被尋址的基本單位,稱爲LE。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。
metadisk:dm
devicemapper,將一個或多個底層塊設備組織一個邏輯設備的模塊
lv的三個訪問路徑:
設備文件/dev/dm-#: 每個文件都有兩個符號鏈接
/dev/mapper/VG_NAME-LV_NAME
/dev/VG_NAME/LV_NAME
快照:snapshot
三、創建和管理LVM
1、創建邏輯卷步驟:pv--> vg --> lv 【 PE大小是由vg決定的】
例如:創建一個10G的卷組:
pv1:3G,pv2:7G 或者pv1: 10G
2、管理PV;
(1).創建磁盤分區
#fdisk/dev/sd[ab..]---->將分區格式調整爲8e--->讓內核重讀分區表
注意:將分區的格式調整爲8e
(2).創建物理卷【 pvcreate /dev/DEVICE】
#pvcreate /dev/sdb7
(4). 查看是否創建成功
#PvdisplayPV_NAME詳細信息
#pvs顯示所有物理卷的簡要信息
(5).移除物理卷 【pvremove /dev/DEVICE】
#pvremove/dev/sdb7
3、管理VG;
(1).創建VG:【vgcreateVG_NAME PV...】 選項:-s #{kKmMgGtTpPeE}:指定PE大小,默認爲4MB;
#vgcreatemyvg[卷組名稱] /dev/sdb6【物理卷名稱】
(2).顯示創建的卷組
#vgs
(3).擴展VG並驗證 【vgextendVG_NAME PV...】
#vgextendmyvg /dev/sdb7
#vgs
(4).縮小VG[或刪除PV] 【vgreduceVG_NAME PV...】
a.移動PV數據
#pvmove /dev/sdb6
b.縮減VG
#vgreduce myvg /dev/sdb6
c.驗證是否成功
#vgs
d.移除PV
#pvremove /dev/sdb7
注意:先執行pvmove操作,以確保位於此PV上的數據能安全移動至其它PV;
(5).顯示VG信息
#vgdisplayVG_NAME
4、管理LV:
(1).顯示創建的LV
#lvs
(2).創建LV 【 lvcreate[OPTIONS] VG_NAME ; -n LV_NAME ; -L#{kKmMgGtTpPeE} 】
#lvcreate-L 2G -n mylv [指定的LV的名字] myvg[VG的名稱]
(3).創建文件系統
#mkfs-t ext4 /dev/mapper/myvg-mylv
或者另外的路徑:#mkfs -t ext4 /dev/myvg/mylv
(4).掛載使用
#mkdir/users
#mount/dev/mapper/myvg-mylv /users/
#ls/users/ 查看內容是否掛載
(5).查看創建的LV大小:
#df-lh
(6).查看LV信息
#lvdisplay myvg[注意是VG的名稱]
或者#lvdisplay /dev/myvg/mylv
#lvg顯示所有的LV
(7).擴展LV
lvextend/dev/VG_NAME/LV_NAME
-L : +[擴展多少];不用+號則爲,擴展到多少
例如:將LV擴展到3G
a.擴展lv大小到3G
#lvextend -L3G /dev/myvg/mylv
b.修改文件系統使用所有包含擴展的空間
#resize2fs/dev/myvg/mylv
c.查看驗證是否生效:
#df -lh
步驟思路總結:
(1) 擴展物理邊界
lvextend
(2) 擴展邏輯邊界
resize2fs
(8)收縮LV:lvreduce,lvresize
lvreduce-L [-]#{kKmMgGtTpPeE} /dev/VG_NAME/LV_NAME
步驟思路:
a.先離線【卸載】
umount/users
b.強制檢測文件系統【ext系列爲例】
e2fsck-f /dev/myvg/mylv
c.收縮邏輯邊界
resize2fs/dev/myvg/mylv 1G
d.收縮物理邊界
lvreduce-L 1G /dev/myvg/mylv
e.上線掛載
mount/dev/myvg/mylv /users/
注意:收縮lv,要卸載lv;收縮後空間要能夠容納當前的所有數據量;
(9).刪除LV
lvremove[-f] /dev/VG_NAME/LV_NAME
a.先卸載LV,並驗證
#umount/users
#mount或cat /proc/mounts 查看驗證是否卸載生效
b.移除
#lvremove/dev/myvg/mylv
四、快照卷:【原理請參考:http://blog.csdn.net/woxiaozhi/article/details/11773101】
lvcreate -L #{kKmMgGtTpPeE} -s -p r -nSNAP_LV_NAME /dev/VG_NAME/LV_NAME
提示:快照卷與原卷在同一個卷組中,因此,創建快照卷之前要確保原卷所在的卷組中有足夠空間可用;
快照卷無須與原卷一樣大;其大小取決於快照卷的存活時長內原卷的數據變化量;
1.創建邏輯卷LVM快照卷並掛載
#lvcreate -L 3G -n mylv myvg
#mke2fs /dev/myvg/mylv -t ext4
#mount /dev/myvg/mylv /users
2.複製文件做驗證
#cp -a /etc/* /users
#ls /users
3.備份/users目錄
#lvcreate -L 100M -s -p r -n mylv-snap/dev/myvg/mylv
#lvs
4.掛載快照卷至/mnt
#mount -t ext4 /dev/myvg/mylv-snap /mnt
#ls /mnt 看到數據與/users目錄一樣的
5.在原卷中修改數據並驗證掛載的快照卷是否修改
#vim /users/fstab
#cat /mnt/fstab 快照還是沒有修改
6.等數據全部複製完成,刪除快照卷即可
a.卸載
#umount /mnt
b.刪除
#lvremove -f /dev/myvg/mylv-snap