LVM(Logical Volume Manager,邏輯卷管理器):是linux對磁盤分區進行管理的一種機制,至於作用就不再概述了。
首先了解一下DM把,全稱爲Device Mapper,想沒想到我們經常用的/dev/mapper?就是它了。它跟MD一樣,有一個核心的模塊和衆多的子模塊組成,子模塊提供了各種特性和功能。如下圖:
DM提供了設備的映射機制,能夠將多個物理的設備映射爲一個邏輯設備,感覺DM要比MD的功能強大的多了,做LVM2都是使用DM機制的。
DM提供的功能大體有:將多個磁盤可用的空間虛擬爲一塊磁盤,鏡像,快照,多路徑等等。。
首先我們先了解一下LVM的結構:
它主要由三個類型:PV VG和LV
--PV(Physical volume,物理卷):由塊設備組成,物理卷可以是一個磁盤的某一分區,也可以是整塊磁盤或RAID磁盤(硬RAID,這樣效果更叼了),也可以是通過ISCSI共享出來的塊設備等等,創建LVM的第一步,就是要將這種類型的設備創建爲物理卷。
--VG(Volume Group,卷組):各個物理卷組和在一起,一個類似擴展分區的容器,物理卷可以自由的加入VG,也可以在VG中移除,也就是說,我們的VG可以動態的擴大或縮小。
--LV(Logical Volume,邏輯卷):這就相當於邏輯分區了,經過格式化後,我們可以將LV掛載到目錄下使用,LV是可以自由的擴大和縮小的。
OK,我們已經大體瞭解了一個LVM是怎麼構成的了,等等,還有一個叫做PE和LE的東西。
--PE(physical extent,物理塊):是LVM最小的尋址單元,可進行配置大小,默認爲4MB,我們怎麼抽象的理解PE呢?我們在創建卷組的時候,會指定PE的大小,然後會把我們組成VG的PV劃分成N多個PE,也就是說,我們的VG是由衆多的PE組成的,而LE,是與PE大小的一樣的,只是站在LV的角度把它看成了LE了。在LVM1中會限制VG的PE個數爲65534個,也就是VG最大容量爲256G左右,但是LVM2已經去掉了這種限制,所以我們可以隨心所欲的用了~
終於到了我們該怎麼創建的時候了,說一下各個階段使用的命令吧,這些命令都是常用的,現實環境下肯定比這個多,我目前也只知道這麼多(吼吼,目前還是水軍一份子):
PV階段:
pvcreate----創建pv,用法:pvcreate /dev/xxx
pvremove--刪除PV, 用法:格式同上,不是命令同上
pvscan-重新掃描PV,
pvs或pvdisplay--查看PV
pvmove--(移動PV上的數據,如果你想移除一個PV,但還要保留PV上的數據,就需要用到這個命令了)
Ps:pvmove格式:pvmove /dev/xx(要移除的Pv) /dev/xx(把數據移動到此設備,這個設備必須是和要移除的Pv屬於一個卷組)
VG階段:
vgcreate_--創建vg, 用法 vgcreate -s 16M vgname /dev/xx
vgremove--刪除VG
vgextend--擴展VG,加PV 用法:vgextend vgname /dev/xx/xx
vgreduce--縮小VG,移除PV 用法:vgreduce vgname /dev/xx/xx
vgs或vgdisplay--查看VG
vgscan--重新掃描vg
vgrename--重命名vg
PS:創建vg時 -s可以指定PE大小,單位可以是k,m,g,或更多,自行man吧。
LV階段:
lvcreate--創建lv 用法:lvcreate -n lvname -l|L 100|50M /dev/xxx
lvremove--刪除lv
lvextend--擴容lv
lvreduce--縮小lv
lvresize--既可縮小又可擴容
lvs或lvdisplay--查看lv
lvscan--重新掃描lv
PS:創建LV時候,小l指分配PE的個數,大L指分配的空間大小,通常爲PE大小的倍數,如果不是倍數,空間會多出一個PE大小範圍內的容量。其它的參數下面在介紹。
Ok,那我們來動手實驗一下吧:
需求:首先我要把sdb,sdc,sdd三塊盤創建爲一個PE大小爲16M,名字叫做testvg,並創建一個10G大的,名字叫做testlv的Lv,並格式化爲ext3格式,並掛載到/test。
1.創建Pv
我們可以查看一下Pv,可以看到,沒創建Vg前,Pe的大小是沒有的。
2.創建Vg
vg我就不查看了,信息挺多,自行查看把,這裏看一下創建vg後的Pe大小。
3.創建Lv並格式化掛載
格式化的圖就略過了,我們看到雖然我們是指定lv路徑掛載,但是實際是/dev/mapper下的設備掛載到了/test目錄。
我們看一下,發現/dev/testvg/下的設備竟然是鏈接!而真實的設備在mapper下面。哼哼,知道dm的強大了吧。
行了,簡單的就瞭解這些了吧,下面說一下LVM的擴大和縮小,擴大和縮小並不影響數據本身,但前提要按流程走哦。首先我們先了解下結構和什麼是物理邊界和邏輯邊界,如下圖:
我們知道,我們的文件系統是建立在分區之上的,而分區就相當於物理邊界,文件系統就 相當於邏輯邊界,而你數據存儲的存儲大小,就取決於物理邊界和邏輯邊界,如果我們把這種抽象的概念轉移到我們的LVM之上,我們就會發現,Lv就相當於物理邊界,而文件系統的就相當於邏輯邊界。如果站在Vg的角度來看,我們的Lv也是邏輯邊界,而Vg本身是物理邊界,Ok,別弄亂了,只是站的角度不同而已。
那麼,我們擴展的時候是先擴展邏輯邊界還是物理邊界呢?
很顯然,是先擴展物理邊界啦,邏輯肯定不能大於物理的了,
那麼,我們縮小的時候,是先縮小物理,還是先縮小邏輯呢?
也很顯然,是先縮小邏輯了,你先縮小物理邊界了,那邏輯豈不是大於物理了?
讓我們來擴展把,擴展如下:
1.先確認好要擴展的lv,並確保vg有足夠的Pe用於分配。
2.擴展Lv(物理):有+號是在原有的大小上+5G空間,沒有+號,則代表擴展到5G,一定要注意哦
擴展後我們df看一下大小,你會發現,文件系統並沒有擴展,那我們的空間去哪了?
其實空間已經擴展了,我們剛纔擴展的是Lv的物理大小
3. Ok,我們繼續擴展Lv在文件系統中的大小(邏輯)。
Ps:resize2fs格式:resize2fs lv路徑 15G(擴展至多大)或使用-P,擴展到最大(物理範圍內)。
下面我們開始縮小Lv,縮小有風險,縮小需謹慎。
1.首先我們要卸載掛載目錄(目前文件系統類型必須卸載,否則後果自負)
2.計算縮小容量,確認縮小後的空間能承載原有數據。
3.卸載並進行磁盤的一致性檢查
4.縮小文件系統大小 縮小至2G 也就是減少了13G(邏輯)
5.縮小Lv到2G(物理)
6.掛載查看大小,你也可以掛載前在進行一致性檢測
Ok,擴大縮小也說完了,在說說快照吧,下面只講操作,至於原理,在寫一篇吧,會在文章最小面附上鍊接,因爲這篇已經寫的好長了~
快照---保存系統某一個的狀態(也可以理解爲保存某一狀態的數據)。
首先要聲明的是:
*快照卷必須和創建快照的Lv在同一個卷組。
*快照卷的生存週期爲整個數據的時長:也就是說數據的增長量不能超出分配快照卷的大小,否則,快照卷損毀。
1.先查看原有目錄下的文件:
2.創建快照:
3.把快照卷掛載並查看文件,你發現,它保留了我們創建快照那一刻的數據。
Ps:lvcreate,-s 爲指定爲快照卷 -p指定權限有r和w,快照卷最好爲只讀了,防止操作不當刪除數據,另外快照也可以用來最數據備份,這些在另一篇在說~