LVM:Logical Volume Manager,邏輯卷管理器。它是在Liunx環境下對磁盤分區管理的一種機制。屏蔽了底層磁盤佈局,便於動態調整磁盤容量。也可以在RAID上創建使用,增加了其冗餘性。但是/boot用於存放引導文件,不能應用LVM機制。
其工作機制則在,把底層多個物理卷(PV,可以是多塊磁盤,也可以是多個物理分區)組合爲一個卷組(VG),再在卷組創建一個或多個邏輯分區(LV),邏輯分區(LV)可以實現動在不損壞數據前提下態調整分區大小,便於磁盤的管理。各個卷詳情如下:
PV:Physical Volume,物理卷
指整個磁盤或用fdisk等工具建立的普通分區,也可以是在邏輯上與磁盤分區有相同功能的RAID。它是LVM基本存儲邏輯塊。
每一塊物理卷PV都是由多個大小等同的物理基本塊(PE:Phsical Extent)組成,類似於普通磁盤的扇區。每個PE都有唯一編號,它是可以被LVM尋址的最小單元,其大小可以在創建卷組VG時自行配置,默認爲4MB。
VG:Volume Group,卷組
它是由一個或多個PV物理卷組合而成的一個整個。可以在卷組上創建一個或多個邏輯卷(LV)。
LV:Logical Volume,邏輯卷
類似於非LVM系統中的磁盤分區,是從卷組VG中分出的一塊空間,用於創建文件系統。由多個大小等同的邏輯基本塊(LE:Logical Extent)組成,是LV可被尋址的基本單元,其大小和PE相同,並且一一對應。
dm:device mapper,設備映射
將一個或多個底層塊設備組織成一個邏輯設備的模塊,其設備路徑爲:/dev/dm-#
LVM設備文件存儲路徑:/dev/mapper/VG_NAME-LV_NAME或/dev/VG_NAME/LV_NAME,這兩個路徑文件都是指向/dev/dm-#的鏈接文件。
創建管理:
一、創建分區:
先用fdisk等分區創建工具創建分區,方法同創建普通分區一樣,但是需要將分區類型設置爲 8e(Linux LVM)。創建過程不理詳述,創建結果如下:
在/dev/sdb磁盤上創建了4塊大小爲10G的邏輯分區,/dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8,分區類型爲:Linux LVM。
二、物理卷PV管理
創建PV:pvcreate /dev/DEVICE
創建單個分區:pvreate 命令直接加分區就行
pvcreate /dev/sdb5
創建多個分區:pvreate 命令後多個分區以空格隔開
pvcreate /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8
查看PV信息:
查看簡要信息:pvs /dev/DEVICE
查看詳細信息:pvdisplay /dev/DEVICE
不加具體分區則是查看系統內全部PV信息;
例如:將/dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8四個分區都創建爲PV。
創建過程和結果如下:查看PV詳細信息只以查看/dev/sdb5爲例。
刪除PV:pvremove /dev/DEVICE
可刪除單個分區,也可刪除多個分區, 用法同創建PV命令,不再詳述。
移除PV:pvmove /dev/DEVICE
注意區分刪除PV,只是移除PV上的數據,用於卷組VG容量縮減,可先了解,
到VG縮減時再詳述。
三、卷組VG管理
創建VG:vgcreate [-s #[kKmMgGtTpPeE]] VG_Name PV_Path [PV_Path...]
將單個PV創建爲一個卷組:vgcreate VG_Name PV_Path
如:vgcreate myvg /dev/sdb5
將多個PV創建爲一個卷組:vgcreate VG_Name PV_Path PV_Path... 多個PV空格隔開
如:vgcreate myvg /dev/sdb5 /dev/sdb6 /dev/sdb7
-s #[kKmMgGtTpPeE]:表示指定物理基本塊PE大小,默認爲4MB。
查看VG信息:
查看簡要信息:vgs VG_Name;
查看詳細信息:vgdisplay VG_Name
不加VG_Name則表示查看系統內全部VG信息;
例如:創建由/dev/sdb5 /dev/sdb6 /dev/sdb7三個分區組成的名爲myvg的VG。
要求PE大小爲4MB。創建過程及結果如下:
現在可再可看PV,會發現/dev/sdb5 /dev/sdb6 /dev/sdb7這三個分區已屬於myvg的卷組,
查看結果如下:
刪除VG:vgremove VG_Name
vgremove命令後加VG_Name就可把相應VG刪除,很簡單,不再多述。
四、VG的擴展和縮減
當VG的容量不夠用時,可對VG容量做擴展,也可以對VG容量做縮減,但要注意縮減時需先移除
PV中的數據(當然是其它PV剩餘容量可容納移除PV內的數據的前提下),否則會損壞原有數據。
具體操作如下:
1、擴展VG:vgextend VG_Name PV_Path [PV_Path...]
擴展時跟前面一樣,需要事先創建分區並創建PV,可將單個分區擴展至Vg,也可同時將
多個分區擴展至VG。
例如:將/dev/sdb8(已事先做好分區並創建了PV)擴展至名爲myvg的VG中。
擴展過各及結果如下;
可看到myvg的PV數量由原來的3塊已變爲4塊,容量由於原來30G已擴展至40G。
查看/dev/sdb8的PV,已經是屬於myvg的VG了。擴展成功。
2、縮減VG:vgreduce VG_Name PV_Path [PV_Path...]
縮減VG時,也可縮減單個分區,也可同時縮減多個分區。但是縮減前一定要先移除PV數據
例如:把/dev/sdb8從名爲myvg的VG中縮減。縮減過程和結果如下:
可以看到myvg的PV塊數由4塊變爲了3塊,容量也由40G變爲30G。查看/dev/sdb8,已不屬於
myvg的VG中。
注意:在移除/dev/sdb8數據時提示“No date to move for myvg”,是因爲原/dev/sdb8
甚至整個myvg的VG中都無數據,所以無數據可移除,但是在生產環境中一定要事先移除PV數據
再做VG縮減,以免對原有數據造成損壞。
五、邏輯卷LV管理
創建LV:lvcreate -L #[mMgGtT] -n LV_Name VG_Name
-L #[mMgGtT]:指定LV的空間大小,最大可與VG空間容量相同,但不可超過VG空間容量
-n LV_Name:指定LV的名字。
查看LV信息:
查看簡要信息:lvs [/dev/VG_Name/LV_Name|/dev/mapper/VG_Name-LV_Name]
查看詳細信息:lvdisplay [/dev/VG_Name/LV_Name|/dev/mapper/VG_Name-LV_Name]
不加LV路徑時則表示可看系統內所有LV信息;
例如:在myvg卷組中創建大小爲10G的邏輯卷mylv。創建過程及結果如下:
LV創建完成後,在LV上創建文件系統和完成掛載後,LV便可正常使用。
例如:對mylv的LV創建ext4格式的文件系統,卷標爲MYLV,並掛載至/mylvm目錄。
操作過程和結果如下:
可複製文件到/mylvm目錄,並查看/mylvm目錄,驗證掛載成功,操作如下:
成功將/etc/fstaby文件複製到/mylvm目錄下,並且/mylvm下存有lost+fonud目錄,掛載成功
刪除LV:lvremove /dev/VG_Name/LV_Name
lvremove命令後加LV路徑,可直接刪除LV,不再詳述。但要注意,需先卸載。
六、LV的擴展和縮減
LV同VG一樣,也可以根據需求對其進行擴展或縮減,可動態調整LV容量大小。但不建議對LV
進行容量縮減操作,這非常容易造成現有數據損壞。具體如下:
1、擴展LV:lvextend -L [+]#[mMgGtT] /dev/VG_Name/LV_Name
-L [+]#[mMgGtT]:表示擴展LV容量大小,帶“+”表示擴展多大,不帶“+”表示擴展
至多大。
注意:重新調整LV容量後,還需用resize2fs命令更新其大小,否則LV還是原有容量。
例如:擴展mylv至15G,要求原有文件不能丟失;擴展過程和結果如下:
擴展LV並更新:
查看擴展結果:
查看原有文件:
2、縮減LV:lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
-L [-]#[mMgGtT]:表示縮減LV容量大小,帶“-”表示縮減多大,不帶“-”表示縮減
至多大。
注意:(1)一般不建議對LV進行容量縮減操作,這非常容易造成現有數據損壞;
(2)保證縮減後的容量一定要比現有數據所佔用的容量要大,否則會損壞數據;
(3)縮減前需先卸載設備,並強制檢測文件系統;
(4)需先更新邏輯容量大小(即resize2fs命令),再縮減LV;
例如:縮減mylv至10G,要求原有文件不能丟失。具體操作和結果如下:
卸載設備和檢測文件系統:
縮減LV:
掛載並查看原有文件:
掛載成功,原有文件無損壞。
七、快照
LVM中擁有快照功能,所謂快照就是在某個時間點對指定數據的一個備份,主要作用就是能夠
進行在線數據的備份與恢復。主要的工作機制就是寫時複製(copy-on-write,COW),其實快照
所複製的並非原始數據本身,而是複製了原始數據物理位置的元數據,所以快照創建非常快,
可以瞬間完成。只有當原始數據塊發生改變時,快照會在原始數據塊發生改變前將原始數據塊復
制並保存下來,這樣我們訪問快照捲上數據仍是原始數據,保證了備份數據的一致性。其實快照
並非真正意義上的備份,而爲備份提供了一份訪問原始數據的通道。
LVM中快照的實現:
lvcreate -s -n snapshot_lv_name -L #[mMgGtT] -p [r|rw] original_lv_name
-s:表示創建LV爲快照;
-n snapshot_lv_name:快照名稱;
-L #[mMgGtT]:表示快照大小;
快照大小可由原始卷數據變化量和計劃快照存活時間來預估快照大小。快照過大,
會造成空間浪費,快照過小,則會造成快照備份失敗。最大爲原始卷一樣大小。
-p:表示權限,可以是r(只讀)或rw(讀寫);
original_lv_name:表示原始卷名稱,也可以是目錄或文件;
注意:1、快照其實也是一個邏輯卷;
2、快照只能對邏輯卷LVM進行備份,並且只能對同一個卷組的邏輯捲進行備份;
例如:對mylv創建快照,並嘗試基於快照備份數據,驗正快照的功能;
1、對mylv創建快照mysnap,並格查看結果:
注意:創建快歸進無需再對快照進行分區格式化。
2、將mysnap掛載至/mysnap目錄,查看目錄是否有mylv卷中數據:
發現快照內有mylv卷中數據。
3、對mylv中fstab文件作更改,並再複製/etc/passwd文件到mylv卷內:
/mylvm目錄下有了passwd文件,且fstab最後一行加了#hell內容。
4、查看快照內內容是否有變化:
快照/mysnap目錄下文件內容無變化。
5、將快照複製到~/back_mylv目錄下,並恢復mylv數據:
備份:
恢復:
發現mylv中的fstab文件恢復。注意:mylvm中passwdy文件還在,因爲此處只恢復了
fstab文件。若要是mylv分區損壞後再恢復時,只有快照當時文件,並無之後修改或新增的
文件。
6、刪除快照:
快照已刪除,快照使命結束。