Linux 上的 LVM (Logic Volume Manager) 筆記

 

按一下以存取 20050321-LVM-1.pdf

 

 

http://blog.nuface.tw/?p=1267

使用LVM 有什麼好處呢?

以往在硬碟分割時,常常捉不太準每一個partition 應該分多少空間,有時這邊少一點,那邊又多一點,每次空間不夠時,工程就會有點浩大,通常要另外準備一硬碟,把原本資料copy 出來,再重新來好好分割一下;或著直接把資料,轉存至分割好的新硬碟上。所以每次資料容量一爆時,就會很頭痛。

這個時候,如果使用了LVM ,那就方便多了。LVM 可以彈性的對Partition 做管理。你可以把不同的實體Partition,組成一個大的邏輯硬碟。這個邏輯硬碟,可以隨時動態的加入或移除Partition,所以邏輯硬碟,是可以你想要變大就變大,想要變小就變小,彈性很大。

有了這個邏輯硬碟後,你可以由這顆邏輯硬碟切割出,邏輯磁碟區,再把這個邏輯磁碟區格式化好了之後,再把它掛載至系統目錄上,即可使用。而這個邏輯磁碟區,一樣可以自由的加大,或變小,管理上很方便。

LVM 管理

LVM 是什麼東西呢 ?這是英文的縮寫 (Logical Volume Management),邏輯卷冊管理。 “邏輯" 跟 “管理" 小瑞還了解, “卷冊" 就有點不太了。我覺得有點像是磁碟的感覺,所以小瑞稱 LVM 為 “邏輯磁碟機系統管理" 。

上面那張圖有看到幾個名詞,分別是 VG / PV / LV ,個別做一下名詞解釋。

VG (Volume Group) 的英文縮寫,由許多實體磁碟機或實體磁區,所組成的邏輯磁碟機。

PV (Physical Volumes)的英文縮寫,指的是實體磁碟機或實體磁區,例如: /dev/hda 或 /dev/hda1 。

LV (Logical Volumes)的英文縮寫,指的是由邏輯磁碟機,再分割出來的邏輯磁碟區。

以上是大致的概念,也大概描繪出,使用的方式。

建立 PV –> 組成 VG –> 分割出 LV

第1步,建立PV

指令為 pvcreate ,這個指令很簡單,就是

pvcreate /dev/hda1 /dev/hab …..

後面可以接,磁碟區或磁碟機,可以把後面接的裝置變成 PV 。看你要使用磁碟區,還是磁碟機都可以,不過要注意幾個地方;如果使用磁碟區,則磁碟區的系統編號必須為0x8e,可以使用fdisk 工具去做partition id的設定即可;如果使用磁碟機,則必須刪除整顆磁碟機的partition table ,怎麼做呢? 可以利用這個指令:

dd if=/dev/zero of=/dev/hde bs=512 count=1

那個/dev/hde 指的是,你要使用的磁碟機代號,大家自己視狀況調整。

第2步,組合VG

有了很多的PV 後,就可以把這些PV 組合起來,變成一個大的VG。指令是

vgcreate vgname pvname1 pvname2

第1個參數,是你要建立的邏輯磁碟機的名稱,之後的參數,就是你那很多很多的PV名稱了。這個指令的功能,就是把pvname1 , pvname2 ....組成你要的vgname。

第3步,分割出LV

有了VG 後,就可以由這個邏輯磁碟機,分割出你想要的邏輯分割區LV 了。指令為

lvcreate -n lvname -L 20G vgname

例如:
lvcreate -n testlv -L 10G testvg

,此時,你可以在 /dev/testvg 下看到一個磁碟裝置名稱testlv 。

做了以上3步驟後,你就有了一個 testlv 的邏輯分割區了,接著跟實體的分割區作業就差不多了,

mke2fs -j /dev/testvg/testlv

,你就可以把 testlv這個分割區,格式化為ext3 ,接著再把它mount 起來,就可以用了。
例如:
mount -t ext3 /dev/testvg/testlv /u01 。

建立好了之後,如何調整VG 的大小呢?

增加VG 的大小:指令->

vgextend vgname pvname1 pvname2

在電腦上新增加一顆磁碟機,或在原本電腦中的磁碟機,另切出一塊實體分割區出來,再按照PV 的建立方式,把它變成PV 後,使用這個指令,即可把 pvname1 及 pvname2…等PV 加入原有的VG 裏面,來增加原本VG 的大小。

