LVM 是一種可用在Linux內核的邏輯分卷管理器;可用於管理磁盤驅動器或其他類似的大容量存儲設備。
LVM利用Linux內核的device-mapper來實現存儲系統的虛擬化(系統分區獨立於底層硬件)。 通過LVM,你可以實現存儲空間的抽象化並在上面建立虛擬分區(virtual partitions),可以更簡便地擴大和縮小分區,可以增刪分區時無需擔心某個硬盤上沒有足夠的連續空間。LVM是用來方便管理的,不會提供額外的安全保證。
LVM的基本組成塊(building blocks)如下:
物理卷Physical volume (PV):可以在上面建立卷組的媒介,可以是硬盤分區,也可以是硬盤本身或者回環文件(loopback file)。物理捲包括一個特殊的header,其餘部分被切割爲一塊塊物理區域(physical extents)。
卷組Volume group (VG):將一組物理卷收集爲一個管理單元。
邏輯卷Logical volume (LV):虛擬分區,由物理區域(physical extents)組成。
物理區域Physical extent (PE):硬盤可供指派給邏輯卷的最小單位(通常爲4MB)。
示例:
兩塊物理硬盤
硬盤1 (/dev/sda):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|分區1 50GB (物理卷) |分區2 80GB (物理卷) |
|/dev/sda1 |/dev/sda2 |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ __|
硬盤2 (/dev/sdb):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|分區1 120GB (物理卷) |
|/dev/sdb1 |
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
LVM方式
卷組VG1 (/dev/MyStorage/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __
|邏輯卷1 15GB |邏輯卷2 35GB |邏輯卷3 200GB |
|/dev/MyStorage/rootvol |/dev/MyStorage/homevol |/dev/MyStorage/mediavol |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ __|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
優點
比起正常的硬盤分區管理,LVM更富於彈性:
使用卷組(VG),使衆多硬盤空間看起來像一個大硬盤。
使用邏輯卷(LV),可以創建跨越衆多硬盤空間的分區。
可以創建小的邏輯卷(LV),在空間不足時再動態調整它的大小。
在調整邏輯卷(LV)大小時可以不用考慮邏輯卷在硬盤上的位置,不用擔心沒有可用的連續空間。It does not depend on the position of the LV within VG, there is no need to ensure surrounding available space.
可以在線(online)對邏輯卷(LV)和卷組(VG)進行創建、刪除、調整大小等操作。LVM上的文件系統也需要重新調整大小,某些文件系統也支持這樣的在線操作。
無需重新啓動服務,就可以將服務中用到的邏輯卷(LV)在線(online)/動態(live)遷移至別的硬盤上。
允許創建快照,可以保存文件系統的備份,同時使服務的下線時間(downtime)降低到最小。
這些優點使得LVM對服務器的管理非常有用,對於桌面系統管理的幫助則沒有那麼顯著,你需要根據實際情況進行取捨。
缺點
在系統設置時需要更復雜的額外步驟,且文件一旦被誤刪除想要恢復會比普通磁盤分區恢復更加困難。
創建LVM步驟:
一、將擴展的硬盤分區
新加一塊SCSI硬盤,需要將其分成三個區:
代碼:
#fdisk /dev/sdb
進入fdisk模式:
Command (m for help):p //查看新硬盤的分區
Command (m for help):n //創建新分區
可以用m命令來看fdisk命令的內部命令;n命令創建一個新分區;d命令刪除一個存在的分區;p命令顯示分區列表;t命令修改分區的類型ID號;l命令顯示分區ID號的列表;a命令指定啓動分區;w命令是將對分區表的修改存盤讓它發生作用。
Command action
e extended //輸入e爲創建擴展分區
p primary partition (1-4) //輸入p爲創建主分區,這裏我們選擇p
Partion number(1-4):1 //第一個擴展分區,按你需求可以最多分4個主分區
First Cylinder(1-1014,default 1): 1 //第一個主分區起始的磁盤塊數
Last cylindet or +siza or +sizeM or +sizeK: +1024MB //可以是以MB爲單位的數字或者以磁盤塊數,這裏我們輸入+1024MB表示分區大小爲1G。
這樣我們就創建完一個分區,如果要創建更多分區可以照上面的步驟繼續創建。
創建完後用w保存分區。
代碼:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#partprobe //不用重啓可使以上操作生效。
這樣就分區完,我們還要進行格式化
代碼:
#mkfs.ext3 /dev/sdb1 //如果有多個分區
二、創建邏輯卷的步驟:
1)通過pvcreate命令將linux分區處理成物理卷(PV);
2)通過vgcreate命令將創建好的物理卷處理成卷組(Vg);
3)通過lvcreate命令將卷組分成若干個邏輯卷(Lv);
之後我們可以對邏輯捲進行格式化,掛載,刪除等操作,我們可以動態的調整邏輯卷的大小,並且該操作不會影響我們在邏輯卷(Lv)上的數據。
注:後面會對各個命令進行詳解,以便大家閱讀
三、物理卷創建管理操作:
1)pvcreate創建物理卷:( 把普通Linux分區變成物理卷)
格式:pvcreate /dev/sdb{1,2,3...}
例如:
# pvcreate /dev/sdb{1,2,3,5,6,7}
Physical volume "/dev/sdb3" successfully created
Physical volume "/dev/sdb5" successfully created
Physical volume "/dev/sdb6" successfully created
Physical volume "/dev/sdb7" successfully created
2)pvscan查看物理卷信息:會顯示所有物理卷的情況。
格式:pvscan
例如:
# pvscan
PV /dev/sdb1 lvm2 [964.81 MB]
PV /dev/sdb2 lvm2 [964.84 MB]
PV /dev/sdb3 lvm2 [964.84 MB]
PV /dev/sdb5 lvm2 [964.81 MB]
PV /dev/sdb6 lvm2 [964.81 MB]
PV /dev/sdb7 lvm2 [964.81 MB]
Total: 6 [5.65 GB] / in use: 0 [0 ] / in no VG: 6 [5.65 GB]
3)pvdisplay查看各個物理卷的詳細參數:
格式:pvdisplay [/dev/sdb{1,2,3...}] 不跟參數則顯示所有的物理卷信息
例如:
# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "964.81 MB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 964.81 MB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID
4)pvremove刪除物理卷:當物理卷裏的擴展快沒有被使用時可以刪除。
格式:pvremove /dev/sdb5
四.卷組的創建管理:
1)vgcreate創建卷組:
格式:vgcreate [-s <8M|16M|...>] vg0 /dev/sdb{1,2,3...}
-s:指定擴展塊(PE)的大小,默認爲4MB;(相當與磁盤上的簇,擴展邏輯卷的基本單位。後面的值可以是8M 16M 32M 64M .....最多65532個擴展塊。
vg0:新創建的卷組的名字。
/dev/sdb{1,2,3...}:需要的物理卷可以寫多個;
例如:
# vgcreate vg0 /dev/sdb{1,2,3}
Volume group "vg0" successfully created
2)vgdisplay查看各個卷組的詳細參數:
格式:vgdisplay /dev/vg0
例如
# vgdisplay /dev/vg0
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
Cur PV 3
Act PV 3
VG Size 2.82 GB
PE Size 4.00 MB //擴展快大小 默認4MB
Total PE 723
Alloc PE / Size 0 / 0
Free PE / Size 723 / 2.82 GB
3)vgscan查看卷組的信息:
格式:vgsacn
例如
# vgscan
Found volume group "vg1" using metadata type lvm2
Found volume group "vg0" using metadata type lvm2
4)vgreduce縮小卷組:把物理卷重卷組中刪除。
格式:vgreduce vg0 /dev/sdb3
例如
# vgreduce vg0 /dev/sdb3
Removed "/dev/sdb3" from volume group "vg0"
4)vgextend擴展卷組:把某個物理卷添加到卷組中。
格式:vgextend vg0 /dev/sdb2 將物理卷/dev/sdb2添加到vg0卷組
例如
# vgextend vg0 /dev/sdb3
Volume group "vg0" successfully extended
5)vgremove刪除卷組:
格式:vgremove /dev/vg1
五、邏輯卷的創建及管理:
1)lvcreate創建邏輯卷命令:
格式1:lvcreate -L 512M -n data vg0
-L 512M:設置邏輯卷的大小爲512M。
-n data:設置邏輯卷的名字爲data ;表示法:/dev/卷組名/data
vg0 :設置是有那個卷組生成的邏輯卷。
例如
# lvcreate -L 1000M -n data vg0
Logical volume "data" created
//創建一個容量爲1000MB的邏輯卷data
式2:lvcreate -l 32 -n data vg0
-l 32:生成的邏輯卷使用32個擴展塊,邏輯卷大小=32*PE(默認4M)則爲128M
-n data:邏輯卷的名字;
vg0 :設置是有那個卷組生成的邏輯卷。
例如
# lvcreate -l 32 -n data128 vg0
Logical volume "data128" created
//創建一個32個擴展塊,容量爲32*4=128MB的邏輯卷data128
2)格式化邏輯卷:
mkfs.ext3 /dev/vg0/data
3)lvsacn查看邏輯卷的信息:
例如
# lvscan
ACTIVE ‘/dev/vg0/data‘ [1000.00 MB] inherit
4)lvdisplay查看邏輯卷的具體參數:
例如
# lvdisplay /dev/vg0/data
--- Logical volume ---
LV Name /dev/vg0/data
VG Name vg0
LV UUID 9Od1nq-cHmY-MlrL-vgXW-7Kam-pAfU-Qc8mal
LV Write Access read/write
LV Status available
# open 0
LV Size 1000.00 MB
Current LE 250
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
5)增大邏輯卷大小:
lvextend命令:增大邏輯卷大小
格式:lvextend -L +100M /dev/vg0/data
例如
# lvextend -L +1000M /dev/vg0/data
Extending logical volume data to 1.95 GB
Logical volume data successfully resized
resize2fs /dev/vg0/data 使上面增加的立即生效。
6)減少邏輯卷大小:
lvreduce命令:減少邏輯卷大小
格式:Lvreduce -L -100M /dev/vg0/data
# lvreduce -L -1000M /dev/vg0/data
WARNING: Reducing active logical volume to 1000.00 MB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce data? [y/n]: y
Reducing logical volume data to 1000.00 MB
Logical volume data successfully resized
resize2fs /dev/vg0/data 使上面增加的立即生效。
7)lvremove刪除邏輯卷:
格式:lvremove /dev/卷組名/邏輯卷名
例如
# lvremove /dev/vg0/data128
Do you really want to remove active logical volume "data128"? [y/n]: y
Logical volume "data128" successfully removed
# lvscan
ACTIVE ‘/dev/vg0/data‘ [1000.00 MB] inherit
六、掛載
將新分的卷掛載在需要掛載的目錄下:
格式:mount /dev/<vgname>/<lvname> /要掛載的點
Mkdir –p /tmp/123 //建掛載點 在/tmp/123 下掛載
# Mount /dev/VolGroup0/data /tmp/123
設置永久掛載:
# vi /etc/fstab
/dev/VolGroup0/data /tmp/123 ext3 defaults 0 0