歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux中LVM2原理及制作LVM2

Linux中LVM2原理及制作LVM2

日期:2017/3/1 12:09:02   编辑:關於Linux

Linux中LVM2原理及制作LVM2

一、LVM原理

【MD】:Multi Device 多設備

Mdadm是一個用戶空間工具,是RAID的管理工具,與真正的RAID工作沒有太大關系。真正的RAID集成在linux內核中

【DM】Device Mapper設備映射也是linux中一種常用的管理機制

DM 與MD近似,也能夠提供一種邏輯設備

DM比MD的功能要強大。因為DM不僅僅能提供MD的RAID的功能,它還是邏輯卷(LVM2)基礎,同時,在邏輯卷的基礎上我們也能實現RAID0,RAID1。這樣的功能。所有DM與MD中有某些功能是重疊的,但並不完全重疊。所以,我們通常使用MD做RAID用DM做LVM2

\

上圖為DM的內核架構。即DM是怎麼來工作的。

DM像MD一樣也是有一個核心模塊,和許多子模塊組成的。例如MD,MD的核心有RAID0,RAID1,RAID5,RAID1+0等,由多個子模塊完成不同的級別。DM也是有多個子模塊完成不同的組織方式。

例如:

linear:有點類似Jbod。能夠將多個磁盤的存儲空間拼接在一塊,當做一個磁盤來使用。

mirror:類似於鏡像。

Snapshot:快照,向虛擬機一樣,能夠保留數據在做快照那一刻時的狀態。快照,也可以說是訪問同一條數據的另外一條路徑。(主要用途是數據備份)

Multipath:多路徑。多路徑需要借助於DM模塊來配置,能夠實現數據存儲設備的尋路能夠通過多跟不同線來完成。

RAID:只是為了避免硬件損壞而導致業務終止或數據損失的。並不能保證人為錯誤的操作,導致數據損失。說以通常即使有RAID後數據依然要做備份。

DM除了快照外,還支持動態縮減磁盤大小。

比如:我們有多快物理磁盤,DM能夠將這多個磁盤組織成一個大的邏輯設備,如果以後發現內存不夠可以再添加一塊硬盤擴大設備,如果後來發現空間太大,也可以撤掉一塊硬盤縮小空間。如下圖:

\

注意:這個邏輯設備只是相當於一個擴展分區,我們在這個擴展分區上可以創建新的分區,因此,我們要想在這個邏輯設備上使用存放數據,就必須在這個邏輯設備上創建邏輯分區,這個邏輯分區就是真正可以擴大縮小的一個分區。如下圖

\

【PV】:Physical Volume物理卷

【VG】:Volume Group卷組

【LV】:Logical Volume邏輯卷

VG(卷組)的邊界大小取決於PV(物理卷)組合的大小。

雖然PV組合成了多個VG但是,要真正使用就要劃分LV(邏輯卷),在VG上可以劃分多個LV,但這多個LV的大小加起來的和不能超過VG,如果發現VG不夠用了,可以增加PV(物理卷),如果LV中空間不足可以擴大LV。

對卷創建快照,實際上就是對邏輯卷創建快照,而快照卷必須和邏輯卷處於同一個卷組中。也就意味這,如果你要打算對某個LV邏輯卷創建快照,就必須在同一個卷組中預留出空間給其中的某個邏輯卷創建快照卷。

為什麼能夠實現VG的擴展以及LV的擴展,其實吧PV放入VG時就要把PV這個物理卷的所有空間劃分成一個物理塊,及一個個存儲單元。 這個塊不是文件系統塊,而是PE(PhysicalExtend物理盤區),只要物理卷加入VG後,新加卷中劃分的PE一定是和VG原因的PE大小相同。說以在創建VG時要制定VG所使用多大的PE。

【PE】(Physical Extend) 物理盤區,簡稱盤區

所以VG卷組中就是由一大堆的PE組成。那麼LV邏輯卷的創建就是由VG分給LV多少個PE。那麼LV的大小取決於VG分給了LV多少個PE。而在LV上這些PE就叫做LE(LoglcalExtend邏輯盤區)。所以LV上的擴展就相當於添加幾個PE,就能達到擴展PE的目的。

\

如果將邏輯卷建立在RAID的基礎上使用RAID1+0那麼,即使硬件有損壞,也不會對LVM的性能有影響,這樣既可以保證數據的安全,也能擴大盤區。

二、創建LVM