減少VG 的大小:指令->

vgreduce vgname pvname1 pvname2

這個指令可以,讓你移除在vgname 中,沒有被使用的PV ,注意:要沒有被使用到的PV 才可以被移除,要怎麼查PV 有沒有被使用到呢?可以下 pvdisplay pvname 即可查詢PV 的使用狀況。注意那個Allocated PE 那個數字,如果是0即代表,這個PV ,沒有被使用到。

講到一半,有個題外話。PE 是什麼?這個是 physicalextentsize 這個英文字的縮寫。指的是VG 的最小儲存單位,在lvm1的規格下,一個VG 只可以含有65534個PE ,所以如果一個PE 的尺寸大小為4MB 的話,那一個VG 的最大容量即為 256GB,如果你想要建構一個比256GB大的VG ,即必須在建立VG 時,調整PE 的大小。目前使用的lvm2規格,已經沒有這個65534個PE 的限制了,所以基本上容量是不會有限制的,但如果一個VG 中含有太大量的PE ,會影響到Disk I/O 的效能,最小的PE size 為1K ,不過在2.4核心對block device 有2TB 的限制。

PE Size 的大小考量,小瑞會依據要存放檔案內容,分別設定不同的PE 大小,例如:要存文件的,我會設定比較小PE Size;如果是要存放AVI 檔,我會設定比較大的PE Size,跟空間的利用,及效能會有些關係。

也就是,如果設定一個比較大的PE Size ,例如:PE 設64MB ,但要存的每一個文字檔,都只有1MB ,每存一個檔,就用一個64MB ,就有點浪費了;反過來,如果要存的AVI 檔,每一個都超過600MB ,PE設為4MB ,那存一個600MB 的檔,所使用的block I/O 就很多,效能有點影響…所以要大要小,嗯自己拿捏...

好了,接著來看,要如何調整LV 的尺寸大小呢?

增加LV 的Size 指令:lvextend -L +3G /dev/testvg/testlv ,這樣子,就可以增加LV 的尺寸大小。partition 的空間加大了,可以直接使用lvdisplay 檢視一下,可以發現testlv 這個邏輯分割區的空間真的變大了,但是使用df 指令,卻發現檔案系統的空間,卻沒有增加,為什麼呢?因為我們沒有告訴系統,多出來的分割區要做什麼,所以,接著我們要另外下一個指令,resize2fs /dev/testvg/testlv,把剛才增加的partition 空間,轉換至檔案系統,再做一次df 檢視一下,檔案系統空間,就會發現,檔案系統的空間也同步的增加了。

再去檢視原本的檔案系統資料,並沒有因為增加空間,而被影響到,這個功能真的是很好用。

要如何減少LV 的空間呢?步驟有一點多,基本上是倒著做!
第1步,要先 umount 已掛載的LV ,在做增加時,可以是已掛載的狀態,但是如果是要減少容量,必須是卸載狀態,所以第一步先

umount /test (這個是測試LV 的掛載點)

第2步,要做 e2fsck 這個動作,先做一下磁碟檢查

e2fsck -f /dev/VolGroup00/testlv

第3步,處理檔案系統的size 縮小,使用resize2fs 這個指令

resize2fs /dev/VolGroup00/testlv 5G (指的是最後要留下容量)

第4步,接著要處理partition 的縮小,此時才可以做 lvreduce ,有2個參數可以用 -l 跟-L ,-l 是用在,你要減少多少個PE ,可以自己指定;-L 可以直接指定size ,小瑞都習慣使用-L 這個參數,比較方便一點

lvreduce /dev/VolGroup00/testlv -5G

就是把 testlv 這個邏輯分割區減少 5G 的空間,以上就是縮小LV的方法

至於LVM 的管理,還有快照的功能,不過小瑞沒在用,就懶得貼上來了,有機會再分亨這個部份,以下為小瑞自己常用的LVM 指令列表。

有關VG

vgdisplay 顯示VG
vgcreate 建立VG
vgextend 增加VG大小用
vgreduce 減少VG大小用
vgremove 刪除VG用

有關 PV

pvdisplay 顯示PV
pvcreate 建立PV
pvremove 刪除PV

有關LV

lvdisplay 顯示LV
lvcreate 建立LV
lvextend 增加LV容量
lvreduce 減少LV容量
lvremove 刪除LV

發表留言