在本文「下篇」的內容中,是以 LVM 為主軸從基礎的 PV、VG、LV 建立開始,接著進階「Snapshot」與「Online Resizing」功能實做。以下段落主要先讓讀者大概了解本文「上篇」關於 SoftRAID 實做完畢的情況,方便我們繼續以下的實戰 LVM 介紹。
在前一期(上篇)主要是談論 SoftRAID 與其常用 RAID LEVEL(包含 0 1 5)的實際建置流程,並簡單介紹如何格式化與掛載 SoftRAID 磁碟裝置(建立了三個 RAID 裝置 /dev/md0、/dev/md1 與 /dev/md2)。至於本文「下篇」一開始就用到的 /dev/md1 與後段加入的 /dev/md2 簡介其 SoftRAID 狀態如下表,至於如何實做 SoftRAID 方式請參考「上篇」內容。
| 實體磁碟代號 | RAID LEVEL | RAID 裝置名稱 |
| /dev/sda1 /dev/sdb1 | RAID LEVEL 0 | /dev/md0 |
| /dev/sdc1 /dev/sdd1 | RAID LEVEL 1 | /dev/md1 |
| /dev/sde1 /dev/sdf1 /dev/sdg1 | RAID LEVEL 5 | /dev/md2 |
接下來我們原本是要將先前「上篇」做好的 /dev/md0、/dev/md1 與 /dev/md2 都變成 LVM 中的 PV(Physical Volume),因為 /dev/md0 做的是 RAID 0 只要故障其中一個成員磁碟(/dev/sda1、/dev/sdb1)資料就會遺失,所以我們不打算在 md0 上使用 LVM,所以後續 LVM 的部份只會使用到 /dev/md1 與 /dev/md2 這兩個 RAID 裝置。
至於 /dev/md1 與 /dev/md2 的 LVM 規劃如下,先將 md1 做成 PV,再來新增 VG(Volume Group)名為 vg2,vg2 起初的成員 PV 只有 md1(後續會將 md2 做成 PV 再加入 vg2 這個 VG),還有就是在 vg2 內去建立 LV(Logic Volume)。
建立 LV 可以多個,我們規劃建立兩個 LV,一個可用來測試 LVM 快照功能(Snapshot)、另一個可用來測試 LVM 的 Online Resizing 功能。
| 起初 | 後續 | |
| PV(Physical Volume) | 建立 PV /dev/md1 | 新增 PV /dev/md2 |
| VG(Volume Group) | 建立 VG vg2 成員 PV /dev/md1 | 將 PV /dev/md2 加入 VG vg2 |
| LV(Logical Volume) | 在 vg2 內建立 LV 名稱為 /dev/vg2/lvol0 | 一個 LV 用來測 LVM 快照 另一個 LV 用來測 Online Resizing |
使用指令「pvcreate /dev/md1」將 /dev/md1 變成 PV
使用指令「vgcreate vg2 /dev/md1」建立 VG vg2,成員 PV 為 /dev/md1

在指令「lvcreate」簡單說明中,會看到類似下圖的上半方,可大略看出 lvcreate 指令後面第一個參數可銜接 VolumeGroupName(VG 的名字)或是 OriginalLogicalVolume[Path](原始 LV 路徑)。
使用指令「lvcreate -L 200M vg2」在 VG vg2 內建立預設檔名為 lvol0(lvol0 拼法:LVㄛL零)的 LV,磁碟大小 200 MB(實際上的裝置檔案位於 /dev/vg2/lvol0)。

Format LV 與掛載、卸載等等的動作,以及拷貝一些資料(例如:/var)到 lvol0 磁區內與觀察磁碟用量(df -h)的指令,請參考以下圖檔。