【操作系統:】紅帽6.3

【相關命令:】

pvcreate:將物理卷創建為pv

vgcreate:將pv組合成vg

lvcreate:在vg上創建lv

那麼首先我們要創建VG

這裡例子中用創建一個10G的vg為例。

首先要創建一個10G的vi我們可以用10個1G的構成也可以使用一個2G,一個3G,一個5G的pv夠成。

為了模擬,這裡使用磁盤分區來模擬硬盤去創建vg

首先准備2,3,5G的分區個一個。來模擬三塊硬盤

創建分區可以使用fdisk來創建,本文檔不做創建分區演示,詳情請見日志《linux中RAID的創建方法》

\

如圖:這裡已經創建好了sdb10為2G,sdb11為3G,sdb12為5G為了後面的其他演示,這裡還另外創建了一個7G的sdb13。

注意:創建完成後要修改分區類型為Linux LVM,其Linux LVM在本系統中的類型編號為8e。

然後

# partprobe /dev/sdb

重讀sdb分區表,如果失敗可以使用partx -a /dev/sdb來重讀

\

輸入:cat /proc/partitions來驗證是否可以使用該分區。

#cat /proc/partitions

\

然後將這些分區,也就是物理卷創建為pv

第一步:創建PV

#pvcreate/dev/sdb{10,11,12,13}

將sdb10,sdb11,sdb12,sdb13創建為pv

\

使用pvs能查看當前系統上有哪些pv

#pvs

\

這裡就可以看見我們剛剛已經創建好了的pv,其中sda2是系統自己之前創建的。

上面的這些設備有些誤差,這些誤差只要在20%之內都是正常的。

使用pvdisplay可以查看pv的詳細信息,要想看其中某個pv的信息信息可以加上設備名稱

#pvdisplay /dev/sdb10

\

第二步、創建vg

創建vg使用vgcreate命令

#vgcreate myvg /dev/sdb{10,11,12}

將sdb10,sdb11,sdb13創建成一個vg名稱為myvg

\

可以使用vgs來查看系統上的vg設備

#vgs

\

其中vg_gdy是系統自己之前創建的。;myvg是我們剛才創建的vg

使用vgdisplay可以查看vg的詳細信息

#vgdisplay /dev/myvg

\

這裡可以看到myvg的大小為10.02G,剛好和之前我們創建的2g,3g,5g的pv的空間大小和。

這裡可以看到myvg的pe大小為4mb,已經一共包含了多少個pe即【total PE】,目前空閒的pe【Free PE 】

在創建vg時使用-s可以指定盤區PE的大小。

刪除vg可以使用vgremove

#vgremove myvg

可以刪除剛才創建的myvg

\

這裡使用vgs就已經找不到剛才創建的myvg了

現在來創一個pe大小為8MB的vg

#vgcreate myvg -s 8M /dev/sdb{10,11,12}

\

使用vgdisplay 查看myvg的詳細信息

#vgdisplay myvg

\

這裡已經可以看到PE的大小為8M

縮減vg,注意,縮減vg的過程就相當於拿掉了一個pv(物理卷)。如果剛好拿掉的那個vg上有數據,那麼就會損壞這套系統。那麼一般在縮減vg時都要先使用pvmove將這個pv裡面的數據移動到其他設備上。例如現在要移除sdb11這個pv那麼就要先使用pvmove,然後在使用,vgreduce移除sdb11這個設備

將sdb11上的數據移動到其他設備上

#pvmove /dev/sdb11

\

由於這裡並沒有在pv上創建邏輯分區,當前mypv上沒有數據所以這裡移除時提示沒有數據。那麼接下來就從myvg中可以移除這個pv

移除sdb11

# vgreduce myvg/dev/sdb11

\

使用vgs再次查看vg的大小

#vgs

\

現在可看到vg的大小已經有10G縮減一個3G的sdb11後只有7G了

使用pvs查看

#pvs

\

此時的sdb11已經不屬於任何一個vg了

當一個pv不屬於任何一個vg時 就可以使用pvremove來刪除該pv

刪除sdb11

#pvremove /dev/sdb11

\

再次輸入pvs就已經找不到之前的sdb11了

擴展myvg

#vgextend myvg/dev/sdb13

將之前已經創好了的sdb13添加到myvg中

\

然後使用vgs查看,可以看到之前縮小到7G的myvg添加一個7G的sdb13的pv後大小變為14G

