天天看點

LVM磁盤管理

原文位址: [url]http://blog.onecheng.com/archives/321[/url]

linux LVM的建立和管理

LVM是Logical Volume Manager(邏輯卷管理器)的簡寫,它為主機提供了更高層次的磁盤存儲管理能力。LVM可以幫助系統管理者為應用與使用者友善地配置設定存儲空間。在LVM管理下的邏輯卷可以按需改變大小或添加移除。另外,LVM可以為所管理的邏輯卷提供定制的命名辨別。是以,使用LVM主要是友善了對存儲系統的管理,增加了系統的擴充性。 目前LVM在Linux下有兩個版本,分别是LVM 1和LVM 2,LVM2不僅僅是Linux邏輯卷管理在版本與功能上的更新,而且是架構在一個新的核心存儲子系統(DM,device-mapper)之上的。這個存儲子系統提供了一個輕量級的、可擴充的卷管理設施。除了在原有LVM卷管理功能的基礎上,Linux的邏輯卷管理将會為使用者提供更多的存儲管理方案,如鏡像、加密卷、多路徑技術。是以在本節将以LVM 2為例來詳細介紹LVM的建立與管理。

LVM相關概念和術語

LVM是建立在磁盤分區和檔案系統之間的一個邏輯層,來為檔案系統屏蔽下層磁盤分區布局,提供一個邏輯的盤卷,再在盤卷上來建立檔案系統。LVM的結構如圖1如示:

LVM磁盤管理

圖1 LVM結構圖 在上面的LVM結構圖中,涉及到了很多LVM的相關術語,那麼關于這些術語的詳細說明如下: 實體卷(physical volume,PV) 實體卷就是指硬碟分區,也可以是整個硬碟或已建立的軟RAID ,是LVM的基本儲存設備,與普通實體存儲媒體的差別是該裝置包含有LVM相關的管理參數。 卷組(volume group,VG) 卷組是由一個或多個實體卷所組成的存儲池,在卷組上能建立一個或多個“LVM分區”(邏輯卷)。 邏輯卷(logical volume,LV) LVM的邏輯卷類似于非LVM系統中的硬碟分區,它建立在卷組之上,是一個标準的塊裝置,在邏輯卷之上可以建立檔案系統。可以做這樣一個設想來了解以上三者的關系:如果把PV比做地球的一個闆塊,VG則是一個地球,因為地球是由多個闆塊組成的,那麼在地球上劃分一個區域并标記為亞洲,則亞洲就相當于一個LV。 實體塊(physical extent,PE) 實體卷以大小相等的實體塊為存儲的基本機關,同時也是LVM尋址的最小單元。 邏輯塊(logical extent,LE) 邏輯卷以大小相等的邏輯塊為存儲的基本機關,在同一個卷組中,LE的大小和PE是相等的,并且一一對應。 卷組描述區域(Volume Group Descriptor Area,VGDA) 和磁盤将包含分區資訊的中繼資料儲存在位于分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的中繼資料也是儲存在位于實體卷的VGDA中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符。系統啟動LVM時激活VG,并将VGDA加載至記憶體,來識别LV的實際實體存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來通路實際的實體位置。

建立邏輯卷

建立邏輯卷通常包括如下步驟:

  • 建立分區
  • 建立實體卷
  • 建立卷組
  • 激活卷組
  • 建立邏輯卷
  • 建立檔案系統

下面将通過一個具體的執行個體來詳細介紹建立邏輯卷的整個過程。 【執行個體1】 利用/dev/sdb、/dev/sdc、/dev/sdd這三塊磁盤建立一個卷組,再在卷組上建立兩個邏輯卷,并指定将其中一個邏輯卷的映射模式為條帶映射,實作的步驟如下:

1 、建立實體卷

建立實體卷的指令是 “pvcreate”,該指令可以将需要添加到卷組的分區或磁盤建立為實體卷。操作如下: # pvcreate /dev/sdb /dev/sdc /dev/sdd Physical volume "/dev/sdb" successfully created Physical volume "/dev/sdc" successfully created Physical volume "/dev/sdd" successfully created

2 、建立卷組