LVM 的 Snapshot(快照)早期主要應用在備份,主要是第一代的 LVM 只支援唯讀的 Snapshot,所以快照完的 LV 就可以用來被備份,在此期間不用擔心資料在備份時有任何異動,而且上線的資料能夠繼續讀取與寫入原來的 LV。
自從 LVM2 支援 Snapshot 的 LV 可以完整讀寫後,在應用也變得廣泛些(不只是拿來備份),例如將快照出來的 LV 當成測試用的檔案系統,用來安裝一些測試軟體,還是說當快照內資料用錯用壞了的時候,只要做刪除快照的 LV 即可,不會傷到原來的資料與應用程式;甚至也可以搭配 Xen 的 GuestOS(domU),將 domU 所存取的磁碟放在 LV,做出 domU 的 Snapshot,若不小心玩壞掉了快照出來的 domU(也就是 Snapshot),一點兒也不需心疼,只需要刪除並重建快照即可,因為快照能夠節省磁碟的 I/O,也節省您不少的時間。
LVM2 快照主要是記載著原 LV 與快照後 LV 的所有『資料異動』紀錄,所以建立快照時,需指明資料異動所存放的空間大小(指令 lvcreate -s -L size …),所以當資料異動的數量超過所給予的空間時(使用 lvdisplay 觀察),就要先行延伸(指令 lvextend -L +size …),不然資料異動若超過存放空間,Snapshot 就會失效。
接續先前 Format 與掛載 lvol0 的情況,要快照 lvol0 之前,還是 umount lvol0 再做 Snapshot 確保資料無任何異動比較保險(指令 umount /mnt/first)
使用指令「lvcreate -s -L 180M /dev/vg2/lvol0」建立 lvol0 的快照 lvol1,允許資料異動的空間為 180 MB,在這期間異動的資料不可超過此值(也就是 180 MB)
分別將 lvol0、lvol1 掛載在 /mnt/first 與 /mnt/second
使用指令「cp -a /etc /mnt/first」將 /etc 拷貝一份到 /mnt/first(也就是原來的 lvol0 磁區),使用 df -h 來分別觀察 /mnt/first 與 /mnt/second 的磁碟用量,快照的 lvol1(掛載在 /mnt/second)並不會增加,而且我們異動的資料(拷貝 /etc)估計只有 33 MB 左右(80 MB - 47 MB = 43 MB)
使用指令「rsync -a /mnt/second/ backup」來備份快照磁區的資料,並檢視備份後的結果,應該只有先前的 var 沒有後來加入的 etc 資料。
在備份完成後,卸載 /mnt/second 並將 lvol1 這個快照移除。

首先再次建立 Snapshot 並分別掛載如下圖。

接著使用「lvscan」、「lvdisplay」指令來觀察原始的 LV 與 Snapshot 狀況,其中 lvdisplay 能夠顯示較詳細的資訊,像是運作的狀況(status)是正常作動(active);可完整讀寫(read/write);COW-table size(當初 lvcreate 時給的 180 MB)與使用比率(有百分比的那一行,現在的值為 0.03%)。

接下來不論您是刪除 lvol0 這個『本尊』的 /mnt/first/var 或是刪除 lvol1 這個『分身』的 /mnt/second/etc 都會影響到 Snapshot 的使用比率(百分比率增加中)。至於新增資料的動作更是能夠快速增加 Snapshot 使用比率(因為他是採用 Copy On Write 的方式,要寫入時需要拷貝才做拷貝的動作),若是寫入與修改的資料量超出預期初始的 180 MB,需儘速使用類似「lvextend -L +100M /dev/vg2/lvol1」的指令來加大 Snapshot 磁區,以防止爆滿導致 Snapshot 不做動(INACITVE)且會變成唯讀(Read Only)狀態。

由「lvdisplay」顯示出來的資訊看出,加大的不是 LV size 而是 COW-table 的 size。

在測試完 LVM 快照功能後,接下來先介紹 VG 成員 PV 的增加(用意在增加整體 VG 的大小),最後介紹 LV 磁區的延展擴大以及檔案系統 Online Resizing 功能。
要動態的增加 VG 內 PV 成員的用意,主要是因應未來 LV 磁碟空間的成長,在測試之前先依照以下的指令,將之前測試的 Snapshot 刪除,並恢復只有一個空間較小的 LV 名為 lvol0 磁區。

依照計畫在 VG vg2 內建立一個較大的 LV 依照預設命名為 lvol1(lvol1 拼法:LVㄛL壹),這個 lvol1 的大小卻是故意將現階段唯一屬於 vg2 的 PV /dev/md1 用到空間接近不夠的情況,使用指令如下:
「lvcreate -L 30G vg2」來建立 lvol1 大小 30 GB
建立完成 lvol1 後,使用指令「pvscan」來觀察 /dev/md1 PV 被使用的情況(如下圖:只剩下 3.72 GB 的空間可供使用)
將 lvol1 Format 成 ext3、掛載到 /mnt/second 並且將一些測試資料利用 rsync 或 cp 等等指令拷貝到 /mnt/second 底下。(如下圖)

使用指令「pvcreate /dev/md2」建立 PV /dev/md2 後
在接著使用指令「vgextend vg2 /dev/md2」將 VG vg2 延伸,加入成員 PV /dev/md2
使用指令「pvscan」除了可看出已經使用多少剩下多少磁碟空間之外(空間被使用在 lvol0 與 lvol1 這兩個 LV)還可以看出當下 VG 的成員 PV 共有那些(例如:VG vg2 共有兩個 PV 分別為 /dev/md1 與 /dev/md2)

