Logical Volume Manager (LVM),邏輯卷管理LVM是一個多才多藝的硬盤系統工具,無論在Linux或者其他類似的系統,都是非常的好用。傳統分區使用固定大小分區,重新調整大小十分麻煩,但是LVM可以創建和管理“邏輯”卷,而不是直接使用物理硬盤,可以讓管理員彈性的管理邏輯卷的擴大縮小,操作簡單,而不損壞已存儲的數據。可以隨意將新的硬盤添加到LVM,以直接擴展已經存在的邏輯卷,LVM並不需要重啟就可以讓內核知道分區的存在。文章詳細記錄在PV/VG/LV中3個階段的創建/添加/擴展/減小/刪除等實戰操作步驟,方便自己回顧一些基礎用法,也希望能夠幫助大家更好的理解LVM的原理。
LVM是一個非常給力的工具,用來創建和管理可變大小的分區
LVM利用Linux內核的device-mapper來實現存儲系統的虛擬化(系統分區獨立於底層硬件)。 通過LVM,你可以實現存儲空間的抽象化並在上面建立虛擬分區(virtual partitions),可以更簡便地擴大和縮小分區,可以增刪分區時無需擔心某個硬盤上沒有足夠的連續空間, without getting caught up in the problems of fdisking a disk that is in use (and wondering whether the kernel is using the old or new partition table) and without having to move other partition out of the way. LVM是用來方便管理的,不會提供額外的安全保證。 However, it sits nicely with the other two technologies we are using.
LVM的基本組成塊(building blocks)如下:
物理卷Physical volume (PV) :可以在上面建立卷組的媒介,可以是硬盤分區,也可以是硬盤本身或者回環文件(loopback file)。物理卷包括一個特殊的header,其余部分被切割為一塊塊物理區域(physical extents)。 Think of physical volumes as big building blocks which can be used to build your hard drive.
卷組Volume group (VG) :將一組物理卷收集為一個管理單元。Group of physical volumes that are used as storage volume (as one disk). They contain logical volumes. Think of volume groups as hard drives.
邏輯卷Logical volume (LV) :虛擬分區,由物理區域(physical extents)組成。A "virtual/logical partition" that resides in a volume group and is composed of physical extents. Think of logical volumes as normal partitions.
物理區域Physical extent (PE) :硬盤可供指派給邏輯卷的最小單位(通常為4MB)。A small part of a disk (usually 4MB) that can be assigned to a logical Volume. Think of physical extents as parts of disks that can be allocated to any partition.
優點
比起正常的硬盤分區管理,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對服務器的管理非常有用,對於桌面系統管理的幫助則沒有那麼顯著,你需要根據實際情況進行取捨。
#新建
fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
#主分區
p
#分區號
Partition number (1-4): 1
#回車用默認的1
First cylinder (1-1044, default 1):
#大小
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):
#改變類型
Command (m for help): t
Selected partition 1
#LVM 的分區代碼
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
#保存
w
#退出
q
#查看創建完後的分區
fdisk -l
Disk /dev/sda: 96.6 GB, 96636764160 bytes
255 heads, 63 sectors/track, 11748 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008cbaf
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 11749 93858816 8e Linux LVM
Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x16396101
Device Boot Start End Blocks Id System
/dev/sdb1 1 26108 209712478+ 8e Linux LVM
#創建物理卷(PV)
pvcreate /dev/sdb1
pvscan
PV /dev/sdb1 VG vg_data lvm2 [200.00 GiB / 30.00 GiB free]
PV /dev/sda2 VG VolGroup lvm2 [89.51 GiB / 1.51 GiB free]
Total: 2 [289.50 GiB] / in use: 2 [289.50 GiB] / in no VG: 0 [0 ]
pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg_data
PV Size 200.00 GiB / not usable 1.34 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 51199
Free PE 7679
Allocated PE 43520
PV UUID c9js6G-WP93-ug9b-9aXe-unnZ-doWQ-AkzOKf
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup
PV Size 89.51 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 22914
Free PE 386
Allocated PE 22528
PV UUID bFne0f-RnL8-vut2-AcKr-fr9k-VfeG-C8OHSR
#刪除物理卷
pvremove /dev/sdb1
#創建卷組(VG)
vgcreate vg_data /dev/sdb1
vgcreate vg_data /dev/hda{6,7,8}
#擴展VG
vgextend vg_data /dev/hda9
#查看VG信息
vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg_data" using metadata type lvm2
Found volume group "VolGroup" using metadata type lvm2
vgdisplay
--- Volume group ---
VG Name vg_data
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 200.00 GiB
PE Size 4.00 MiB
Total PE 51199
Alloc PE / Size 43520 / 170.00 GiB
Free PE / Size 7679 / 30.00 GiB
VG UUID EQhiUt-Waj1-F3V2-cwej-2joz-oC3P-JMSFui
--- Volume group ---
VG Name VolGroup
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 5
Open LV 5
Max PV 0
Cur PV 1
Act PV 1
VG Size 89.51 GiB
PE Size 4.00 MiB
Total PE 22914
Alloc PE / Size 22528 / 88.00 GiB
Free PE / Size 386 / 1.51 GiB
VG UUID i0qDld-uOz4-P1BS-2gN8-2vhj-5gdc-DnHfa4
#刪除VG
vgremove vg_data
#創建邏輯卷(LV)
lvcreate -L 20g -n lv_Oracle vg_data
lvcreate -l 100%FREE -n lv_oracle vg_data
#查看LV
lvscan
ACTIVE '/dev/vg_data/lv_oracle' [20.00 GiB] inherit
ACTIVE '/dev/VolGroup/lv_root' [50.00 GiB] inherit
ACTIVE '/dev/VolGroup/lv_home' [10.00 GiB] inherit
lvdisplay
--- Logical volume ---
LV Path /dev/vg_data/lv_oracle
LV Name lv_oracle
VG Name vg_data
LV UUID P3jVXt-92Lp-QElD-ddl8-lW4r-okz7-n8fdXD
LV Write Access read/write
LV Creation host, time capdb, 2016-03-17 17:12:43 +0800
LV Status available
# open 1
LV Size 20.00 GiB
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:5
#格式化邏輯卷
mkfs -t ext4 /dev/vg_data/lv_oracle
mkfs.ext4 /dev/vg_data/lv_oracle
#掛載邏輯卷
mkdir /oracle
#修改fstab
vi /etc/fstab
/dev/vg_data/lv_oracle /oracle ext4 dafualts 0 0
#測試lv是否可以掛載
mount -a
mount /dev/vg_data/lv_oracle /oracle
df -h
#刪除邏輯卷
fuser -m /oracle
umount /oracle
lvremove /dev/vg_data/lv_oracle
LVM特點就是支持在線動態擴容,如果為了穩妥也可以先umount
#查看Free PE / Size可用空間
vgdisplay
--- Volume group ---
VG Name vg_data
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 200.00 GiB
PE Size 4.00 MiB
Total PE 51199
Alloc PE / Size 43520 / 170.00 GiB
Free PE / Size 7679 / 30.00 GiB
VG UUID EQhiUt-Waj1-F3V2-cwej-2joz-oC3P-JMSFui
#設置邏輯卷的大小
lvresize -L 40g /dev/vg_data/lv_oracle
lvresize -L +20g /dev/vg_data/lv_oracle
#檢查磁盤錯誤,等待時間較長可以考慮跳過
e2fsck -f /dev/vg_data/lv_oracle
#更新文件系統信息
resize2fs /dev/vg_data/lv_oracle
#檢查邏輯卷狀態
lvdisplay vg_data
注意減少的大小,實施前umount邏輯卷
#卸載LV
umout /oracle
#檢查磁盤錯誤
e2fsck -f /dev/vg_data/lv_oracle
#縮小文件系統,更新文件系統信息
resize2fs /dev/vg_data/lv_oracle 10g
#減少LV大小
lvresize -L 10g /dev/vg_data/lv_oracle
lvresize -L -30g /dev/vg_data/lv_oracle
#檢查邏輯卷大小
lvdisplay
df -h
步驟和創建VG類似
#創建一個2GB分區sdc1,類型為LVM(8e)
fdisk /dev/sdc
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +2G
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
#創建一個物理卷 /dev/sdc1
pvcreate /dev/sdc1
#增加到已存在的卷組
vgextend vg_data /dev/sdc1
#驗證卷組大小
vgdisplay
#卸載邏輯卷
umount /oracle
#刪除邏輯卷
lvremove /dev/vg_data/lv_oracle
#取消激活卷組
vgchange -a n vg_data
#刪除卷組
vgremove vg_data
#刪除物理卷
pvremove /dev/sdb1
pvremove /dev/hda{6,7,8}
#普通磁盤類型是83
fdisk /dev/sdb
t 83
在做HA共享存儲時需要配合lvchange激活lv
lvscan
lvchange -a y /dev/vg_data/lv_oradata