建立卷組的指令為“vgcreate”,将使用“pvcreate”建立的實體卷建立為一個完整的卷組,如下: # vgcreate vgtest /dev/sdb /dev/sdc /dev/sdd Volume group "vgtest" successfully created 其中vgcreate指令第一個參數是指定該卷組的名為“vgtest”,該名稱可以根據需要随便定義,後面接添加到該卷組的實體卷。同時在使用vgcreate 在建立卷組時,還可以指定PE的大小,需要加上-s參數來實作,PE大小範圍為8 KB 到 16GB,并且必須總是2的倍數。一個卷組裡面最多允許65534個PE存在。預設設定的PE大小為4 MB,這表示卷組上建立的所有邏輯卷都以 4 MB 為增量機關來進行擴充或縮減,是以4 MB 的PE決定了單個邏輯卷最大容量為 256 GB,若要建立更大的邏輯卷則建立卷組時需要指定更大的PE。

3 、建立邏輯卷

建立完卷組後,現在就可通過“lvcreate”指令來建立邏輯卷了,同時在建立邏輯卷的時候,還可以指定邏輯塊與實體塊映射的模式,邏輯卷的映射模式共有如下兩種:

  • 線性模式――按照順序把一定範圍内的實體塊與邏輯塊映射,這也是預設的映射方式。例如,把邏輯卷中1-25的LE映射到PV1,把26-50的LE映射到PV2上。
  • 條帶模式――将把邏輯塊以條帶的形式映射到不同的實體卷中,這種方式與前面講到的RAID 0有些類似,這種方式可以提高邏輯卷讀寫的性能。例如,将邏輯卷的LE 1映射為PV1的PE1,LE 2映射為PV2的PE1,LE 3映射為PV3的PE1。

那麼建立邏輯卷的操作如下: # lvcreate -i 3 -I 4 -L 180M -n lvtest1 vgtest Logical volume "lvtest1" created 上面的提示資訊表明成功建立了一個名為“lvtest1”的邏輯卷,其指令中的幾個參數的說明如下:

  • -i:采用條帶模式的映射方式建立邏輯卷,該參數的值用于指定所建立的邏輯卷将映射在幾個PV上。
  • -I:指定使用條帶模式時所采用塊的大小,機關為KB,其值必須是:2 N(N≥2)。
  • -L:指定建立邏輯卷的大小,機關的可以用K、M、G、T表示KB、MB、GB及TB。
  • -n:用來指定所建立的邏輯卷名稱,該名稱可以根據需要随便定義。

在使用“-i”參數指定PV的個數時,一定要确認所指定的這些PV是沒有完全被配置設定給任何邏輯卷的,否則将建立失敗,其次若這些PV的大小不等,那麼所建立的邏輯卷隻能取最小值。 下面再使用剩餘的空間來建立第二個邏輯卷,通過“vgdisplay”指令可檢視目前卷組剩餘的空間,如下: # vgdisplay — Volume group — VG Name vgtest System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 11 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 300.00 MB PE Size 4.00 MB Total PE 75 Alloc PE / Size 45 / 180.00 MB Free PE / Size 30 / 120.00 MB VG UUID 1Nbgxo-U4Ux-Y5Hb-TDzT-d5Fp-Iov7-wKFHG5 從如上的資訊可了解到“vgtest”卷組還剩餘30個空閑的PE,那麼将這些空閑的空間全部劃分給另一個邏輯卷,操作如下: # lvcreate -l 30 -n lvtest2 vgtest Logical volume "lvtest2" created 其中“-l”用于指定邏輯卷的LE數量,預設為4MB,是以此次建立的邏輯卷的大小是120M,該參數與“-L”效果一樣。

4 、建立檔案系統

在邏輯卷上建立檔案系統和在分區上建立檔案系統方法是一樣,例如,在邏輯卷上建立ext3格式的檔案系統,指令如下: # mkfs.ext3 /dev/vgtest/lvtest1 # mkfs.ext3 /dev/vgtest/lvtest2 以上就是在Linux下建立邏輯卷的整個步驟。

LVM的維護

在LVM的日常維護工作中,通常會需要對邏輯卷擴容、添加新的實體卷等操作,下面将結合【執行個體1】中所建立的邏輯卷來介紹LVM常用的管理操作,如下:

1 、激活卷組

卷組若不被激活,卷組和邏輯卷是不能被通路的,在LVM 2裡建立的卷組預設是激活的,那麼手動激活卷組的指令是: # vgchange -a y vgtest 2 logical volume(s) in volume group "vgtest" now active 其中“-a”用于設定指定的卷組是否可用,參數“y”表示激活卷組,若設定為“n”則表示暫停卷組使用。

2 、為卷組增加新的實體卷