既然 vg2 空間既已成長(/dev/md1 與 /dev/md2 的總和),我們就使用指令「lvextend -L +60G /dev/vg2/lvol1」將 lvol1 延伸 60 GB(也就是長大到 90 GB),使用「lvscan」、「df -h」時,會發現 lvol1 雖然長大了,但檔案系統卻沒有因此跟著長大。
再度用「pvscan」觀察,此時 lvol1 所使用的實際磁碟跨越在 /dev/md1 與 /dev/md2 兩者之上,所以當 /dev/md1 或 /dev/md2 發生故障時,lvol1 與 lvol0 都會變成 Read Only 狀態且很有可能發生資料遺失的慘劇,這也就是為什麼大型系統在部屬與建置 LVM 前,在底層的磁碟都會先做 Hardware/Software RAID 的原因,在建置 RAID(例如:RAID 1 或 RAID 5)後若發生故障一個實體硬碟(例如:/dev/sdc)就不會造成資料遺失的情況。

為了解決 LV 長大但是檔案系統卻未長大的問題,使用指令「ext2online /dev/vg2/lvol1」來做 ext3 檔案系統的 Online Resizing(實際上是執行線上增大檔案系統)此時若 lvol1 磁區有資料進出也無妨。
做完 Online Resizing 後使用「df -h」觀察磁碟總容量(增大)與使用量(未變化)及使用比率(降低)的變化,而且 lvol1 檔案系統內的資料正常無損傷。

下圖為筆者施行縮小 lvol1 至 80 GB 的情況(請注意:並不是每一行指令的執行都有效果)

底下針對一些關於 LVM 常見的一些問題,整理如下:
若是有需要手動的啟用與停用 LVM 磁區,使用指令「vgchange -a n vg2」可使 vg2 停止運作(請記得先卸載 VG vg2 內的成員 LV /dev/vg2/lvol0 與 /dev/vg2/lvol1),要啟用則是使用指令「vgchange -a y」這樣所有的 VG 都會被啟用。
這個指令很有機會用在後續增添已經設定成 LVM 磁區的硬體磁碟,若是主磁碟開完機不自動啟用資料硬碟的 LVM,就使用「vgchange -a y」指令來使資料硬碟內的 LV 啟用,倘若遇到 VG 名稱重複的情況(例如:RedHat/Fedora 預設的 VolGroup00),請先在別台電腦使用「vgrename」的指令改好 VG 名稱後,再將改完 VG 名稱的硬體裝到目地電腦去(這樣 VG 的名稱才會錯開,資料才會都讀的到)。

事實上 SoftRAID 與 LVM 都是要損耗 CPU 效能的,如果您的主機本身就需要執行大量運算的程式,那就比較建議使用 Hardware RAID 來減輕 CPU 負擔;反過來說若是主機所要求的 CPU 運算量不大,或是主機 CPU 數量不只一顆(例如:兩顆、四顆、或八顆以上),採用 Software RAID 與 LVM 雖然會耗用部份的 CPU 運算能力,但或許她能夠藉由加速磁碟存取的速度,來增進整體效能(因為磁碟 I/O 速度加快而感覺起來效能變好)。
RAID 常見的用意主要有二:一個是『Redundant』(備援)另一個是『加速』,RAID 1(Mirror)是很常見的 Redundant,而 RAID 0 則是以效能(速度)見長,至於 RAID 5 則位於中間地帶,既有 Redundant 又帶著部份的速度,且整體容量的損耗也比 RAID 1 少。
至於 LVM 的優勢是能夠很靈活調配磁碟空間與用量,不論是 LV、VG 的長大與縮小,或是快照功能用在備份,都是 Enterprise 級的儲存領域應用。
當面對到越大、越多的倉儲(儲存設備與儲存空間)加上超大的貨物進出量(File I/O),越需要好的倉管來做管理(磁碟與檔案系統管理)。面對一大堆磁碟以及數個超大的磁區,使用 Linux(RAID 與 LVM)搭配穩定、優秀且高效能的檔案系統(ext3 與 Reiserfs …等)會是您最佳的選擇。
在介紹完一系列在 Linux 上使用 SoftRAID 與 LVM 應用後,應該對其磁碟控管的能力佩服不已吧!其實 Linux 在企業 Enterprise 級的儲存應用上,已經是處於相當重要的角色,搭配 SAN(儲存區域網路,Storage Area Network)能夠讓資料的儲存更加有彈性,若是搭配近幾年來興起的虛擬機器技術 Xen 與 VMWare 軟體,或是 HA(高可用度,High Available)使得服務永續經營而牢不可破,這些好用的功能讓人感覺到 Linux 各項技術應用更加的全面化而且變得可以是環環相扣,也就是說單獨一項技術應用便足以獨當一面,若是多項技術的綜合應用更加的威力強大!