1) 前言
一直想寫一個簡單的lvm方面的文章,可以作個背忘,主要以流程和實例為主,希望文章能起到拋磚引玉的作用.LVM=(Logical Volume Mamager)邏輯卷管理器,LVM最先是用在IBM AIX系統上,它的最大作用是可以動態分配磁盤分區,並且可以讓多個分區或者物理硬盤作為一個邏輯卷(相當於一個邏輯硬盤).這種機制可以讓磁盤分區容量劃分變得很靈活.
我們先舉個簡單例子.比如我們有一個硬盤/dev/hda,分了3個主分區:hda1,hda2,hda3,後面磁盤空間沒有劃分,分別對應的掛載點是/boot,/,/home,如果我們的/home空間不夠了,怎麼辦?傳統的方法是在未劃分的空間中分割一個分區,掛載到/home下,並且把hda3的內容復制到這個新分區上.或者把這個新分區掛載到另外的掛載點上,然後在/home下創建鏈接,鏈接到這個新掛載點.
這兩種方法都不大好,第一種方法浪費了hda3,並且如果後面的分區容量小於hda3怎麼辦?第二種方法不大浪費容量,但是每次要額外創建鏈接,比較麻煩.那麼,如果用lvm呢?lvm的好處在於,可以動態放大一個邏輯卷(相當於一個邏輯分區),也就是說,hda3如果是一個邏輯分區,比如/dev/rootvg/lv3,那麼lv3可以被動態放大.這樣就解決了動態容量調整的問題.當然,前提是系統已設定好lvm支持,並且需要動態縮放的掛載點對應的設備是邏輯卷.
在這裡,我所有例子都是基於RHEL 4/CentOS 4.x和LVM2的。
2) lvm組成和概念
這裡參考了IBM 林彥明(Alex Lin)的>)
PV(Physical Volume) 物理卷。可以是單獨磁盤,也可以是硬盤分區
VG(Volume Group) 卷組。是PV的組合,可以看成單獨的邏輯磁盤
LV(Logical Volume) 邏輯分區。相當於物理分區的/dev/hdaX
PE(Physical Extent) 物理范圍。VG單元,類似於RAID的條帶大小。
當多個PV組成一個VG時,LVM會在所有PV上做類似格式化的動作,
將每個PV切成一塊塊的空間,這一塊塊的空間就稱為PE, 通常是4MB。
LE(Logical Extent) 邏輯范圍。LV的組成單位。大小為PE的倍數(通常為1:1)
那麼,最常用的3個名詞和意義列表如下:
名詞 意義 操作系統對應設備
PV 物理卷 /dev/hdaX
VG 卷組 /dev/ (通常是個目錄)
LV 邏輯卷 /dev//
如果我們要使用lvm,順序是pv->vg->lv。
就是說,我們先創建一個物理卷(對應一個物理硬盤分區或者一個物理硬盤),然後把這些分區/硬盤加入一個卷組中(相當於一個邏輯上的大硬盤),然後我們在這個大硬盤上劃分分區lv(邏輯上的分區,就是邏輯卷)
這樣,我們把lv邏輯卷格式化以後,就可以像使用一個傳統分區那樣,把它掛載到一個掛載點上,需要的時候,這個邏輯卷可以被動態縮放。
我們可以用一個長方蛋糕來說明這個對應關系。物理硬盤相當於一個長方蛋糕,我們把它切割成許多快,每個小塊相當於一個pv,然後我們把其中的某些pv重新放在一起,抹上奶油,那麼這麼些個pv的組合就是一個新的蛋糕,也就是vg。最後,我們切割這個新蛋糕vg,切出來的小蛋糕就叫做lv。
有一點需要注意,就是/boot區不可以是lvm,因為引導程序lilo/grub並不能識別lvm,就像/boot同樣不可以是軟raid設備一樣。
3) 如何使用lvm,創建邏輯卷的流程和實例
好了,我們來創建一個lv。
比如說,在一個物理硬盤/dev/hda上,我們需要將/dev/hda5,/dev/hda6作為pv
1 fdisk劃分hda5,hda6,並且將這兩個分區的標志(鍵入t改)改為(0x)8e
然後用partprobe通知OS磁盤分區的變化
2 pvcreate /dev/hda5 /dev/hda6(-s xxM可設定PE大小)
創建pv hda5,hda6
3 vgcreate rootvg /dev/hda5 /dev/hda6
將hda5,hda6加入邏輯卷組rootvg中
4 lvcreate -L 100M -n lv1 rootvg
從我們的rootvg中,創建一個100M的邏輯卷lv1
5 mkfs.ext3 /dev/rootvg/lv1
格式化我們的lv1,文件系統用ext3
6 mkdir /mnt/lvm;mount /dev/rootvg/lv1 /mnt/lvm
將lv1掛載到/mnt/lvm下
好了,這樣一個創建lv的例子完成
4) 如何動態放大/縮小一個邏輯卷/邏輯卷組
我們如何放大lv?比如上面的lv1?流程:
1 lvextend -L+200M /dev/rootvg/lv1
將lv1增加200M
2 ext2online /dev/rootvg/lv1
讓lv1容量更改立即生效
減小lv,網上很多文章介紹的是ReiserFS,這裡我們是ext3文件系統,如果我們需要減少50M:
1 umount /mnt/lvm
這裡,需要先卸載分區
2 mke2fs -n /dev/rootvg/lv1
計算lv1的block數
這裡一定要加-n參數,這是計算lv1的block數,而不是格式化分區,注意。
並且注意,從MB->KB這些的計算,都是乘1024,不是1000,這是個細節問題
3 計算減少50M後的block數。從mke2fs -n /dev/rootvg/lv1,我們可以得出2個需要的信息:
Block size和blocks,這兩個數的乘積就是分區大小A(單位字節),
我們把需要減小的容量50M換算成字節B,然後A-B的結果除以Block size,就是剩余的block數
4 resize2fs -f /dev/rootvg/lv1 剩余的block數
調整文件系統大小
5 lvreduce -L-50M /dev/rootvg/lv1
調整lv分區大小,減小50M
6 重新mount,df察看一下容量的減小
動態加大VG:
這裡我們新增一個PV並加入VG
1 fdisk增加一個(0x)8e標志的分區/dev/hda7
2 vgextend rootvg /dev/hda7
好了,vg增大了
縮小邏輯卷組VG:
1 搬移PV中的資料(只限於同一VG中)
#pvmove [-n ] []
如
#pvmove /dev/hda5 /dev/hda6
將VG中pv hda5的內容搬移到hda6中
pvmove /dev/hda5(也可以這樣,lvm決定hda2的內容被復制到哪裡)
2 vgreduce rootvg /dev/hda5
把vg hda5移除
5) 如何刪除邏輯卷/邏輯卷組
刪除VG流程:
1 umount /掛接點
2 lvremove /dev/rootvg/lv1
移除邏輯卷,這裡是lv1
3 vgchange -a n rootvg(關閉rootvg)
4 vgremove rootvg
移除rootvg
6) lvm相關命令
這個表格,你可以在RHCE_Study_Guide.pdf上找到
Physical Volume Volume Group Logical Volume
scan pvscan vgscan lvscan
create pvcreate vgcreate lvcreate
display pvdispaly vgdisplay lvdisplay
remove pvremove vgremove lvremove'