當卷組空間不足時,可以加入新的實體卷來擴大卷組容量,這時可用“vgextend”指令來實作,如下: # vgextend vgtest /dev/sde Volume group "vgtest" successfully extended 其中“/dev/sde”是新增的實體卷,前提該裝置已經使用“pvcreate”進行了初始化了。

3 、從卷組中移除實體卷

要從一個卷組中移除一個實體卷,首先要确認要移除的實體卷沒有被任何邏輯卷正在使用,通過“pvdisplay”指令可檢視到該實體卷資訊,如下: # pvdisplay /dev/sde — Physical volume — PV Name /dev/sde VG Name vgtest PV Size 100.00 MB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 25 Free PE 25 Allocated PE 0 PV UUID ee2IFC-UHUq-Xg67-icwt-AhdJ-7kRz-JdDjiq 若其中的“Total PE”與“ Free PE”相等,表明該實體卷沒有被使用,如果某個實體卷正在被邏輯卷所使用,就需要将該實體卷的資料轉移到其它地方,然後再移除。移除實體卷的指令為“vgreduce”,如下: # vgreduce vgtest /dev/sde Removed "/dev/sde" from volume group "vgtest"

4 、在實體卷間轉移資料

當發現邏輯卷下的某個磁盤有錯誤,或有其它需求要轉移其中實體卷的資料時(如,更換大容量或更高速的實體裝置),那麼可通過“pvmove”來實作在實體卷之間轉移資料,例如,将實體卷“/dev/sdd”上的資料轉移到“/dev/sde”具體操作如下: # pvmove /dev/sdd /dev/sde /dev/sdd: Moved: 100.0% 其中/dev/sde的大小一定要大于或等于/dev/sdd,其次在使用“pvmove ”前需要用 “modprobe dm-mirror”指令來加載dm-mirror子產品,因為“pvmove”在轉移資料時需要用到該子產品,而預設系統是不加載該子產品的。

5 、擴充邏輯卷

在前面提到過,LVM提供了友善調整邏輯卷大小的功能,擴充邏輯卷大小的指令是“lvextent”,例如,将“lvtest2”的空間大小調整到160M,操作如下: # lvextend -L 160M /dev/vgtest/lvtest2 Extending logical volume lvtest2 to 160.00 MB Logical volume lvtest2 successfully resized 也可以在原來的基礎增加相應的大小,如下: # lvextend -L +40M /dev/vgtest/lvtest2 Extending logical volume lvtest2 to 160.00 MB Logical volume lvtest2 successfully resized 邏輯卷擴充後并不會馬上生效,需要使用“resize2fs”指令重新加載邏輯卷的大小,該指令隻針對ext2/ext3的檔案系統(若是reiserfs的檔案系統,則使用“resize_reiserfs”指令),如果該邏輯卷正在使用中,就應該先将該邏輯卷解除安裝後再執行“resize2fs”指令,操作如下: # umount /dev/vgtest/lvtest2 # resize2fs /dev/vgtest/lvtest2 resize2fs 1.35 (28-Feb-2004) The filesystem is already 163840 blocks long. Nothing to do! # mount /dev/vgtest/lvtest2 /mnt/lvtest2/ 以上這些操作可以通過“ext2online”指令直接來實作,這樣就不用做解除安裝邏輯卷等操作了,如下: # ext2online /dev/vgtest/lvtest2 ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b

6 、删除邏輯卷

删除邏輯卷前首先需要将其解除安裝,其指令是“lvremove”,如下: # lvremove /dev/vgtest/lvtest2 Do you really want to remove active logical volume "lvtest2"? [y/n]: y Logical volume "lvtest2" successfully removed 其中輸入“y”确認确認删除該邏輯卷。

7 、移除卷組

在移除卷組前首先要确認該卷組中已沒有任何的邏輯卷了,或者可使用“vgchange”手工将卷組停止,移除卷組的具體操作如下: # vgremove vgtest Volume group "vgtest" successfully removed

8 、删除實體卷

在删除實體卷前,必須确認該實體卷已從卷組中移除了,删除實體卷的指令是“pvremove”,如下: # pvremove /dev/sde Labels on physical volume "/dev/sde" successfully wiped 除此之外,LVM還可以提供snapshot(快照)等功能,其snapshot能夠快速的備份目前邏輯卷中的資料,進而大大減輕備份資料的負擔,隻是目前來說技術并不是很成熟。

轉載于:https://blog.51cto.com/mibon/142454

繼續閱讀