1 基本概念
LVM,logical volume manager,邏輯卷管理器,屬于磁盤的一種使用方式,克服基本磁盤的弊端,相當于windows裡面的動态磁盤。
PV(physical volume)實體卷:可以是一個磁盤或一個分區
VG(volume group)卷組:多個PV組成的一個組,至少要一個PV
PE實體塊:PV加入VG中時會劃分等大的實體塊,這些實體塊叫PE
LE邏輯塊:與PE是映射關系,兩者等大,且一一對應
LV邏輯卷:由LE組成,多個LE組成一個LV
LVM工作原理:在Linux中把分區或磁盤辨別為PV,多個PV組成卷組,PV加入VG時會被劃分成等大的實體塊叫PE,PE與LE一一等大映射,多個LE組成LV,将LV挂載使用,資料存儲在PE中,也就是存在磁盤中。當LV容量不夠時,隻需要随機劃分PE即可。
2 LVM的使用
1)建立PV:pvcreate 分區或磁盤裝置檔案
pvcreate /dev/sda2 //pv名就是磁盤或分區所在目錄
2)檢視系統内PV的狀态:pvs 或 pvdisplay 或 pvscan
3)建立VG:vgcreate VG名 PV名
例:vgcreate testvg /dev/sda1 //-s指定PE大小,如果不指定,預設大小就是4M
4)檢視系統VG的狀态:vgs 或者vgdisplay 或者vgscan
5)建立LV:lvcreate -L lv大小 –n lv名稱 vg名
例如 : lvcreate -L 500M -n testlv testvg
6)格式化LV,挂載使用
mkfs –t 檔案系統類型 /dev/vg名/lv名
建立挂載點 mkdir /mnt/目錄名
挂載: mount /dev/vg名/lv名 /mnt/目錄名
7)開機自動挂載LV
編輯配置檔案 vim /etc/fstab
在末尾添加:/dev/vg名/lv名 挂載點 檔案系統類型 權限 是否備份 是否檢查
例如:vim /etc/fstab
/dev/testvg/testlv /mnt/testlv ext4 defaults 0 0
8)删除LVM
如果有挂載的LV,需要先解除安裝—— umount 挂載點
删除lv —— lvremove /dev/vg名/lv名
删除vg —— vgremove /dev/vg名
删除pv—— pvremove /dev/pv名
注意:删除過程不能更改。但是可以跳過删除lv,直接删除vg
9)LVM擴容與縮容
對象:VG LV
原理:VG擴容就是向VG中增加PV,VG縮容就是從VG中剔除PV。LV擴容就是向LV中增加LE,LV縮容就是從LV中剔除LE。LV的擴容需要VG有足夠的空間
VG擴容與縮容
擴容: vgextend vg名 pv名 縮容: vgreduce vg名 pv名
LV的擴容與縮容
擴容: lvextend -L +擴充的容量 -f -r /dev/vg名/lv名
縮容: lvreduce -L -擴充的容量 -f -r /dev/vg名/lv名
注意:有+、-号時,就是在原有容量基礎上加減多少,沒有+、-号就是直接變成多少容量;
VG、LV的縮容可能會破壞資料,是以很少縮容;
LV需要進行格式化之後才能進行擴容與縮容操作。
3 條帶化LV
1)條帶化LV概念
磁盤陣列 raid:
raid0條帶化,至少需要兩塊規格大小一樣的磁盤,組成一個磁盤組。存儲與讀取檔案時會多個磁盤多任務寫入或讀取。
raid1 鏡像化,一個磁盤是另一個磁盤的備份,删掉一個磁盤裡的資料,另一個磁盤也會删掉這個資料,但是如果一個磁盤損壞了,還可以通過另一個磁盤擷取資料。
條帶化LV和raid0原理一樣。也是需要規格大小一樣的PV。
2) 建立條帶化LV:在VG中至少需要兩塊PV,PV的大小要一緻
建立:lvcreate –l 100%FREE -I 2 –I 64 –n lv名 vg名
注:第一個參數為小寫的L,用于指定建立lv使用的磁盤空間
第二個參數為小寫的i,用于指定建立lv使用的磁盤數量
第三個參數為大寫的i,用于指定條帶化lv的帶區大小
建立完成後,即可格式化、挂載使用
4 同時建立lv及其鏡像
在vg中至少需要兩塊PV,PV的大小要一緻
建立鏡像LV:lvcreate -L lv的大小 -m1 -n lv名 vg名
注:LV的大小不能大于一塊pv的大小;
-m1:建立LV時同時在vg中的另一塊pv上建立其鏡像
舉例說明:
1)将/dev/sdb建立為pv,加入vg,建立LV,格式化後挂載到/mnt/aa,在/mnt/aa中建立f1
pvcreate /dev/sdb vgcreate vg /dev/sdb
lvcreate -L 500M -n lv vg
mkfs -t ext4 /dev/vg/lv mkdir /mnt/aa
mount /dev/vg/lv /mnt/aa touch /mnt/aa/f1
2) 添加pv /dev/sdc至vg中,建立LV的鏡像至/dev/sdc中
vgextend vg /dev/sdc
lvconvert -m1 /dev/vg/lv /dev/sdc
3)破壞pv /dev/sdb ,确認f1檔案仍然存在
dd if=/dev/zereo of=/dev/sdb count=10
檢視被破壞的pv:pvs ,被破壞的pv顯示unknown device
确認f1檔案存在:find /mnt/aa -name f1
4)将損壞的pv從vg中剔除,并删除鏡像關系
剔除pv: vgreduce --removemissing --force /dev/vg
删除鏡像關系:lvconvert -m0 /dev/vg/lv
5)将新的pv /dev/sdd 加入vg,并重新建立LV的鏡像
擴充vg:vgextend vg /dev/sdd
建立鏡像: lvconvert -m1 /dev/vg/lv /dev/sdd
轉載請注明出處,謝謝!