linux 逻辑卷管理

邏輯捲軸管理員 (Logical Volume Manager)

想像一個情況,你在當初規劃主機的時候將 /home 只給他 50G ,等到使用者眾多之後導致這個 filesystem 不夠大,此時你能怎麼作?多數的朋友都是這樣:再加一顆新硬碟,然後重新分割、格式化,將 /home 的資料完整的複製過來,然後將原本的 partition 卸載重新掛載新的 partition 。啊!好忙碌啊!若是第二次分割卻給的容量太多!導致很多磁碟容量被浪費了!你想要將這個partition 縮小時,又該如何作?將上述的流程再搞一遍!唉~煩死了,尤其複製很花時間ㄟ~有沒有更簡單的方法呢?有的!那就是我們這個小節要介紹的LVM 這玩意兒!

LVM 的重點在於『可以彈性的調整 filesystem 的容量!』而並非在於效能與資料保全上面。需要檔案的讀寫效能或者是資料的可靠性,請參考前面的 RAID 小節。 LVM 可以整合多個實體 partition 在一起,讓這些 partitions 看起來就像是一個磁碟一樣!而且,還可以在未來新增或移除其他的實體 partition 到這個 LVM 管理的磁碟當中。如此一來,整個磁碟空間的使用上,實在是相當的具有彈性啊!既然 LVM 這麼好用,那就讓我們來瞧瞧這玩意吧!

什麼是 LVM: PV, PE, VG, LV 的意義

LVM 的全名是 Logical Volume Manager,中文可以翻譯作邏輯捲軸管理員。之所以稱為『捲軸』可能是因為可以將 filesystem 像捲軸一樣伸長或縮短之故吧!LVM 的作法是將幾個實體的 partitions (或 disk) 透過軟體組合成為一塊看起來是獨立的大磁碟 (VG) ,然後將這塊大磁碟再經過分割成為可使用分割槽(LV),最終就能夠掛載使用了。但是為什麼這樣的系統可以進行 filesystem 的擴充或縮小呢?其實與一個稱為 PE 的項目有關!底下我們就得要針對這幾個項目來好好聊聊!

?Physical Volume, PV, 實體捲軸

我們實際的 partition 需要調整系統識別碼 (system ID) 成為 8e (LVM 的識別碼),然後再經過 pvcreate 的指令將他轉成 LVM 最底層的實體捲軸 (PV) ,之後才能夠將這些 PV 加以利用!調整 system ID 的方是就是透過fdisk啦!

?Volume Group, VG, 捲軸群組

所謂的 LVM 大磁碟就是將許多 PV 整合成這個 VG 的東西就是啦!所以 VG 就是 LVM 組合起來的大磁碟!這麼想就好了。那麼這個大磁碟最大可以到多少容量呢?這與底下要說明的 PE 以及 LVM 的格式版本有關喔~在預設的情況下,lvm2 可能會使用 lvm1 的儲存格式,該格式的 LV 最大僅能支援到 65534 PE 而已。所以,如果使用 LVM 預設的參數 (CentOS 5.x 32 位元使用 lvm2 軟體、lvm1 格式),則一個 VG 最大可達 256GB 的容量啊!(參考底下的 PE 說明)

?Physical Extent, PE, 實體範圍區塊

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 的各項格式功能,因此這個限制已經不存在了。

?Logical Volume, LV, 邏輯捲軸

最終的 VG 還會被切成 LV,這個 LV 就是最後可以被格式化使用的類似分割槽的咚咚了!那麼 LV 是否可以隨意指定大小呢?當然不可以!既然 PE 是整個LVM 的最小儲存單位,那麼 LV 的大小就與在此 LV 內的 PE 總數有關。為了方便使用者利用 LVM 來管理其系統,因此 LV 的裝置檔名通常指定為

『 /dev/vgname/lvname 』的樣式!

此外,我們剛剛有談到 LVM 可彈性的變更 filesystem 的容量,那是如何辦到的?其實他就是透過『交換 PE 』來進行資料轉換,將原本 LV 內的 PE 移轉到其他裝置中以降低 LV 容量,或將其他裝置的 PE 加到此 LV 中以加大容量!VG、LV 與 PE 的關係有點像下圖:

圖 3.1.1、PE 與 VG 的相關性圖示

如上圖所示,VG 內的 PE 會分給虛線部分的 LV,如果未來這個 VG 要擴充的話,加上其他的 PV 即可。而最重要的 LV 如果要擴充的話,也是透過加入 VG 內沒有使用到的 PE 來擴充的!

?實作流程

透過 PV, VG, LV 的規劃之後,再利用mkfs就可以將你的 LV 格式化成為可以利用的檔案系統了!而且這個檔案系統的容量在未來還能夠進行擴充或減少,而且裡面的資料還不會被影響!實在是很『福氣啦!』那實作方面要如何進行呢?很簡單呢!整個流程由基礎到最終的結果可以這樣看:

圖 3.1.2、 LVM 各元件的實現流程圖示

如此一來,我們就可以利用 LV 這個玩意兒來進行系統的掛載了。不過,你應該要覺得奇怪的是,那麼我的資料寫入這個 LV 時,到底他是怎麼寫入硬碟當中的?呵呵!好問題~其實,依據寫入機制的不同,而有兩種方式:

?線性模式 (linear):假如我將 /dev/hda1, /dev/hdb1 這兩個partition 加入到 VG 當中,並且整個 VG 只有一個 LV 時,那麼所謂的線性模式就是:當 /dev/hda1 的容量用完之後,/dev/hdb1 的硬碟才會被使用到,這也是我們所建議的模式。