注意:一旦將一個pv加入到已經存在的vg中後,該pv上的物理盤區PE大小會自動確定,保持和vg中物理盤區大小一致。

查看sdb13的物理盤區大小

#pvdisplay /dev/sdb13

\

可以看到該pv上的物理盤區大小和之前vg上的物理盤區大小一樣都是8M

第三步、在vg上創建lv

創建一個50M左右的lv(邏輯卷)

#lvcreate -L 50M-n testlv myvg

即:在myvg上創建一個50M大小的lv名稱為testlv

\

使用lvs可以查看系統上的lv

#lvs

\

這裡可以看到我們創建的testlv實際大小為56M,這是因為PE大小的原因,系統必須按照整個PE去給lv分配大小,所以這裡testlv的大小必須是PE的整數倍。

使用lvdisplay可以查看lv的詳細信息

#lvdisplay /dev/myvg/testlv

\

使用mke2fs為testlv創建文件系統

#mke2fs -j/dev/myvg/testlv

\

#掛載textlv到/ftpftp/gandian/gz2目錄下面

#mount /dev/myvg/testlv /ftpftp/gandian/gz2

\

現在,testlv已經掛載,可以使用了。

使用mount查看掛載信息

#mount

\

這裡我們可以看到掛載的testlv是/dev/mapper/myvg-testlv,其實/dev/mapper/才是真正的設備文件,在/dev/myvg/testlv只是個鏈接文件。

#ls -la /dev/myvg/testlv

\

移除lv前lv不能處於掛載狀態,

卸載testlv

#umount /dev/myvg/testlv

\

移除testlv

#lvremove /dev/myvg/testlv

\

這裡會提示你該設備上也許有文件,是否確定移除,輸入y即可

#lvs

\

剛才的textlv就已經找不到了。

這裡lv的創建以及基本操作就完成了。

第四、擴展lv

首先,創建分區的過程實際就是創建物理邊界的過程。給分區創建文件系統,就相當於在這個分區上創建邏輯邊界。實際上邏輯邊界是緊臨物理邊界的。那麼如果要擴展一個lv首先要擴展其物理邊界,然後在擴展其邏輯邊界也就是文件系統邊界。反之縮減一個lv就要先縮減邏輯邊界(即文件系統邊界),然後再縮減物理邊界。

\

一般,擴展風險小,縮減風險大。擴展和縮減的步逐不能搞反。否則會損壞文件系統。

先創建一個2G的邏輯卷lv名稱為testlv

# lvcreate -L 2G -n testlv myvg

\

格式化testlv

# mke2fs -j /dev/myvg/testlv

\

掛載testlv

# mount /dev/myvg/testlv /ftpftp/gandian/gz2

\

查看掛載信息

#mount

\

拷貝一個文件到該目錄下面

# cp /etc/inittab /ftpftp/gandian/gz2

\

查看磁盤信息

#df -lh

\

可以看到該testlv大小為2G,那麼現在我們將它擴展到5G

第一步:先擴大lv邏輯邊界

# lvextend -L 5G/dev/myvg/testlv

\

注意:這裡擴展之前一定要確保vg中有足夠的空間可用。

分別使用df -lh 和lvs查看比較

\

可以發現,此時testlv的大小已經擴展到5G的,但掛載上的信息依然顯示2G,這裡是因為文件系統還沒有擴展的原因。也就是邏輯邊界還沒有擴展。

第二步:擴展邏輯邊界(即;擴展文件系統邊界)

# resize2fs -p /dev/myvg/testlv

\

這裡就是將文件系統擴展到最大可用范圍。

現在使用df -lh 和lvs查看比較

\

這裡已經都顯示5G了,即擴展完成。

所以,擴展邏輯卷,並不影響其中原有文件的使用,並且風險非常小,並且這個文件系統就算處於掛載狀態,不用卸載任然可以擴展。

第五、縮減lv

上面已經再擴展lv中解釋過,縮減lv的次序和擴展lv的次序相反。先要縮減邏輯邊界,可以使用resize2fs。

注意:縮減邏輯卷的風險非常大。

第一、 一定不要在線縮減,得先卸載;

第二、 確保縮減後的空間大小依然能存儲原有的所有數據;

第三、 在縮減之前應該先強行檢查文件系統,確保文件系統處於一致性狀態。

文件系統縮減完成後可以使用lvreduce去縮減lv(即:邏輯邊界)大小。

