天天看點

Linux LVM邏輯卷管理

卷組volume group (VG) 

卷組是LVM中最高抽象層,是由一個或多個實體卷所組成的存儲器池。 

實體卷physical volume (PV) 

典型的實體卷是硬碟分區,但也可以是整個硬碟或已建立的Software RAID 卷。 

實體塊physical extent (PE) 

實體卷按大小相等的“塊”為機關存儲,塊的大小與卷組中邏輯卷塊的大小相同。 

邏輯塊logical extent (LE) 

邏輯卷按“塊”為機關存儲,在一卷組中的所有邏輯卷的塊大小是相同的。

邏輯卷logical volume (LV) 

邏輯卷相當于非LVM系統中的分區,它在卷組上建立,是一個标準的塊裝置,可以在其上建立檔案系統

線性映射 

線性映射-把一定範圍的實體塊按順序配置設定給邏輯卷,如LV的LE 1-99映射到PV1,LE 100-347映射到PV2。

交錯模式 

交錯模式-将把邏輯塊交錯映射到不同的實體卷中,如 LV的LE 1映射為PV1的PE1,LE 2映射為PV2的PE1,LE 3映射為PV1的PE2.。這種方式可以提高邏輯卷的性能,但是采用這種方式建立的邏輯卷将不能在它們所在的實體卷中擴充。

建立LVM卷,從下到上建立,示意圖如下

第一步建立實體檔案系統

首先我們要建立檔案系統

指令: fdisk /dev/sdb   ————  建立實體卷并修改ID為8e

第二步初始化實體卷為PV

建立PV,添加幾個檔案系統,然後再添加一個RAID檔案系統

指令:pvcreate /dev/sdb{5,6,7,8,9}   ————   添加檔案系統到PV

      pvcreate /dev/md0              ————   添加raid檔案系統到PV

  pvs,pvdisplay                 ————   檢視系統現有PV

第三步建立卷組VG

添加PV到卷組,建立VG卷組

指令:vgcreate  [-s=16m]     test_vg      /dev/sdk1  /dev/sdl1

              指定PE大小  VG卷組名   要添加到VG中的PV

使用man幫助看一下使用方法

看上面的例子,我們添加PV到卷組中建立VG

指令:vgcreate vg0 /dev/sdb{5,6,7,8,9} /dev/md0

      vgs,vgdisplay

注釋:[-s=16m] 裡面的内容可選,修改預設的PE單元大小,預設為4M,最大一個卷組是256G,修改預設單元為16M,最大的卷組單元是1024G

指令:vgdisplay testvg | grep "Total PE"

看看預設的PE大小為4M,PV個數為6個,VG的總大小為6.7.G

其他VG卷組的一些操作

激活VG 

在被激活之前,VG與LV是無法通路的

用man幫助看一下

指令:vgchange -a y vg0  ———— 激活vg0卷組

當不再使用VG時,休眠了vg0卷組 

指令:vgchange -a n vg0  ———— 使之不再可用

移除VG 

在移除一卷組前應确認卷組中不再有邏輯卷 

指令:vgchange -a n vg0    ———— 休眠卷組 

vgremove  vg0        ———— 移除該卷組

為VG增加新PV 

當卷組空間不足時,可以加入新的實體卷來擴大VG卷組容量,這時可用指令vgextend 

pvcreate  /dev/sdb15 ———— 初始化sdb15為PV

vgextend  vg0  /dev/sdb15 ———— 把sdb15加入到卷組vg0中 

其中/dev/sdb15是新的PV,當然在這之前,它應使用pvcreate初始化

從VG移除PV 

在移除PV之前,應确認該PV沒用被LV使用

指令:pvdisplay  /dev/sdb15  ———— 檢視pv有沒有使用 

如這個PV仍在被使用,在确認它未被使用後,可用指令vgreduce把它從VG中删除 

指令:vgreduce  vg0  /dev/sdb15  ———— 從vg中删除pv

如果所在PV上有資料,則應把資料傳移到其它PV上

注釋:若要把一個PV從VG中移除,應首先把其上所有活動PE中的資料轉移到其它PV上,而新的PV必須是本VG的一部分,有足夠的空間,如要把PV1:/dev/md0上的資料移到PV2:/dev/sdb6上可用,建議在轉移資料之前備份LV中的資料,如果在該PV之上的LV采用交錯方式存放,則這個轉移過程不能被打斷。