?交錯模式 (triped):那什麼是交錯模式?很簡單啊,就是我將一筆資料拆成兩部分,分別寫入 /dev/hda1 與 /dev/hdb1 的意思,感覺上有點像RAID 0 啦!如此一來,一份資料用兩顆硬碟來寫入,理論上,讀寫的效能會比較好。

基本上,LVM 最主要的用處是在實現一個可以彈性調整容量的檔案系統上,而不是在建立一個效能為主的磁碟上,所以,我們應該利用的是 LVM 可以彈性管理整個 partition 大小的用途上,而不是著眼在效能上的。因此, LVM 預設的讀寫模式是線性模式啦!如果你使用 triped 模式,要注意,當任何一個partition 『歸天』時,所有的資料都會『損毀』的!所以啦,不是很適合使用這種模式啦!如果要強調效能與備份,那麼就直接使用 RAID 即可,不需要用到 LVM 啊!

LVM 實作流程

LVM 必需要核心有支援且需要安裝 lvm2 這個軟體,好佳在的是, CentOS 與其他較新的 distributions 已經預設將 lvm 的支援與軟體都安裝妥當了!所以你不需要擔心這方面的問題!用就對了!

鳥哥使用的測試機又要出動了喔!剛剛我們才練習過 RAID,必須要將一堆目前沒有用到的分割槽先殺掉,然後再重建新的分割槽。並且由於鳥哥僅有一個

40GB 的磁碟,所以底下的練習都僅針對同一顆磁碟來作的。我的要求有點像這樣:

?先分割出 4 個 partition ,每個 partition 的容量均為 1.5GB 左右,且 system ID 需要為 8e;

?全部的 partition 整合成為一個 VG,VG 名稱設定為 vbirdvg;且 PE 的大小為 16MB;

?全部的 VG 容量都丟給 LV ,LV 的名稱設定為 vbirdlv;

?最終這個 LV 格式化為 ext3 的檔案系統,且掛載在 /mnt/lvm 中

鳥哥就不仔細的介紹實體分割了,請您自行參考第八章的 fdisk來達成底下的範例:(注意:修改系統識別碼請使用 t 這個 fdisk 內的指令來處理即可)

上面的 /dev/hda{6,7,8,9} 這四個分割槽就是我們的實體分割槽!也就是底下會實際用到的資訊!注意看,那個 8e 的出現會導致 system 變成『 Linux LVM 』哩!其實沒有設定成為 8e 也沒關係,不過某些 LVM 的偵測指令可能會偵測不到該 partition 就是了!接下來,就一個一個的處理各流程吧!

?PV 階段

要建立 PV 其實很簡單,只要直接使用 pvcreate 即可!我們來談一談與 PV 有關的指令吧!

?pvcreate :將實體 partition 建立成為 PV ;

?pvscan :搜尋目前系統裡面任何具有 PV 的磁碟;

?pvdisplay :顯示出目前系統上面的 PV 狀態;

?pvremove :將 PV 屬性移除,讓該 partition 不具有 PV 屬性。

那就直接來瞧一瞧吧!

講是很難,作是很簡單!這樣就將 PV 建立了兩個囉!簡單到不行吧! ^_^!繼續來玩 VG 去!

?VG 階段

建立 VG 及 VG 相關的指令也不少,我們來看看:

?vgcreate :就是主要建立 VG 的指令啦!他的參數比較多,等一下介紹。

?vgscan :搜尋系統上面是否有 VG 存在?

?vgdisplay :顯示目前系統上面的 VG 狀態;

?vgextend :在 VG 內增加額外的 PV ;

?vgreduce :在 VG 內移除 PV;

?vgchange :設定 VG 是否啟動 (active);

?vgremove :刪除一個 VG 啊!

與 PV 不同的是, VG 的名稱是自訂的!我們知道 PV 的名稱其實就是

partition 的裝置檔名,但是這個 VG 名稱則可以隨便你自己取啊!在底下的例子當中,我將 VG 名稱取名為 vbirdvg 。建立這個 VG 的流程是這樣的:

這樣就建立一個 VG 了!假設我們要增加這個 VG 的容量,因為我們還有/dev/hda9 嘛!此時你可以這樣做:

我們多了一個裝置喔!接下來為這個 vbirdvg 進行分割吧!透過 LV 功能來處理!

?LV 階段

創造出 VG 這個大磁碟之後,再來就是要建立分割區啦!這個分割區就是所謂的LV 囉!假設我要將剛剛那個 vbirdvg 磁碟,分割成為 vbirdlv ,整個 VG 的容量都被分配到 vbirdlv 裡面去!先來看看能使用的指令後,就直接工作了先!

?lvcreate :建立 LV 啦!

?lvscan :查詢系統上面的 LV ;

?lvdisplay :顯示系統上面的 LV 狀態啊!

?lvextend :在 LV 裡面增加容量!

?lvreduce :在 LV 裡面減少容量;

?lvremove :刪除一個 LV !

?lvresize :對 LV 進行容量大小的調整!

如此一來,整個 partition 也準備好啦!接下來,就是針對這個 LV 來處理啦!要特別注意的是, VG 的名稱為 vbirdvg ,但是 LV 的名稱必須使用全名!亦即是 /dev/vbirdvg/vbirdlv 才對喔!後續的處理都是這樣的!這點初次接觸LVM 的朋友很容易搞錯!

檔案系統階段

這個部分鳥哥我就不再多加解釋了!直接來進行吧!

其實 LV 的名稱建置成為 /dev/vbirdvg/vbirdlv 是為了讓使用者直覺式的找到我們所需要的資料,實際上 LVM 使用的裝置是放置到 /dev/mapper/ 目錄下

的!所以你才會看到上表當中的特殊字體部分。透過這樣的功能,我們現在已經建置好一個 LV 了!你可以自由的應用 /mnt/lvm 內的所有資源!

相关文档
最新文档