LVM 邏輯卷建立與管理
LVM ( Logical Volume Manager ) 是基於核心的一種邏輯卷管理器,允許使用者動態調整檔案系統大小,可以利用快照功能備份資料。
LVM分為:物理卷 卷組 邏輯卷
物理卷:(PV)是LVM最底層概念,和磁碟份區是對應的關係(一個分割槽對應一個物理卷,由命令生成。)
卷 組:(VG)由一個或多個物理卷組成,大小取決於物理卷的個數及容量,建立時可以指定其PE大小。卷組我們可以看成是一個磁碟裝置。
PE(Physical Extent)即物理長度,邏輯意義上磁碟最小儲存單位,預設大小為4M。
邏輯卷:(LV)是LVM邏輯意義上的分割槽,可以指定多少容量來建立分割槽大小,最後格式化建立檔案系統掛載使用。
一般常用的幾個命令:
PV: pvcreate (建立物理卷)
pvremove(移除物理卷)
pvmove(把PV上的資料移動其它PV上,移除物理卷之前使用。)
pvscan
pvs(簡單檢視PV卷)
pvdispaly(檢視PV卷的祥細資訊)
vg: vgcreate(建立卷組)
vgremove(移除卷組)
vgs(簡單的檢視VG卷的資訊)
vgscan()
vgdispaly(檢視VG的詳細資訊)
vgextend(擴充套件VG)
vgreduce(縮減VG)
LV:lvcreate (建立LV卷)
lvremove (移除LV卷)
lvs (簡單檢視LV卷資訊)
lvscan
lvdispaly (檢視LV卷的祥細資訊)
lvextend (擴充套件LV卷)
lvreduce (縮卷LV卷)
centos 6 :resize2fs 調整lv大小
*****************************************************************************************
命名方式:
dm: device mapper 裝置對映
裝置檔案:/dev/卷組名/邏輯卷名
/dev/mapper/卷組名-邏輯卷名
假如系統是一卷組為myvg 邏輯卷為lvdata 則在目錄中表示如下:
第一種:/dev/myvg/lvdata # 使用者一般用此方式訪問
第二種:/dev/mapper/myvg-lvdata # 核心識別
********************************************************************************************
建立LVM邏輯卷:
1、準備建立PV卷的分割槽
# fdisk /dev/<磁碟名>
2、建立PV卷
# pvcreate /dev/<分割槽名>
3、建立 VG卷組
# vgcreate vg_name /dev/sda[1...] # 可以一次指定多個PV
-s 建立時指定其PE大小,預設為4M
4、建立LV卷
#lvcreate -l <PE數量> -n <lv名稱> /dev/vg_name
也可以使用 -L 指定大小,單位為M,G 等
***********start****************
1、建立磁碟分割槽,並把型別更改為8e LVM卷,一定要改,避免重灌系統後,核心不能識別該分割槽
使用fdisk /dev/sda 建立新的分割槽 t 選項指定分割槽的型別。
Device Boot Start End Blocks Id System /dev/sda1 * 1 1913 15360000 83 Linux /dev/sda2 1913 2168 2048000 82 Linux swap / Solaris /dev/sda3 2168 6527 35019103+ 5 Extended /dev/sda5 2168 2299 1057662 8e Linux LVM # 新增的 /dev/sda6 2300 2431 1060258+ 8e Linux LVM # 新增的
建立分割槽後,使用如下兩個命令讓核心重新識別新的分割槽
# kpartx -af /dev/sda # partx -a /dev/sda # cat /proc/partitions # 檢視分割槽是否以被核心識別,沒的重新執行以上命令
2、建立PV
[[email protected] ~]# pvcreate /dev/sda[5..6] Physical volume "/dev/sda5" successfully created Physical volume "/dev/sda6" successfully created [[email protected] ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda5 lvm2 a-- 1.01g 1.01g /dev/sda6 lvm2 a-- 1.01g 1.01g
3、建立VG
[[email protected] ~]# vgcreate myvg /dev/sda5 /dev/sda6 # 使用了兩個pv建立了一個VG Volume group "myvg" successfully created [[email protected] ~]# vgs # 簡單檢視vg的資訊 VG #PV #LV #SN Attr VSize VFree myvg 2 0 0 wz--n- 2.01g 2.01g
[[email protected] ~]# vgdisplay # 檢視其祥細資訊,檢視時,可以指定一個VG名稱。 --- Volume group --- VG Name myvg 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 2.01 GiB # VG大小 PE Size 4.00 MiB # 預設的PE大小為4M 可以在建立VG使用-s 指定其預設大小 Total PE 515 Alloc PE / Size 0 / 0 Free PE / Size 515 / 2.01 GiB VG UUID B4Soui-Z6Fx-aEht-hTmG-lCAP-1j6Z-Bp7eJO
4、建立LV
# lvcreate -L +1.5G -n lvdata /dev/myvg # -L指定大小 -n 指定名稱,可以使用小l指定其PE的個數。 Logical volume "lvdata" created # lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lvdata myvg -wi-a----- 1.50g
5、建立檔案系統(格式化)並掛載使用
# mke2fs -t ext4 /dev/myvg/lvdata # 建立檔案系統,指定其為ext4的型別 # mkdir /mnt/lvmdata # 建立一個掛載目錄 # mount /dev/myvg/lvdata /mnt/lvmdata/ # 掛載卷
***********end**********************
當使用過程中資料不斷增大,慢慢LVM卷大小不能滿足我們的需求,這時需要增加其大小.
邏輯卷擴充套件的步驟:
1、先確定擴充套件的大小;並確保所屬的卷組有足夠的剩餘空間;不夠就需要增加PV卷(VG卷滿足的話這一步是可以省略的, 使用vgs檢視VG卷組夠不夠)
# 使用fdisk命令 新建一個分割槽,-t 指定其型別為8e
# pv /dev/<新建的分割槽名>
# vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
2、擴充套件物理邊界:
# lvextend -L [+]Size /path/to/lv_device
3、擴充套件邏輯邊界:
# resize2fs /path/to/lv_device
**************start*******************
1、增加PV卷,擴充套件VG卷(如果VG卷空間足夠,這一步可以省略)
[[email protected] ~]# vgextend myvg /dev/sda7 Volume group "myvg" successfully extended [[email protected] ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 3 1 0 wz--n- 3.02g 1.52g
2、擴充套件物理邊界(相當於分割槽的大小)注意:+號的使用與不使用的效果。
[[email protected] ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lvdata myvg -wi-ao---- 1.50g [[email protected] ~]# lvextend -L +1G /dev/myvg/lvdata # 也可以使用小寫的l 來增加PE的個數 Extending logical volume lvdata to 2.50 GiB
3、擴充套件邏輯邊界(相當於檔案系統大小。也就是說格式化後的大小,可以這麼來理解)
[[email protected] ~]# df -h # 擴充套件前檢視 Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 974M 13G 7% / tmpfs 729M 0 729M 0% /dev/shm /dev/mapper/myvg-lvdata 1.5G 35M 1.4G 3% /mnt/lvmdata # 物理邊界己經擴充套件到了2.5G了但這裡還是1.5 [[email protected] ~]# resize2fs /dev/myvg/lvdata # 擴充套件邏輯邊界 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/lvdata is mounted on /mnt/lvmdata; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/myvg/lvdata to 655360 (4k) blocks. The filesystem on /dev/myvg/lvdata is now 655360 blocks long. [[email protected] ~]# df -h # 擴充套件後的結果 Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 974M 13G 7% / tmpfs 729M 0 729M 0% /dev/shm /dev/mapper/myvg-lvdata 2.5G 35M 2.4G 2% /mnt/lvmdata # 擴充套件後的效果
**************end*******************
注意:如果條件允許,最好先解除安裝檔案系統,然後使用e2fsck 檢查檔案系統再擴充套件。
縮減邏輯卷的步驟:
1、解除安裝卷,並執行強制檢測
# e2fsck -f /path/to/lv_device
2、縮減邏輯邊界:
# resize2fs /path/to/lv_device SIZE
3、縮減物理邊界:
# lvreduce -L [-]Size /path/to/lv_device
4、移動PV卷資料到其它PV卷,移除卷組中的PV,再移除PV卷
************start********************
1、解除安裝卷,並執行強制檢測
# umount /dev/myvg/lvdata # e2fsck -f /dev/myvg/lvdata
2、縮減邏輯邊界
# resize2fs /dev/myvg/lvdata 2G
3、縮減物理邊界
# lvreduce -L 2G /dev/myvg/lvdata # 縮減到了2G,注意不寫+號就是到多少G # mount /dev/myvg/lvdata /mnt/lvmdata/ # 然後再掛載使用
4、移除空閒PV
如果此時我們要移除sda5
[[email protected] ~]# pvs 首先檢視PV卷,看PV使用情況,此時sda5有資料在使用我們需要移動資料到其它PE PV VG Fmt Attr PSize PFree /dev/sda5 myvg lvm2 a-- 1.00g 12.00m /dev/sda6 myvg lvm2 a-- 1.01g 0 /dev/sda7 myvg lvm2 a-- 1.01g 1.01g
[[email protected] ~]# pvmove /dev/sda5 # 移動資料到其它PE /dev/sda5: Moved: 0.8% /dev/sda5: Moved: 50.8% /dev/sda5: Moved: 100.0%
[[email protected] ~]# vgreduce myvg /dev/sda5 # 縮減VG卷組
[[email protected] ~]# pvremove /dev/sda5 # 移除PV Labels on physical volume "/dev/sda5" successfully wiped
********************end***************
擴展卷組:
1、準備要新增的物理卷;
2、擴展卷組:
新增物理卷至卷組中;
# vgextend vg_name /path/to/pv_device
縮減卷組:
1、確定要移除的物理卷的總空間大小,要小於VG當前的可用空間大小;
2、將要移除的物理捲上的所有PE移動至其它PV
# pvmove /path/to/pv_device
3、縮減vg
# vgreduce vg_name /path/to/pv_device
快照:
由於 我們使用cp命令對資料進行復制,如果資料過大,而且正在使用,會造成時間戳不一致,導致資料還原不可用
快照卷也是一個邏輯卷,通常為只讀,大小不要求和原卷一樣大小,建立後的快照不會受原卷資料的影響(原卷資料改變,快照資料不會跟
著改變),可以用來備份
用快照備份完成資料後,解除安裝 ,刪除快照卷
快照卷:邏輯卷的一種,通常為止讀(-p {r|w})
建立快照卷-->掛載快照卷-->備份快照卷裡的資料-->解除安裝快照卷-->移除快照卷
# lvcreate -s -L Size -n Name -p r /path/to/original_lv_device
-p 指定r 或rw
-L 邏輯卷的大小 ,也可以使用小寫L指定其塊大小
-n 指定其名
*************start******************
1、給邏輯卷/dev/vg_group1/test_lv1建立快照
[[email protected] ~]# lvcreate -L 50M -s -p r -n my_snap /dev/vg_group1/test_lv1 Rounding up size to full physical extent 52.00 MiB Volume group "vg_group1" has insufficient free space (1 extents): 13 required.
2、備份資料 (先掛載快照,再備份快照資料完成對原始卷的備份)
# mkdir /mnt/backup # mount /dev/vg_gruop1/my_snap /mnt/backup #cd /mnt/backup; tar cjvf /opt/mysql_data.tar.bz2
3、刪除快照卷
# lvremove /dev/vg_group1/my_snap
***************end***********************
還有一種:犧牲快照恢復原始卷
lvcreate -L +20M -s -n lv1s /dev/vg1/lv1 建立快照 [[email protected] lv1]# lvs 顯示LV卷 LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv1 vg1 owi-aos-- 80.00m lv1s vg1 swi-a-s-- 20.00m lv1 0.06 [[email protected] lv1]# ls 檢視原如卷之前的內容 config-2.6.32-358.el6.i686 symvers-2.6.32-358.el6.i686.gz vmlinuz-2.6.32- 358.el6.i686 initramfs-2.6.32-358.el6.i686.img System.map-2.6.32-358.el6.i686 [[email protected] lv1]# rm -rf sy* 刪除原始卷一些內容 [[email protected] lv1]# ls config-2.6.32-358.el6.i686 System.map-2.6.32-358.el6.i686 initramfs-2.6.32-358.el6.i686.img vmlinuz-2.6.32-358.el6.i686 [[email protected] lv1]# umount /mnt/lv1 解除安裝原如卷 [[email protected] ~]# lvconvert --merge /dev/vg1/lv1s 用快照卷恢復原始卷 [[email protected] ~]# mount /dev/vg1/lv1 /mnt/lv1 [[email protected] ~]# ls /mnt/lv1 恢復後的資料,和之前做快照的資料一樣 config-2.6.32-358.el6.i686 System.map-2.6.32-358.el6.i686 initramfs-2.6.32-358.el6.i686.img vmlinuz-2.6.32-358.el6.i686 symvers-2.6.32-358.el6.i686.gz