今日夜談--邏輯卷的那點事

一:認識

   邏輯卷,很多人會認爲就是LVM(Logical Volume Manager),但其實LVM只是邏輯卷的一個管理程序,真正實現底層邏輯卷的功能的則是工作在內核中的DM。

   下面先來說說邏輯卷的原理。邏輯卷是由一系列虛擬磁盤組成的卷組,通常也可以稱作邏輯分區。它的特點就是可以動態的擴展和縮減,使得分區不再有大小限制。這樣一來,媽媽就真的再也不用擔心我分區不夠用啦,也不用因爲剛裝系統的時候爲每個分區的大小而糾結了。

   剛纔說過,實現這種功能的,是工作在內核中的DM程序,它是一種驅動。根據DM table,mapping table這樣的映射規則,將多個硬盤(包括raid)組成一個大的邏輯設備:meta device。這個邏輯設備就可以實現動態的擴展。

   DM是工作在內核的程序,而LVM則是工作在用戶空間的程序。它給用戶提供接口,使用戶能夠通過命令的方式來控制內核中的DM,去創建映射規則。


二:結構

   邏輯卷的實現分爲三層:底層的PV,中間層的VG,和上層的LV。

   PV(Physical Volume)是底層的物理磁盤,是真正存儲數據的地方。VG(Volume Group)是卷組,它將幾塊磁盤物理設備組合起來當做軟件設備來使用,使得在用戶看來這一個卷組就是一個整體,而不關心底層的磁盤狀況。在VG上格式化創建文件系統後才能使用的,叫做LV邏輯卷。

wKioL1MNe-GA2yr1AAGSIi9ePmc027.jpg

   如上圖,PV是物理層面的,VG是內核中DM模塊實現的,而LV是在用戶空間,用戶通過命令來創建的。


三:邏輯卷的創建

   瞭解了邏輯卷的組成和原理後,大家都會清楚,創建一個邏輯卷,肯定是從創建底層的PV開始的。所以先來創建PV。

   PV的命令有很多,比如pvcreate,pvdisplay,pvs,pvmove,pvremove,pvscan,等等。創建時用到的命令,肯定是pvcreate咯。

   在創建PV之前,先從硬盤劃分兩塊分區用來當做物理卷用:

       fdisk /dev/sda

       選擇n,new一個新分區,創建一個大小爲5G的分區:+5G;

       同樣的操作再創建一個分區;

       在fdisk的交互模式下鍵入t,選擇文件系統類型,我們選擇8e。保存退出。

       partprobe /dev/sda使得改變生效。

pvcreate /dev/sda10 /dev/sda11,這句命令就創建了兩個pv,可以通過pvdisplay來查看以創建的pv。

   VG的主要命令有:vgcreate,vgck,vgdisplay,vgs,vgreduce,vgextend,vgremove等等。

   VG在創建的時候會將底層的PV分成很多份小塊,每個小塊叫做PE,VG的顆粒度最小的存儲單位是PE。

   創建VG:vgcreate -s 8M(PE大小) myvg(名稱) /dev/sda{10,11}

   通過vgdisplay能查看創建vg的狀態。


   創建好VG後就可以繼續創建最終的LV啦。LV的命令和底層的兩位兄弟類似:lvcreate,lvdisplay,lvs,lvreduce,lvextend,lvresize,lvremove。

   創建LV:lvcreate -L(邏輯卷大小) -l(邏輯盤區個數,PE個數) -n (名稱)

-p (r,rw權限)

   eg:lvcreate -L 500M -n mydata myvg(指定在哪個vg中創建)

   創建的結果可以用lvdisplay,和lvs來查看。結果發現lv的大小是504M。那是因爲剛纔說過的,PE是存儲的最小單位,而之前指定的PE大小爲8M,所以LV的大小一定是PE的整數倍。當然也可以直接指定PE的個數來創建LV。



三:邏輯卷的擴展和縮減

   這樣一來邏輯卷的創建就基本結束啦。但是僅僅創建不能體現出邏輯卷的作用。它的最大用處就是可以動態的擴展和縮減了。

   在對邏輯捲進行動態的擴展和縮減之前,先要掌握PV的添加和刪除操作.

   添加PV:

       pvcreate /dev/sda12(前提是這個分區事先創建)

       pvextend myvg /dev/sda12 在myvg卷組中添加創建好的/dev/sda12這個PV。

   移除PV:

       pvmove /dev/sda12 先將這個PV中的數據move到其他地方

       vgreduce myvg /dev/sda12 再從VG中刪除這個PV

       pvremove /dev/sda12 最後再刪除這個PV

   

   以上的操作是在底層對VG卷組進行的動態的改變。下面介紹邏輯卷的擴展和縮減操作。

   lvextend  -l+ 帶加號表示增加,不帶表示指定數值 -L 指定大小

   eg: lvextend -L 1G /dev/myvg/mydata 指定擴展後的大小爲1G,擴展的邏輯卷的是mydata

       lvextend -l+ 500M /dev/myvg/mydata 將mydata這個邏輯卷擴展500M的存儲

   擴展物理邊界後還得擴展邏輯邊界,即文件系統的邊界(縮減時相反):

   resize2fs /dev/myvg/mydata 重新定義mydata的大小,不指定大小默認擴展和物理邊界一致

   resize2fs /dev/myvg/mydata  1G 指定mydata的大小爲1G,這和上面的擴展不一樣,是文件系統的邊界

   

   縮減LV是風險比較大的做法,建議不要去做,因爲可能會導致數據損壞:

   縮減lv:

       1.卸載文件系統 umount

       2.檢測文件系統 e2fsck -f /dev/myvg/mydata

       3.縮減邏輯邊界 resize2fs /dev/myvg 200M

       4.lvreduce -L 200M  /dev/myvg/mydata


   好了,以上就介紹了邏輯卷的一些基本原理;如果去創建一個邏輯分區和如果擴展和縮減邏輯分區。在我們不想爲分區的大小規劃而煩惱的時候,可以考慮邏輯分區這樣一個很實用而且很好用的一個功能。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章