這裡示例為將剛才的5Gtestlv縮減到3G

第一步:卸載testlv

#umount /dev/myvg/testlv

\

X卸載完成後可以使用mount來檢查。

第二步:強行檢查testlv的文件系統

# e2fsck -f /dev/myvg/testlv

\

檢查後沒問,就可用繼續下一步:

第三步:縮減文件系統邊界到3G

# resize2fs /dev/myvg/testlv 3G

\

第四步:縮減testlv的物理邊界到3G

# lvreduce -L 3G /dev/myvg/testlv

\

這裡提示的是,可能會損壞文件,如果損壞文件,責任自負,這裡輸入y即可

沒問題後可以掛在該設備

第五步:掛載testlv

# mount /dev/myvg/testlv /ftpftp/gandian/gz2

\

掛載後可以使用ls查看文件,發現之前拷貝的文件依然存在,沒有損壞。

使用df –lh 和lvs可以查看testlv的信息

\

顯示testlv的磁盤大小為3G,即:lv的縮減成功。

第六、創建lv快照卷

本次示例將以之前testlv為例,為testlv創建快照卷。

注意:由於快照卷一般是不許修改,那麼創建快照卷的同時一般制定為只讀的方式創造。

創建快照卷依然使用lvcreate 不過要使用參數-s來指定創建的為快照卷,-p可以指定權限。

注意:快照卷必須和源卷在同一個卷組中。快照卷的主要作用是備份,那麼在創建快照卷後,備份完成後。一般快照卷就沒有意義了。可以刪除。

快照卷的生命周期為整個數據時長:在這段時長內,數據的增長量不能超出快照卷大小:如果超出了快照卷的大小,那麼文件的變化數據就超出了快照卷的大小。那些變化的數據就不能存在快照卷中。這種情況只要發生,那麼快照卷就會放棄所有操作,並且自我損壞。這樣,你之前的備份就會掛掉。為了安全快照卷的大小可以和原卷的大小一樣大。這樣數據量再大,也不可能超出原卷大小,不過一般不建議這麼做。

給textlv創建一個50M的快照卷

# lvcreate -L 50M -ntestlv-snap -s -p r /dev/myvg/testlv

\

使用lvs可以查看快照卷

#lvs

\

掛載快照卷到/ftpftp/gandian/kz/

# mount /dev/myvg/testlv-snap /ftpftp/gandian/kz/

\

掛載完成後可以發現快照卷中文件和之前的testlv目錄下的文件一樣。

\

例如現在在testlv中創建一個文件可以發現testlv-snap快照卷中的文件不會更改。

\

備份快照卷

# tar -jcf /ftpftp/gandian/gz2.tar.bz2 /ftpftp/gandian/kz/

\

查看備份文件的信息

# tar -jtfgz2.tar.bz2

\

卸載快照卷

# umount /dev/myvg/testlv-snap

\

刪除快照卷

# lvremove /dev/myvg/testlv-snap

\

刪除快照卷後可以使用lvs驗證

到這裡快照卷的創建及備份就演示完畢了。

---附加----------------------------------------------------

Lvm詳解

【pv】Physical Volume 物理卷

【vg】Volume Group VG卷組

【lv】logical Volume邏輯卷

創建pv及查看pv相關命令

pv :注意pv是由磁盤分區構成,分區格式為(8e(linux))

【pvcreate】創建pv

例如:

pvcreate/dev/sda1 /dev/sda2 //級可以將sda1和sda2設備創建稱為pv設備

【pvremove】刪除pv

【pvscan】掃描pv(掃描系統上有多少個pv物理磁盤)

【pvdisplay】查看系統上pv的詳細信息

【pvs】查看當前系統上的pv設備(簡單查看)

【pvmove】移動pv

vg:注意:vg是由pv構成構成後對系統看來相當於一個磁盤

【vgcreate】創建vg將pv創建為vg

例如:

vgcreatemyvg /dev/sdb1 /dev/sdb2 //將已經用pv創建好了的磁盤sdb1和sdb2創建成vg名稱為myvg

參數:

【-s #】指定盤區大小(PESize)默認盤區大小為4MB

例如:

gcreate-s 8M myvg /dev/sdb{5,6} //創建名稱為myvg 使用pv已經創建好了的設備sdb5,sdb6構成,盤區PE大小為8M

【vgremove】移除vg

例如: #vgremovemyvg //將myvg刪除