指令:pvmove /dev/md0 /dev/sdb6

第四步建立LV邏輯卷

lvcreate指令的常用方法和參數: 

lvcreate  [options]  -n  邏輯卷名  卷組名 [PV1...] 

-i  Stripes :采用交錯(striped)方式建立LV,其中Stripes指卷組中PV的數量。 

-I  Stripe_size :采用交錯方式時采用的塊大小(機關為KB),Stripe_size必須為2的指數:2N ,N=2,3...9

-l  LEs :指定LV的邏輯塊數。 

-L  size :指定LV的大小,其後可以用K、M、G表示KB、MB、GB。 

-s  :建立一已存在LV的snapshot卷。 

-n  name :為LV指定名稱。

看看man幫助如何建立LV

在VG卷組上建立LV邏輯卷

指令:lvcreate  -L 500M  -n lv0  vg0

           指定LV大小    LV名稱   卷組VG名稱

檢視整個卷組VG總大小6.7G,剩餘的空間為6.21G

指令:vgs

格式化LV

指令:mkfs.ext3  /dev/vg0/lv0

檢視一個lv0塊裝置

删除LV 

為删除一個邏輯卷,必須首先從系統解除安裝其上的檔案系統,然後可用lvremove删除,如: 

umount /lv1               先解除安裝LV檔案系統 

lvremove /dev/vg0/lv1     移除lv1邏輯卷

挂載lv0并建立檔案

下面最關鍵的來了

擴大LV

步驟如下:

首先增加邏輯卷容量(lvextend)

線上(脫機)增加ext3檔案系統(resize2fs)

檢視man幫助

檢視lv擴充後的VG卷組剩餘空間

指定擴容後的尺寸: lvextend -L 2G /dev/vg0/lv0 

将擴大邏輯卷lv0的容量為2GB。

指定要增加的尺寸: lvextend -L +512M  /dev/vg0/lv0 

将為LV v0再增大容量1GB至1.5GB。

注釋:為LV擴容的一個前提是,LV所在的VG有足夠的空閑存儲空間可用。 

在為LV擴容之後,應同時為LV之上的檔案系統擴容,使二者相比對。對不同的檔案系統有相對應的擴容方法。

擴充了LV後,重新挂載,檢視大小,看到目前的LV大小并沒有增大,那又該怎麼辦呢?

注釋:ext2/ext3除非核心已有ext2online 更新檔,否則在改變ext2/ext3檔案系統的大小時應解除安裝它

再次檢視的時候我們可以看到容量大小已經是擴充後的大小了

縮小LV(這個比較麻煩)

解除安裝檔案系統,使其脫機進行操作(umount)

檢查檔案系統(e2fsck)

縮小檔案系統(resize2fs),指定縮小後的容量

縮小LV,減少卷容量(lvreduce),指定縮小後的容量

使用man 幫助看一看lvreduce的用法

注釋:邏輯卷可擴充同樣也可縮小,但應在縮小LV之前首先減小檔案系統,否則将可能導緻資料丢失。 

下面來縮小lv0的容量,現容量為800M容量,我要縮小到500M

指令:umount /lv0

指令:e2fsck -f /dev/vg0/lv0

縮小檔案系統(resize2fs)

指令:resize2fs /dev/vg0/lv0  500M

縮小LV,減少卷容量(lvreduce)

指令:lvreduce -L 500M /dev/vg0/lv0

挂載lv0檔案系統并檢視其大小

系統啟動激活

在RHEL 5以後都會自動激活LVM,如下,在系統啟動的時候會自動激活的

如果沒有激活的話請做如下操作:

系統啟動/關閉 

"為使系統啟動時可自動激活并使用LVM,可将以下幾行添加到啟動 rc 腳本中: 

/sbin/vgscan 

/sbin/vgchange -a y 

這些行将浏覽所有可用的卷組并激活它們。要注意的是,它們應在安裝卷組上的檔案系統操作之前被執行,否則将無法正常安裝檔案系統。 

"在系統關機時,要關閉LVM,這可将以下這行添加到關機 rc 腳本中,并確定它在卸裝了所有檔案系統後執行:/sbin/vgchange -a n

     本文轉自 wqmsl 51CTO部落格,原文連結:http://blog.51cto.com/wqmsl/471784,如需轉載請自行聯系原作者

繼續閱讀