LVM 學習筆記 --转载
3.4 創建物理卷的范例:
直接在硬盤設備上創建物理卷(PV):
pvcreate /dev/sdb;
pvcreate /dev/sdc;
pvcreate /dev/sdd;
pvcreate /dev/sde;
在磁盤分區(類型8e)上創建物理卷(PV):
pvcreate /dev/hda1;
pvcreate /dev/hdb1;
pvcreate /dev/hdc1;
pvscan; #掃描看看剛創建的PV;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
PV /dev/hda1 lvm2 [80.00 GB]
PV /dev/hdc1 lvm2 [80.00 GB]
PV /dev/hdb1 lvm2 [80.00 GB]
Total: 3 [240.00 GB] / in use: 0 [0 ] / in no VG: 3 [240.00 GB]
- - - - - - - - - - - - - - - - - - - - - - - - - - -
pvdisplay /dev/hda1; #顯示物理卷信息;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
--- Physical volume ---
PV Name /dev/hda1
VG Name vg1
PV Size 80.00 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 20479
Free PE 20479
Allocated PE 0
PV UUID sfEXEg-xYSz-NE3C-Timx-s0og-tyAh-Rgb3s6
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3.5 創建卷組的范例:
vgcreate vg1 /dev/hda1; #創建包含一個物理卷的卷組;
vgcreate vg2 /dev/hdb1 /dev/hdc1; #一個卷組可以包含多個物理卷;
vgscan; #掃描看看剛創建的卷組;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Reading all physical volumes. This may take a while...
Found volume group "vg2" using metadata type lvm2
Found volume group "vg1" using metadata type lvm2
- - - - - - - - - - - - - - - - - - - - - - - - - - -
vgdisplay -v vg2; #顯示卷組vg2的信息;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Using volume group(s) on command line
Finding volume group "vg2"
--- Volume group ---
VG Name vg2
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 159.99 GB
PE Size 4.00 MB
Total PE 40958
Alloc PE / Size 0 / 0
Free PE / Size 40958 / 159.99 GB
VG UUID m2BEoc-liXS-h3dn-L4tH-ORF7-bG5p-Yx052h
--- Physical volumes ---
PV Name /dev/hdb1
PV UUID 6rdZod-Cprh-a9tS-zCK2-5DVx-hkFC-7ndR04
PV Status allocatable
Total PE / Free PE 20479 / 20479
PV Name /dev/hdc1
PV UUID 1coCsZ-BFCW-kYmJ-uCfG-jtol-WqjC-auA4zX
PV Status allocatable
Total PE / Free PE 20479 / 20479
- - - - - - - - - - - - - - - - - - - - - - - - - - -
vgextend vg1 /dev/hdd1; #將物理卷/dev/hdd添加到卷組vg1中;
pvmove /dev/hdd1; #準備從卷組vg1中移除物理卷/dve/hdd,先騰空該物理卷的數據;
vgreduce vg1 /dev/hdd1; #將物理卷/dev/hdd移出卷組vg1;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3.6 創建邏輯卷的范例:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lvcreate -L 100M -n lv1 vg1;
lvcreate -L 500M -n lv2 vg1;
lvcreate -L 100G -n lv1 vg2;
lvcreate -L 500M -n lv2 vg2;
ls -l /dev/vg*; #創建邏輯卷(LV)後,會自動產生設備節點;
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
/dev/vg1:
total 0
lrwxrwxrwx 1 root root 19 Aug 8 01:08 lv1 -> /dev/mapper/vg1-lv1
lrwxrwxrwx 1 root root 19 Aug 8 01:09 lv2 -> /dev/mapper/vg1-lv2
/dev/vg2:
total 0
lrwxrwxrwx 1 root root 19 Aug 8 01:08 lv1 -> /dev/mapper/vg2-lv1
lrwxrwxrwx 1 root root 19 Aug 8 01:10 lv2 -> /dev/mapper/vg2-lv2
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
lvscan; #掃描看看剛創建的邏輯卷;
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ACTIVE '/dev/vg2/lv1' [100.00 GB] inherit
ACTIVE '/dev/vg2/lv2' [500.00 MB] inherit
ACTIVE '/dev/vg1/lv1' [100.00 MB] inherit
ACTIVE '/dev/vg1/lv2' [500.00 MB] inherit
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
lvdisplay /dev/vg2/lv1; #顯示邏輯卷信息;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
--- Logical volume ---
LV Name /dev/vg2/lv1
VG Name vg2
LV UUID 0Y3o6N-pVlw-gFd9-8zSH-nS0D-27eH-2u4GU4
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 GB
Current LE 25600
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:1
- - - - - - - - - - - - - - - - - - - - - - - - - - -
lvdisplay vg2; #顯示卷組vg2中的所有邏輯卷信息;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
--- Logical volume ---
LV Name /dev/vg2/lv1
VG Name vg2
LV UUID 0Y3o6N-pVlw-gFd9-8zSH-nS0D-27eH-2u4GU4
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 GB
Current LE 25600
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/vg2/lv2
VG Name vg2
LV UUID UkUiTC-BO5l-3om3-VY1N-6pG2-AWpe-6zKV8X
LV Write Access read/write
LV Status available
# open 0
LV Size 500.00 MB
Current LE 125
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
- - - - - - - - - - - - - - - - - - - - - - - - - - -
擴大空間:
lvextend -L +500M vg1/lv1; #添加500M空間到邏輯卷vg1/lv1;
e2fsck -f /dev/vg1/lv1; #先掃描一下掃描文件系統;
resize2fs /dev/vg1/lv1; #擴大文件系統;
縮小空間:
e2fsck -f /dev/vg1/lv1; #先掃描一下掃描文件系統;
resize2fs /dev/vg1/lv1 700M; #縮小空間,新空間等于700M;
lvreduce -L -200M vg1/lv1; #邏輯卷空間減少200M(因為原先的總空間為900M);
lvreduce -L 700M vg1/lv1; #也可以直接將邏輯卷空間變更為700M;
resize2fs /dev/vg1/lv1; #重新調整文件系統的空間;
注意:
可以不創建文件系統而直接使用邏輯卷LV,直接進行數據讀寫操作以提高性能. 也就是說可以
將邏輯卷當作裸设备(raw device)來使用,例如有些數據庫系統就是利用這種方式來儲存資料.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3.7 其他LVM的操作范例:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
如欲保存數據,需先騰空相關物理卷的數據,例如:
pvmove /dev/hda1; #騰空物理卷/dev/hda數據;
先刪除卷組中的所有邏輯卷:
lvremove vg1/lv1; #刪除邏輯卷vg1/lv1;
lvremove /dev/vg1/lv2; #刪除邏輯卷vg1/lv2;
lvremove vg2/lv1; #刪除邏輯卷vg2/lv1;
將物理卷移出卷組:
vgreduce vg2 /dev/hdb1; #從卷組中移出物理卷;
將物理卷加入卷組:
vgextend vg2 /dev/hdb1; #將物理卷添加到卷組;
如果要刪除卷組,請按如下步驟:
vgchange -a n vg1; #刪除卷組前需要先停止該卷組的活動狀態;
vgremove vg1; #然后再刪除卷組;
注意: 如要刪除整個卷組,需先刪除該卷組的所有邏輯卷;
最后刪除物理卷:
pvremove /dev/hda1; #此命令只在LVM2版本中才有;
維護操作步驟:
vgscan; #掃描卷組的物理卷和邏輯卷狀態信息;
vgchange -ay; #啟動LVM;
vgchange -an; #停止LVM
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3.8 LVM快照
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
快照(snapshot)是LVM所提供的一個非常有用的特性. 利用快照您可以凍結一個正在使用中的
邏輯卷,然后制作一份凍結時刻的備份,這個備份是具有一致性的. 快照是特殊類型的邏輯卷,
它含有創建時刻所指定的原始邏輯卷的完整數據,因此您可以操作快照而無需擔心數據的變更
令備份失效.
lsmod | grep dm; #使用snapshot需要內核模塊dm-snapshot;
modprobe dm-snapshot; #如有需要,必須先加載此模塊;
建立邏輯卷vg1/lv1的快照:
lvcreate -L500M -s -n sh1 vg1/lv1;
lvscan; #看看剛創建的快照;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
ACTIVE Original '/dev/vg1/lv1' [1.00 GB] inherit
ACTIVE '/dev/vg1/lv2' [2.00 GB] inherit
ACTIVE '/dev/vg1/lv3' [3.00 GB] inherit
ACTIVE Snapshot '/dev/vg1/sh1' [500.00 MB] inherit
- - - - - - - - - - - - - - - - - - - - - - - - - - -
快照卷無需做格式化步驟,可以直接將快照卷掛載,卸載等操作,而且操作完成後,可以立即刪除
快照,因為快照不會自動更新,長久保留是沒有意義的:
lvremove /dev/vg1/sh1; #刪除快照;
注意: 創建快照卷的容量必須大于原始卷的實際數據總量(通常是1.1倍);
通常創建快照卷的主要目的是做備份用途, 可以寫一個簡單的備份腳本來自動創建快照, 然后
掛載進行備份, 備份完成後又自動卸載和刪除. 因為快照的創建速度非常快, 所以使用快照來
操作備份作業不僅可以解決一致性問題, 而且可以減少備份時間. 請參考如下代碼:
vi snapshot_backup.sh; #建立備份腳本;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/bash
today=`date "+%Y%m%d"`;
lvcreate -L1G -s -n sh1 /dev/vg1/lv1;
mount /dev/vg1/sh1 /disk/vg1/sh1;
tar -zcvf /tmp/snapshot_backup_$today.tar.gz /disk/vg1/sh1/*;
umount /dev/vg1/sh1;
lvremove -f /dev/vg1/sh1;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
chmod 755 snapshot_backup.sh; #設置運行權限;
可以將此備份腳本設置成每天定時運行,就可當成是一個完整備份的方案.
直接在硬盤設備上創建物理卷(PV):
pvcreate /dev/sdb;
pvcreate /dev/sdc;
pvcreate /dev/sdd;
pvcreate /dev/sde;
在磁盤分區(類型8e)上創建物理卷(PV):
pvcreate /dev/hda1;
pvcreate /dev/hdb1;
pvcreate /dev/hdc1;
pvscan; #掃描看看剛創建的PV;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
PV /dev/hda1 lvm2 [80.00 GB]
PV /dev/hdc1 lvm2 [80.00 GB]
PV /dev/hdb1 lvm2 [80.00 GB]
Total: 3 [240.00 GB] / in use: 0 [0 ] / in no VG: 3 [240.00 GB]
- - - - - - - - - - - - - - - - - - - - - - - - - - -
pvdisplay /dev/hda1; #顯示物理卷信息;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
--- Physical volume ---
PV Name /dev/hda1
VG Name vg1
PV Size 80.00 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 20479
Free PE 20479
Allocated PE 0
PV UUID sfEXEg-xYSz-NE3C-Timx-s0og-tyAh-Rgb3s6
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3.5 創建卷組的范例:
vgcreate vg1 /dev/hda1; #創建包含一個物理卷的卷組;
vgcreate vg2 /dev/hdb1 /dev/hdc1; #一個卷組可以包含多個物理卷;
vgscan; #掃描看看剛創建的卷組;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Reading all physical volumes. This may take a while...
Found volume group "vg2" using metadata type lvm2
Found volume group "vg1" using metadata type lvm2
- - - - - - - - - - - - - - - - - - - - - - - - - - -
vgdisplay -v vg2; #顯示卷組vg2的信息;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Using volume group(s) on command line
Finding volume group "vg2"
--- Volume group ---
VG Name vg2
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 159.99 GB
PE Size 4.00 MB
Total PE 40958
Alloc PE / Size 0 / 0
Free PE / Size 40958 / 159.99 GB
VG UUID m2BEoc-liXS-h3dn-L4tH-ORF7-bG5p-Yx052h
--- Physical volumes ---
PV Name /dev/hdb1
PV UUID 6rdZod-Cprh-a9tS-zCK2-5DVx-hkFC-7ndR04
PV Status allocatable
Total PE / Free PE 20479 / 20479
PV Name /dev/hdc1
PV UUID 1coCsZ-BFCW-kYmJ-uCfG-jtol-WqjC-auA4zX
PV Status allocatable
Total PE / Free PE 20479 / 20479
- - - - - - - - - - - - - - - - - - - - - - - - - - -
vgextend vg1 /dev/hdd1; #將物理卷/dev/hdd添加到卷組vg1中;
pvmove /dev/hdd1; #準備從卷組vg1中移除物理卷/dve/hdd,先騰空該物理卷的數據;
vgreduce vg1 /dev/hdd1; #將物理卷/dev/hdd移出卷組vg1;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3.6 創建邏輯卷的范例:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lvcreate -L 100M -n lv1 vg1;
lvcreate -L 500M -n lv2 vg1;
lvcreate -L 100G -n lv1 vg2;
lvcreate -L 500M -n lv2 vg2;
ls -l /dev/vg*; #創建邏輯卷(LV)後,會自動產生設備節點;
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
/dev/vg1:
total 0
lrwxrwxrwx 1 root root 19 Aug 8 01:08 lv1 -> /dev/mapper/vg1-lv1
lrwxrwxrwx 1 root root 19 Aug 8 01:09 lv2 -> /dev/mapper/vg1-lv2
/dev/vg2:
total 0
lrwxrwxrwx 1 root root 19 Aug 8 01:08 lv1 -> /dev/mapper/vg2-lv1
lrwxrwxrwx 1 root root 19 Aug 8 01:10 lv2 -> /dev/mapper/vg2-lv2
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
lvscan; #掃描看看剛創建的邏輯卷;
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ACTIVE '/dev/vg2/lv1' [100.00 GB] inherit
ACTIVE '/dev/vg2/lv2' [500.00 MB] inherit
ACTIVE '/dev/vg1/lv1' [100.00 MB] inherit
ACTIVE '/dev/vg1/lv2' [500.00 MB] inherit
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
lvdisplay /dev/vg2/lv1; #顯示邏輯卷信息;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
--- Logical volume ---
LV Name /dev/vg2/lv1
VG Name vg2
LV UUID 0Y3o6N-pVlw-gFd9-8zSH-nS0D-27eH-2u4GU4
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 GB
Current LE 25600
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:1
- - - - - - - - - - - - - - - - - - - - - - - - - - -
lvdisplay vg2; #顯示卷組vg2中的所有邏輯卷信息;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
--- Logical volume ---
LV Name /dev/vg2/lv1
VG Name vg2
LV UUID 0Y3o6N-pVlw-gFd9-8zSH-nS0D-27eH-2u4GU4
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 GB
Current LE 25600
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/vg2/lv2
VG Name vg2
LV UUID UkUiTC-BO5l-3om3-VY1N-6pG2-AWpe-6zKV8X
LV Write Access read/write
LV Status available
# open 0
LV Size 500.00 MB
Current LE 125
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
- - - - - - - - - - - - - - - - - - - - - - - - - - -
擴大空間:
lvextend -L +500M vg1/lv1; #添加500M空間到邏輯卷vg1/lv1;
e2fsck -f /dev/vg1/lv1; #先掃描一下掃描文件系統;
resize2fs /dev/vg1/lv1; #擴大文件系統;
縮小空間:
e2fsck -f /dev/vg1/lv1; #先掃描一下掃描文件系統;
resize2fs /dev/vg1/lv1 700M; #縮小空間,新空間等于700M;
lvreduce -L -200M vg1/lv1; #邏輯卷空間減少200M(因為原先的總空間為900M);
lvreduce -L 700M vg1/lv1; #也可以直接將邏輯卷空間變更為700M;
resize2fs /dev/vg1/lv1; #重新調整文件系統的空間;
注意:
可以不創建文件系統而直接使用邏輯卷LV,直接進行數據讀寫操作以提高性能. 也就是說可以
將邏輯卷當作裸设备(raw device)來使用,例如有些數據庫系統就是利用這種方式來儲存資料.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3.7 其他LVM的操作范例:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
如欲保存數據,需先騰空相關物理卷的數據,例如:
pvmove /dev/hda1; #騰空物理卷/dev/hda數據;
先刪除卷組中的所有邏輯卷:
lvremove vg1/lv1; #刪除邏輯卷vg1/lv1;
lvremove /dev/vg1/lv2; #刪除邏輯卷vg1/lv2;
lvremove vg2/lv1; #刪除邏輯卷vg2/lv1;
將物理卷移出卷組:
vgreduce vg2 /dev/hdb1; #從卷組中移出物理卷;
將物理卷加入卷組:
vgextend vg2 /dev/hdb1; #將物理卷添加到卷組;
如果要刪除卷組,請按如下步驟:
vgchange -a n vg1; #刪除卷組前需要先停止該卷組的活動狀態;
vgremove vg1; #然后再刪除卷組;
注意: 如要刪除整個卷組,需先刪除該卷組的所有邏輯卷;
最后刪除物理卷:
pvremove /dev/hda1; #此命令只在LVM2版本中才有;
維護操作步驟:
vgscan; #掃描卷組的物理卷和邏輯卷狀態信息;
vgchange -ay; #啟動LVM;
vgchange -an; #停止LVM
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3.8 LVM快照
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
快照(snapshot)是LVM所提供的一個非常有用的特性. 利用快照您可以凍結一個正在使用中的
邏輯卷,然后制作一份凍結時刻的備份,這個備份是具有一致性的. 快照是特殊類型的邏輯卷,
它含有創建時刻所指定的原始邏輯卷的完整數據,因此您可以操作快照而無需擔心數據的變更
令備份失效.
lsmod | grep dm; #使用snapshot需要內核模塊dm-snapshot;
modprobe dm-snapshot; #如有需要,必須先加載此模塊;
建立邏輯卷vg1/lv1的快照:
lvcreate -L500M -s -n sh1 vg1/lv1;
lvscan; #看看剛創建的快照;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
ACTIVE Original '/dev/vg1/lv1' [1.00 GB] inherit
ACTIVE '/dev/vg1/lv2' [2.00 GB] inherit
ACTIVE '/dev/vg1/lv3' [3.00 GB] inherit
ACTIVE Snapshot '/dev/vg1/sh1' [500.00 MB] inherit
- - - - - - - - - - - - - - - - - - - - - - - - - - -
快照卷無需做格式化步驟,可以直接將快照卷掛載,卸載等操作,而且操作完成後,可以立即刪除
快照,因為快照不會自動更新,長久保留是沒有意義的:
lvremove /dev/vg1/sh1; #刪除快照;
注意: 創建快照卷的容量必須大于原始卷的實際數據總量(通常是1.1倍);
通常創建快照卷的主要目的是做備份用途, 可以寫一個簡單的備份腳本來自動創建快照, 然后
掛載進行備份, 備份完成後又自動卸載和刪除. 因為快照的創建速度非常快, 所以使用快照來
操作備份作業不僅可以解決一致性問題, 而且可以減少備份時間. 請參考如下代碼:
vi snapshot_backup.sh; #建立備份腳本;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/bash
today=`date "+%Y%m%d"`;
lvcreate -L1G -s -n sh1 /dev/vg1/lv1;
mount /dev/vg1/sh1 /disk/vg1/sh1;
tar -zcvf /tmp/snapshot_backup_$today.tar.gz /disk/vg1/sh1/*;
umount /dev/vg1/sh1;
lvremove -f /dev/vg1/sh1;
- - - - - - - - - - - - - - - - - - - - - - - - - - -
chmod 755 snapshot_backup.sh; #設置運行權限;
可以將此備份腳本設置成每天定時運行,就可當成是一個完整備份的方案.