天天看點

lvm(邏輯卷管理器)的介紹和常用功能流程實驗

lvm(邏輯卷管理器)的介紹和常用功能流程實驗

1) 前言

2) lvm組成和概念

3) 如何使用lvm,建立邏輯卷的流程和執行個體

4) 如何動态放大/縮小一個邏輯卷/邏輯卷組

5) 如何删除邏輯卷/邏輯卷組

6) lvm相關指令

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

轉載于:https://blog.51cto.com/wtx358/250615

繼續閱讀