【vgmove】移動,把物理盤區移動到其他設備上 #pvmove/dev/sdb5 //將物理盤區sdb5上的數據移走(方便之後卸載該物理盤區)

【vgdisplay】查看vg設備的詳細信息

【vgs】查看vg設備的基本信息

【vgscan】掃描系統上有多少個vg設備

【vgreduce】縮減vg #vgreduce myvg /dev/sdb5 //將myvg設備上的sda5移除(即myvg的空間會縮小)

#pvremove/dev/sdb5(接著可以將pv磁盤設備sdb5移除)

【vgxtend】擴展vg #vgextendmyvg /dev/sdb7 //將myvg設備擴展個pv的磁盤sdb7

#pvcreate/dev/sdb7(在上面之前要先創建)

lv :注意:lv是屬於vg的,需要在vg中創建

【lvcreate】創建lv需要在vg上創建

參數:

【-n】:指定名稱

【-L】:指定空間大小

例如:lvcreate -L 50M -n testlv myvg //在myvg中創建一個lv,名稱為testlv,大小為50M

mke2fs -j /dev/myvg/testlv //即格式化testlv.格式化的文件系統為ext3

mount /dev/myvg/testlv /mnt //將testlv掛載到mnt目錄下面

【-p】:指定權限

【-s】:指定為快照卷

【創建快照卷】

1、生命周期為整個數據時長:在這段時長內,數據的增長量不能超出快照卷大小:

2、快照卷應該是只讀的:

3、快照卷和原卷在同一卷組內

語法【lvcreate-L # -n SLV_NAME -p r /PATH/TO/LV】

#lvcreate -L 50M -n lv1-snap -s -p r/dev/myvg/lv1 //為lv1設備創建一個大小為50M,名稱為:lv1-snap,權限為只讀的快照卷

#mount /dev/myvg/lv1-snap /ftpftp/gandian //將快照卷掛載在gandian文件夾下

#tar -jcf /beifeng.tar.bz2 /ftpftp/gandian //將快照卷內容全部備份為beifeng.tar.bz2文件

#umount /dev/myvg/lv1-snap //卸載快照卷

#lvremove /dev/myvg/lv1-snap //移除快照卷(即將快照卷刪除)

相關命令

lv :注意:lv是屬於vg的,需要在vg中創建

【lvremove】移除 #lvremove/dev/myvg/testlv //將testlv移除

#lvremovelvremove /dev/mapper/myvg-testlv //也可以移除testlv(注意:/dev/myvg/testlv只是個連接文件,真正的文件在/dev/mapper/myvg-testlv)

【lvs】

【lvdisplay】

【lvcan】

【lvextend】擴展

例如:#lvextend -L 7G /dev/myvg/testlv//將testlv物理邊界擴展到7G

#resize2fs -p /dev/myvg/testlv //將testlv的文件系統邊界擴展為最大(即物理邊界有多少就用多少)

【lvreduce】縮小

注意: 1、不能在線縮減,得先卸載;

2、確保縮減後的空間大小依然能存儲原有的所有數據:

3、在縮減之前應該先強行檢查文件,以確保文件系統處於以至性狀態

例如:

#df -lh //查看文件系統大小,以及已經使用大小

#umount/dev/myvg/testlv //卸載testlv設備

#e2fsck -k/dev/myvg/testlv //強行檢查testlv設備的文件系統

#resize2fs/dev/myvg/testlv 1G //縮減文件系統大小到1G

#lvreduce -L 1G/dev/myvg/testlv //縮減testlv物理邊界到1G

#mount/dev/myvg/testlv /users //掛載

【lvresize】既可以擴展又可以縮小

一、擴展邏輯卷:

【lvextend 】擴展磁盤的邏輯卷

-L [+]# /PATH/TO/LV

【resize2fs】擴展文件系統邏輯編輯

resize2fs /PATH/TO/LV 5G

例如:#lvextend -L 7G /dev/myvg/testlv //將testlv物理邊界擴展為7G

#resize2fs -p /dev/myvg/testlv //將testlv的文件系統邊界擴展為最大(即物理邊界有多少就用多少)

二、縮減邏輯卷:

注意:1、不能在線縮減,得先卸載;

2、確保縮減後的空間大小依然能存儲原有的所有數據:

3、在縮減之前應該先強行檢查文件,以確保文件系統處於以至性狀態


Copyright © Linux教程網 All Rights Reserved