LVM使用手冊
1 簡介
1.1 什么是LVM
LVM是 Logical Volume Manager的簡寫,它由Heinz Mauelshagen在Linux 2.4內(nèi)核上實現(xiàn),目前最新版本為:穩(wěn)定版1.0.5,開發(fā)版 1.1.0-rc2,以及LVM2開發(fā)版。與傳統(tǒng)的磁盤與分區(qū)相比,LVM為計算機提供了更高層次的磁盤存儲。它使系統(tǒng)管理員可以更方便的為應(yīng)用與用戶分配存儲空間。在LVM管理下的存儲卷可以按需要隨時改變大小與移除(可能需對文件系統(tǒng)工具進行升級)。LVM也允許按用戶組對存儲卷進行管理,允許管理員用更直觀的名稱(如sales、development)代替物理磁盤名(如sda、sdb)來標識存儲卷。
1.2 為什么使用LVM
LVM通常用于裝備大量磁盤的系統(tǒng),但它同樣適于僅有一、兩塊硬盤的小系統(tǒng)。
1.2.1 小系統(tǒng)使用LVM的益處
傳統(tǒng)的文件系統(tǒng)是基于分區(qū)的,這種方式比較直觀,但不易改變:1.不同的分區(qū)相對獨立,無相互聯(lián)系,各分區(qū)空間很易利用不平衡,空間不能充分利用。2.當(dāng)一個文件系統(tǒng)/分區(qū)已滿時,無法對其擴充,只能采用重新分區(qū)/建立文件系統(tǒng),非常麻煩;或把分區(qū)中的數(shù)據(jù)移到另一個更大的分區(qū)中;或采用符號連接的方式使用其它分區(qū)的空間。3.如果要把硬盤上的多個分區(qū)合并在一起使用,只能采用再分區(qū)的方式,這個過程需要數(shù)據(jù)的備份與恢復(fù)。
當(dāng)采用LVM時,情況有所不同:1.硬盤的多個分區(qū)由LVM統(tǒng)一為卷組管理,可以方便的加入或移走分區(qū)以擴大或者減小卷組的可用容量,充分利用硬盤空間。2.文件系統(tǒng)建立在邏輯卷上,而邏輯卷可根據(jù)需要改變大小以滿足要求。3.文件系統(tǒng)建立在LVM上,可以跨分區(qū),方便使用。
1.2.2 大系統(tǒng)使用LVM的益處
在使用很多硬盤的大系統(tǒng)中,使用LVM主要是方便管理、增加了系統(tǒng)的擴展性。在一個有很多不同容量硬盤的大型系統(tǒng)中,對不同的用戶的空間分配是一個技巧性的工作,要在用戶需求與實際可用空間中尋求平衡。用戶/用戶組的空間建立在LVM上,可以隨時按要求增大,或根據(jù)使用情況對各邏輯卷進行調(diào)整。當(dāng)系統(tǒng)空間不足而加入新的硬盤時,不必把用戶的數(shù)據(jù)從原硬盤遷移到新硬盤,而只須把新的分區(qū)加入卷組并擴充邏輯卷即可。同樣,使用LVM可以在不停服務(wù)的情況下。把用戶數(shù)據(jù)從舊硬盤轉(zhuǎn)移到新硬盤空間中去。
2 LVM構(gòu)成
LVM的結(jié)構(gòu)簡圖如下:
2.1 卷組volume group (VG)
卷組是LVM中最高抽象層,是由一個或多個物理卷所組成的存儲器池。
2.2 物理卷physical volume (PV)
典型的物理卷是硬盤分區(qū),但也可以是整個硬盤或已創(chuàng)建的Software RAID 卷。
2.3 邏輯卷logical volume (LV)
邏輯卷相當(dāng)于非LVM系統(tǒng)中的分區(qū),它在卷組上建立,是一個標準的塊設(shè)備,可以在其上建立文件系統(tǒng)。
2.4 物理塊physical extent (PE)
物理卷按大小相等的“塊”為單位存儲,塊的大小與卷組中邏輯卷塊的大小相同。
2.5 邏輯塊logical extent (LE)
邏輯卷按“塊”為單位存儲,在一卷組中的所有邏輯卷的塊大小是相同的。
2.6 總述
例子:有一個卷組VG1,它的物理塊大小為4MB。在這個卷組中為2個硬盤分區(qū):/dev/hda1與/dev/hdb1,它們分別成為物理卷PV1與PV2。物理卷將按4MB為單位分塊,如PV1與PV2分別可分為99與248塊。在VG1上建立邏輯卷,它的大小可在1至347(99+248)塊之間。當(dāng)建立邏輯卷時,會建立邏輯塊與物理塊的一一映射關(guān)系。
2.7 映射模式 (linear/striped)
在建立邏輯卷時,可以選擇邏輯塊與物理塊映射的策略:
1.線性映射-將把一定范圍的物理塊按順序分配給邏輯卷,如 LV的LE 1–99映射到PV1,LE 100–347映射到PV2。 2.交錯模式-將把邏輯塊交錯映射到不同的物理卷中,如 LV的LE 1映射為PV1的PE1,LE 2映射為PV2的PE1,LE 3映射為PV1的PE2...。這種方式可以提高邏輯卷的性能,但是采用這種方式建立的邏輯卷將不能在它們所在的物理卷中擴展。
2.8 Snapshots (快照)
LVM提供了一個非常好的特性:snapshots。它允許管理員建立一個塊設(shè)備:該設(shè)備是一邏輯卷在某一時刻凍結(jié)的精確拷貝。這個特性通常用于批處理過程(如備份)需要處理邏輯卷,但又不能停止系統(tǒng)。當(dāng)操作完成時,snapshot設(shè)備可以被移除。這個特性要求在建立snapshot設(shè)備時邏輯卷處于相容狀態(tài)。
3 LVM的一般操作
3.1 建立PV
為把一個磁盤或分區(qū)作為PV,首先應(yīng)使用 pvcreate 對其初始化,如對IDE硬盤/dev/hdb。
PV初始化命令pvcreate的一般用法為:
# pvcreate PV1 [ PV2 ... ]
#它的參數(shù)可以是整個磁盤,分區(qū),也可以是loop設(shè)備。
l使用整個磁盤:
# pvcreate /dev/hdb
這將在磁盤上建立VG的描述符。
l使用磁盤分區(qū):(使用fdisk 的t 命令把/dev/hda1的分區(qū)類型設(shè)為0x8e,然后運行)
# pvcreate /dev/hdb1
3.2 建立VG
vgcreate的一般用法為:
# vgcreate [options] VG_name PV1 [PV2 ...]
#其中的可選項包括設(shè)置VG最大支持的LV數(shù)、PE大小(缺省為4MB)等。
l在使用pvcreate 建立了PV后,可以用vgcreate 建立卷組,如有PV1、PV2分別是/dev/hda1與/dev/hdb1,使用
# vgcreate testvg /dev/hda1 /dev/hdb1
l當(dāng)使用devfs系統(tǒng)時,應(yīng)使用設(shè)備的全名而不能是Symbol Link,如對上例應(yīng)為:
# vgcreate testvg /dev/ide/host0/bus0/target0/lun0/part1/ /dev/ide/host0/bus0/target1/lun0/part1
3.3 激活VG
在被激活之前,VG與LV是無法訪問的,這時可用命令:
# vgchange -a y testvg
激活所要使用的卷組。當(dāng)不再使用VG時,可用
# vgchange -a n testvg
使之不再可用。
3.4 移除VG
在移除一卷組前應(yīng)確認卷組中不再有邏輯卷,首先休眠卷組:
# vgchange -a n testvg
然后可用vgremove移除該卷組:
# vgremove testvg
3.5 為VG增加新PV
當(dāng)卷組空間不足時,可以加入新的物理卷來擴大容量,這時可用命令vgextend,如
# vgextend testvg /dev/hdc1
其中/dev/hdc1是新的PV,當(dāng)然在這之前,它應(yīng)使用pvcreate初始化。
3.6 從VG移除PV
在移除PV之前,應(yīng)確認該PV沒用被LV使用,這可用命令pvdisplay,如:
# pvdisplay /dev/hda1
如這個PV仍在被使用,則應(yīng)把數(shù)據(jù)傳移到其它PV上。在確認它未被使用后,可用命令vgreduce把它從VG中刪除,如:
# vgreduce testvg /dev/hda1
3.7 創(chuàng)建LV
在創(chuàng)建邏輯卷前,應(yīng)決定LV使用哪些PV,這可用命令vgdisplay與pvdisplay查看當(dāng)前卷組與PV的使用情況。在已有的卷組上創(chuàng)建邏輯卷使用命令lvcreate,如:
# lvcreate -L1500 -ntestlv testvg
#將在卷組testvg上建立一個1500MB的線性LV,其命名為testlv,
對應(yīng)的塊設(shè)備為/dev/testvg/testlv。
# lvcreate -i2 -I4 -l100 -nanothertestlv testvg
#將在卷組testvg上建立名為anothertestlv的LV,其大小為100LE,
采用交錯方式存放,交錯值為2,塊大小為4KB。
如果需要LV使用整個VG,可首先用vgdisplay 查找 Total PE值,然后在運行l(wèi)vcreate時指定。如:
# vgdisplay testvg | grep "Total PE"
# lvcreate -l 10230 testvg -n mylv
將使用卷組testvg的全部空間創(chuàng)建邏輯卷mylv。在創(chuàng)建邏輯卷后,就可在其上創(chuàng)建文件系統(tǒng)并使用它。
命令lvcreate的常用方法:
# lvcreate [options] -n 邏輯卷名 卷組名 [PV1 ... ]
其中的常用可選項有:
-i Stripes :采用交錯(striped)方式創(chuàng)建LV,其中Stripes指卷組中PV的數(shù)量。
-I Stripe_size :采用交錯方式時采用的塊大小(單位為KB),
Stripe_size必須為2的指數(shù):2N ,N=2,3...9。
-l LEs :指定LV的邏輯塊數(shù)。
-L size :指定LV的大小,其后可以用K、M、G表示KB、MB、GB。
-s :創(chuàng)建一已存在LV的snapshot卷。
-n name :為LV指定名稱。
3.8 刪除LV
為刪除一個邏輯卷,必須首先從系統(tǒng)卸載其上的文件系統(tǒng),然后可用lvremove刪除,如:
# umount /dev/testvg/testlv
# lvremove /dev/testvg/testlv
lvremove -- do you really want to remove "/dev/testvg/testlv"? [y/n]: y
lvremove -- doing automatic backup of volume group "testvg"
lvremove -- logical volume "/dev/testvg/testlv" successfully removed
3.9 擴展LV
為邏輯卷增加容量可使用lvextend,即可以指定要增加的尺寸也可以指定擴容后的尺寸。如
# lvextend -L12G /dev/testvg/testlv
#將擴大邏輯卷testlv的容量為12GB。
# lvextend -L+1G /dev/testvg/testlv
#將為LV testlv再增大容量1GB至13GB。
為LV擴容的一個前提是:LV所在的VG有足夠的空閑存儲空間可用。
在為LV擴容之后,應(yīng)同時為LV之上的文件系統(tǒng)擴容,使二者相匹配。對不同的文件系統(tǒng)有相對應(yīng)的擴容方法。
3.9.1 ext2/ext3
除非內(nèi)核已有ext2online 補丁,否則在改變ext2/ext3文件系統(tǒng)的大小時應(yīng)卸載它:
# umount /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
# mount /dev/testvg/testlv /home
這里假設(shè)testlv安裝點為/home。在es2fsprogs-1.19或以上版本中包含resize2fs命令。
在LVM發(fā)行包中有一個稱為e2fsadm的工具,它同時包含了lvextend與resize2fs的功能,如:
# e2fsadm -L+1G /dev/testvg/testlv
等價于下面兩條命令:
# lvextend -L+1G /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
但用戶仍需首先卸載文件系統(tǒng)。
3.9.2 reiserfs
與ext2不同,Reiserfs不必卸載文件系統(tǒng),如:
# resize_reiserfs -f /dev/testvg/testvl
3.9.3 xfs
SGI XFS文件系統(tǒng)必須在安裝的情況下才可改變大小,并且要使用安裝點而不是塊設(shè)備,如:
# xfs_growfs /home
3.10 縮小LV
邏輯卷可擴展同樣也可縮小,但應(yīng)在縮小LV之前首先減小文件系統(tǒng),否則將可能導(dǎo)致數(shù)據(jù)丟失。
3.10.1 ext2/ext3
可以使用LVM的工具e2fsadm操作,如:
# umount /home
# e2fsadm -L-1G /dev/testvg/testvl
# mount /home
如果采用resize2fs,就必須知道縮少后卷的塊數(shù):
# umount /home
# resize2fs /dev/testvg/testvl 524288
# lvreduce -L-1G /dev/testvg/testvl
# mount /home
3.10.2 reiserfs
在縮小reiserfs時,應(yīng)首先卸載它,如:
# umount /home
# resize_reiserfs -s-1G /dev/testvg/testvl
# lvreduce -L-1G /dev/testvg/testvl
# mount -treiserfs /dev/testvg/testvl /home
3.10.3 xfs
無法實現(xiàn)。
3.11 在PV間轉(zhuǎn)移數(shù)據(jù)
若要把一個PV從VG中移除,應(yīng)首先把其上所有活動PE中的數(shù)據(jù)轉(zhuǎn)移到其它PV上,而新的PV必須是本VG的一部分,有足夠的空間。如要把PV1:/dev/hda1上的數(shù)據(jù)移到PV2:/dev/sda1上可用命令:
# pvmove /dev/hdb1 /dev/sdg1
如果在該PV之上的LV采用交錯方式存放,則這個轉(zhuǎn)移過程不能被打斷。
建議在轉(zhuǎn)移數(shù)據(jù)之前備份LV中的數(shù)據(jù)。
3.12 系統(tǒng)啟動/關(guān)閉
為使系統(tǒng)啟動時可自動激活并使用LVM,可將以下幾行添加到啟動 rc 腳本中:
# /sbin/vgscan
# /sbin/vgchange -a y
這些行將瀏覽所有可用的卷組并激活它們。要注意的是,它們應(yīng)在安裝卷組上的文件系統(tǒng)操作之前被執(zhí)行,否則將無法正常安裝文件系統(tǒng)。
在系統(tǒng)關(guān)機時,要關(guān)閉LVM,這可將以下這行添加到關(guān)機 rc 腳本中,并確保它在卸裝了所有文件系統(tǒng)后執(zhí)行:
# /sbin/vgchange -a n
4 磁盤分區(qū)問題
4.1 一個磁盤上的多個分區(qū)
LVM允許PV建立在幾乎所有塊設(shè)備上,如整個硬盤、硬盤分區(qū)、Soft RAID:
# pvcreate /dev/sda1
# pvcreate /dev/sdf
# pvcreate /dev/hda8
# pvcreate /dev/hda6
# pvcreate /dev/md1
所以在一塊硬盤上可以有多個PV分區(qū),但一般建議一塊硬盤上只有一個PV:便于管理,易于處理錯誤。避免交錯方式中性能下降。LVM不能辨別兩個PV是否在同一硬盤上,故當(dāng)采用交錯方式時,會導(dǎo)致性能更差。但在某些情況下可采用:1把已存在的系統(tǒng)合并到LVM中。在一個只有少數(shù)硬盤的系統(tǒng)中,轉(zhuǎn)換為LVM時需在在各分區(qū)之間轉(zhuǎn)移數(shù)據(jù)。2把一個大硬盤分給不同的VG使用。
4.2 Sun disk labels
僅在SUN的SPARC系統(tǒng)中有此問題。
5 建立LVM用例
在本節(jié)中,將在3塊SCSI硬盤:/dev/sda,/dev/sdb,/dev/sdc上按步建立LVM。
5.1 準備分區(qū)
首先要做的是初始化硬盤,建立PV;這將會刪除硬盤上的原有數(shù)據(jù)。在此用整個硬盤為PV:
# pvcreate /dev/sda
# pvcreate /dev/sdb
# pvcreate /dev/sdc
pvcreate在每個硬盤的起始端建立卷組描述區(qū)。
5.2 創(chuàng)建卷組
利用上面三個PV建立卷組:
# vgcreate test_vg /dev/sda /dev/sdb /dev/sdc/
然后可用vgdisplay 查看/驗證卷組的信息:
# vgdisplay
其中最重要的前三條要正確,且VS size是以上三個硬盤容量之和。
5.3 建立LV
在確定卷組test_vg正確后,就可在其上創(chuàng)建LV。LV的大小可在VG大小范圍內(nèi)任意選擇,如同在硬盤上分區(qū)。
5.3.1 建立線性方式LV
在test_vg上建立一個大小為1GB的線性方式LV:
# lvcreate -L1G -ntest_lv test_vg
5.3.2 建立交錯方式LV
在test_vg上建立一個大小為1GB的交錯方式LV,交錯參數(shù)為4KB:
# lvcreate -i3 -I4 -L1G -ntest_lv test_vg
如果使用 -i2參數(shù),則LV將僅使用test_vg中的兩塊硬盤。
5.4 建立文件系統(tǒng)
在LV test_lv創(chuàng)建后,就可在其上建立文件系統(tǒng),
如,ext2/ext3系統(tǒng):
# mke2fs /dev/test_vg/test_lv
如,reiserfs:
# mkreiserfs /dev/test_vg/test_lv
5.5 測試文件系統(tǒng)
安裝LV:
# mount /dev/test_vg/test_lv /mnt
# df
則可以通過/mnt訪問LV。
6 使用snapshot 做備份
例如我們要對卷組"test_vg"每晚進行數(shù)據(jù)庫備份,就要采用snapshot類型的卷組。這種卷組是其它卷組的一個只讀拷貝,它含有在創(chuàng)建snapshot卷組時原卷組的所有數(shù)據(jù),這意味你可以備份這個卷組而不用擔(dān)心在備份過程中數(shù)據(jù)會改變,也不需要暫時關(guān)閉數(shù)據(jù)庫卷以備份。
6.1 建立snapshot卷
一個snapshot卷可大可小,但必須有足夠的空間存放所有在本snapshot卷生存期間改變的數(shù)據(jù),一般最大要求是原卷組的1.1倍。如空間不夠,snapshot卷將不能使用。
# lvcreate -L592M -s -n dbbackup /dev/test_vg/databases
6.2 安裝snapshot卷
現(xiàn)在可以安裝該卷:
# mkdir /mnt/test_vg/dbbackup
# mount /dev/test_vg/dbbackup /mnt/test_vg/dbbackup
從上面可以看出,snapshot卷是只讀的。
當(dāng)使用XFS文件系統(tǒng)時,mount命令要使用nouuid與norecovery選項:
# mount /dev/test_vg/dbbackup /mnt/test_vg/dbbackup -o nouuid,norecovery,ro
6.3 備份數(shù)據(jù)
如采用tar向磁帶備份:
# tar -cf /dev/rmt0 /mnt/test_vg/dbbackup
6.4 刪除snapshot卷
在完成備份后,就可卸載并刪除snapshot卷。
# umount /mnt/test_vg/dbbackup
# lvremove /dev/test_vg/dbbackup
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。