======圖解LVM======
本篇主要以實體Partition角度來表達LVM整體結構。為了方便說明,以下會用3個Partition,分別是40G、40G及20G容量已建立一個LV。
=====實體Partition與LVM=====
假設已經建立一個LVM,也儲存一些資料分別是A、B、C、D、E及F。以實體Partition及LVM兩者不同角度來看看儲存資料狀態。
由示意圖可以看出A,B,C,D,E,F六個不同資料分別儲存在不同的分割區,但由軟體所管理的LV則整合一個磁區儲存著6個不同資料。
^ 實體Partition ^ LVM ^
| {{:linux:partition角度.gif?200|}} | {{:linux:lvm角度.gif?200|}} |
=====LVM建立演變過程=====
- 實體硬碟建立分割區
- 每個分割區格式化為8e(LVM專屬檔案格式);此過程稱為PV(Physical Volume)。
- 每個PV整合一個VG(Volume Group)。(其實VG可以看作一整個大硬碟)
- 再由VG分割成自訂容量大小的LV(Logical Volume)。(其實LV可以看作是分割區,只是這個分割區是由LVM所控制的)
^由傳統硬碟分割方式演變成LVM過程^
|{{:linux:lvm整合演變流程.gif?500|}}|
======簡單範例1-從無到有建立LVM======
為方便建立硬碟,以下範例都是以虛擬機來模擬。分別建立1G(/dev/sdb),500MB(/dev/sdc)硬碟整合1個VG,再VG上建立500MBLV。
=====以傳統分割Partition=====
{{:linux:partition1.gif?200|}}
分別建立/dev/sdb1及/dev/sdc1, 並改變系統ID為8e#fdisk /dev/sdb
press n
press Enter
press Enter
Press t
Press 8e
#fdisk /dev/sdc
press n
press Enter
press Enter
Press t
Press 8e
#fdisk -cul
~略~
Device Boot Start End Blocks Id System
/dev/sdb1 63 2088449 1044193+ 8e Linux LVM
~略~
Device Boot Start End Blocks Id System
/dev/sdc1 32 1048575 524272 8e Linux LVM
=====建立PV(Physical Volume)=====
{{:linux:pv1.gif?200|}}
#pvcreate /dev/sdb1 /dev/sdc1
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
顯示PV Summary#pvscan
PV /dev/sdb1 lvm2 [1019.72 MiB]
PV /dev/sdc1 lvm2 [511.98 MiB]
Total: 2 [1.50 GiB] / in use: 0 [0 ] / in no VG: 2 [1.50 GiB]
=====/dev/sdb1 及 /dev/sdc1加入VG(Volume Group)=====
{{:linux:vg1.gif?200|}}
#vgcreate VG1.5 /dev/sdb1 /dev/sdc1
Volume group "VG1.5" successfully created
詳細顯示 名為VG1.5資訊
#vgdisplay VG1.5
--- Volume group ---
VG Name VG1.5
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 1.49 GiB -->整個VG容量有 1.5GB
PE Size 4.00 MiB -->每個PE佔4MB
Total PE 381 -->VG共有381個PE
Alloc PE / Size 0 / 0 -->目前未使用,表示還未切割LV(Logical Volume)
Free PE / Size 381 / 1.49 GiB -->PE是lvm最小的儲存單位;其實他像是一般檔案系統的Block。目前381個PE 共約1.5GB
VG UUID 0zW8Gv-frp1-6mKr-o0to-95K3-SVu2-Djf1Pu
=====在VG上建立LV(Logical Volume)=====
{{:linux:lv1.gif?200|}}
目前VG共約1.5GB。這邊先建立**LV** 容量為500MB
#lvcreate -L 500MB -n lvDisk VG1.5
Logical volume "lvDisk" created
顯示VG詳細的用量
--- Volume group ---
VG Name VG1.5
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 1.49 GiB
PE Size 4.00 MiB
Total PE 381
Alloc PE / Size 125 / 500.00 MiB -->已分配125個PE;共500MB
Free PE / Size 256 / 1.00 GiB
VG UUID 0zW8Gv-frp1-6mKr-o0to-95K3-SVu2-Djf1Pu
列出系統上所有的LV
#lvscan
ACTIVE '/dev/VG1.5/lvDisk' [500.00 MiB] inherit
詳細顯示/dev/VG1.5/lvDisk資訊
#lvdisplay /dev/VG1.5/lvDisk
--- Logical volume ---
LV Name /dev/VG1.5/lvDisk
VG Name VG1.5
LV UUID TGwY7n-YcSA-GSjR-SXwX-eXFt-XoZX-Ng0Bfc
LV Write Access read/write
LV Status available
# open 1
LV Size 500.00 MiB
Current LE 125
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
針對LV /dev/VG1.5/lvDisk進行建立檔案系統(Formate)
#mkfs -t ext4 /dev/VG1.5/lvDisk
掛載 /dev/VG1.5/lvDisk 到 /lvDisk(如圖,灰色區域是可以儲存資料部分)
#mkdir /lvDisk
#mount /dev/VG1.5/lvDisk /lvDisk
======範例2-舊硬碟資料移除到新硬碟======
目前lvm上,架構一個硬碟為/dev/sdc1(舊硬碟)。此範例的目標要將/dev/sdc1的資料全部移轉到/dev/sdb1。
顯示目前一些背景資料:#fdisk -l
Disk /dev/sdb: 1073 MB, 1073741824 bytes
~略~
Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ 8e Linux LVM
Disk /dev/sdc: 536 MB, 536870912 bytes
~略~
Device Boot Start End Blocks Id System
/dev/sdc1 1 512 524272 8e Linux LVM
#pvscan
PV /dev/sdc1 VG VG1.5 lvm2 [508.00 MiB / 160.00 MiB free] -->508-160=348MB;已有348MB被LV所使用
Total: 1 [508.00 MiB] / in use: 1 [508.00 MiB] / in no VG: 0 [0 ]
#vgdisplay
--- Volume group ---
VG Name VG1.5
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 31
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 508.00 MiB
PE Size 4.00 MiB
Total PE 127
Alloc PE / Size 87 / 348.00 MiB
Free PE / Size 40 / 160.00 MiB
VG UUID 0zW8Gv-frp1-6mKr-o0to-95K3-SVu2-Djf1Pu
#lvscan
ACTIVE '/dev/VG1.5/lvDisk2' [348.00 MiB] inherit
- 由以上背景資訊(pvscan)判斷,新硬碟(/dev/sdb1)需要建立PV及加入VG1.5#pvcreate /dev/sdb1
# vgextend VG1.5 /dev/sdb1
- 卸除/dev/VG1.5/lvDisk2#umount /dev/VG1.5/lvDisk2
- 開始將舊硬碟(/dev/sdc1)轉移到新硬碟(/dev/sdb1)#pvscan
PV /dev/sdc1 VG VG1.5 lvm2 [508.00 MiB / 160.00 MiB free]
PV /dev/sdb1 VG VG1.5 lvm2 [1016.00 MiB / 1016.00 MiB free]
#pvmove -v -i 2 /dev/sdc1 /dev/sdb1
每2秒開始秀出一些訊息
~略~
/dev/sdc1: Moved: 2.3%
/dev/sdc1: Moved: 26.4%
/dev/sdc1: Moved: 50.6%
/dev/sdc1: Moved: 74.7%
/dev/sdc1: Moved: 98.9%
/dev/sdc1: Moved: 100.0%
~略~
#pvscan
PV /dev/sdc1 VG VG1.5 lvm2 [508.00 MiB / 508.00 MiB free]
PV /dev/sdb1 VG VG1.5 lvm2 [1016.00 MiB / 668.00 MiB free] -->已換到新硬碟上了
#vgdisplay
--- Volume group ---
VG Name VG1.5
~略~
VG Size 1.49 GiB
PE Size 4.00 MiB
Total PE 381 -->總PE個數產生變化
Alloc PE / Size 87 / 348.00 MiB -->以經分配87個PE
Free PE / Size 294 / 1.15 GiB -->還有294個PE未使用
VG UUID 0zW8Gv-frp1-6mKr-o0to-95K3-SVu2-Djf1Pu
- 舊硬碟卸除
* 在VG1.5上退出舊硬碟(/dev/sdc1)#vgreduce VG1.5 /dev/sdc1
* 在舊硬碟(/dev/sdc1)拿掉PV#pvremove /dev/sdc1
* 顯示#pvscan
PV /dev/sdb1 VG VG1.5 lvm2 [1016.00 MiB / 668.00 MiB free] -->已移除舊硬碟了
Total: 1 [1016.00 MiB] / in use: 1 [1016.00 MiB] / in no VG: 0 [0 ]
- 測試掛載#mkdir lvDisk
#mount /dev/VG1.5/lvDisk2 /lvmDisk/
======範例3-增加容量======
本範例3承接範例2環境情況。目前/dev/VG1.5/lvDisk2的容量為348MB,現在要增加500MB容量,使總容量為848MB。
--- Logical volume ---
LV Name /dev/VG1.5/lvDisk2
VG Name VG1.5
LV UUID 7as5jn-HPPS-5teW-2MqQ-NaD8-9R8f-gHt5hA
LV Write Access read/write
LV Status available
# open 1
LV Size 348.00 MiB
Current LE 87
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
- 增加125PE到/dev/VG1.5/lvDisk2#lvextend -l +125 /dev/VG1.5/lvDisk2
- 格式化增加的區塊#resize2fs /dev/VG1.5/lvDisk2
- 顯示是否正確#df -h
/dev/mapper/VG1.5-lvDisk2
823M 50M 731M 7% /lvmDisk
=======範例4-減少容量======
現在有一個Logical Volum :**lvtest**容量為200MB,此範例目標減少到100MB。
--- Logical volume ---
LV Name /dev/vgtest/lvtest
VG Name vgtest
LV UUID fM6ZTM-cQdj-wquV-T585-gHo6-dreJ-fRDqc2
LV Write Access read/write
LV Status available
# open 1
LV Size 200.00 MiB
Current LE 50
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3
#df -h
檔案系統 Size Used Avail Use% 掛載點
~略~
/dev/mapper/vgtest-lvtest
194M 37M 147M 21% /media/test
# ls -l /media/test
總計 21
drwxr-xr-x. 112 root root 7168 2012-03-15 21:59 etc
drwx------. 2 root root 12288 2012-03-15 21:58 lost+found
- 卸載 /dev/mapper/vgtes-test#umount /media/test
- 磁碟檢查,以利於分散資料集中,才不會造成減少容量而損失原有的資料#fsck -f /dev/mapper/vgtest-lvtest
- 重新劃分檔案系統的容量為100MB#resize2fs /dev/mapper/vgtest-lvtest 100M
- 減少/dev/mapper/vgtest-test容量為100MB#lvreduce -L 100MB /dev/mapper/vgtest-lvtest
WARNING: Reducing active logical volume to 100.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvtest? [y/n]: y Enter
Reducing logical volume lvtest to 100.00 MiB
Logical volume lvtest successfully resized
- 重新掛載#mount /dev/vgtest/lvtest /media/test/
#ll /media/test/
drwxr-xr-x. 112 root root 7168 2012-03-15 21:59 etc
drwx------. 2 root root 12288 2012-03-15 21:58 lost+found
#df -h
檔案系統 Size Used Avail Use% 掛載點
~略~
/dev/mapper/vgtest-lvtest
97M 37M 55M 41% /media/test
======參考資料======
- [[http://maxubuntu.blogspot.com/2010/05/lvm2.html#target7|LVM2學習筆記]]
- [[http://blog.xuite.net/m740138.m740138/blog/31793294|lvm實戰]]
- [[http://itcat.pixnet.net/blog/post/13533189-%5Brhce%E8%AA%B2%E5%A0%82%E7%AD%86%E8%A8%98%5D-lvm|LVM筆記]]