每個Linux系統的使用者在安裝Linux時都應該遇到過這樣的困境:在爲系統分區時,如何精確評估和分配各個磁盤分區的容量,因爲系統管理員不但要考慮到當前某個分區需要的容量,還要預見該分區以後可能需要的容量的最大值。因爲如果估計不夠準確,當遇到某個分區不夠用時管理員可能甚至要備份整個系統、清除硬盤、重新對硬盤分區,然後恢復數據到新分區。雖然有很多動態調整磁盤的工具可以使用,例如PartitionMagic等等,但是它並不能完全解決問題,因爲某個分區可能會再次被耗盡;另外一個方面這需要重新引導系統才能實現,對於很多關鍵的服務器,停機是不可接受的,而且對於添加新硬盤,希望一個能跨越多個磁盤驅動器的文件系統時,分區調整程序就不能解 決問題。因此完美的解決方法應該是在零停機前提下可以自如對文件系統的大小進行調整,可以方便實現文件系統跨越不同磁盤和分區。幸運的是Linux提供的邏輯盤卷管理機制就是一個完美的解決方案。
LVM是什麼:
LVM是(Logical Volume Manager) 邏輯卷管理的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制。LVM是建立在硬盤和分區之上的一個邏輯層,屏蔽了底層磁盤佈局,便於動態調整磁盤容量來提高磁盤分區管理的靈活性。它可以將一個或多個底層塊設備組織成一個邏輯設備的卷組,管理員可以在卷組上隨意創建邏輯卷組(logical volumes),並進一步在邏輯卷組上創建文件系統,管理員通過LVM可以方便的調整存儲卷組的大小,並且可以對磁盤存儲按照組的方式進行命名、管理和分配 。
LVM模型圖:
構建過程:
創建PV:
PV即(Physical Volume)物理卷的縮寫。它可以是整個硬盤,或使用fdisk等工具建立的普通磁盤分區,包括許多默認4MB大小的PE(Physical Extent, 基本單元),是LVM的基本存儲邏輯塊。
常用基本命令:
pvs: 對PV一些簡要信息的顯示
pvdisplay:顯示pv的詳細信息(後可跟設備,意爲只顯示該設備的信息)
pvremove:(remove a physical volume) 刪除物理卷
pvmove:(move physical extents(PES)) 用於pv上的數據移動
pvcreate /dev/DEVICE: 創建pv
常用選項:
-f:強制創建物理卷,不需要用戶確認
-u:指定設備的UUID
-y:所有的問題都回答“yes”
-Z:是否利用前4個扇區
這裏以一塊磁盤上的三個分區顯示過程:磁盤分區編號爲6、7、8,大小分別爲4G 8G 8G
創建VG:
VG即(Volume Group)卷組的縮寫。它是一個或多個物理卷組合而成的整體,可以在卷組上創建一個或多個LV(邏輯卷)。
常用基本命令:
vgs:用於簡要顯示vg信息;
vgdisplay:用於顯示vg的詳細信息(後可跟設備,表示只顯示此設備的詳細信息)
vgextend 卷組名 卷組路徑[PhysicalDevicePath...] 表示擴展卷組
vgreduce:reduce a volume group 縮減卷組大小
使用格式:
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
注意:vg移除之前,先做pvmove;把pv上的PE至同一個卷組中的其它pv上去;
vgremove:remove a volume group 表示用於移除卷組
vgcreate [-s #[kKmMgGtTpPeE]] 卷組名 物理卷路徑[PhysicalDevicePath...]
[-s #[kKmMgGtTpPeE]]:此選項表示指明PE大小;
默認爲4M 支持單個邏輯卷最大容量256GB
創建一個卷組名爲:myvg的卷組
創建LV:
LV即(Logicla Volume)邏輯卷的縮寫。它是從卷組中分割出的一塊空間,用於建立文件系統。
常用基本命令:
lvs:用於簡要顯示lv信息
lvdisplay:用於詳細顯示lv信息(同樣支持後面跟設備,意思是隻查看某一個設備的詳細)
lvcreate -L #[mMgGtT] -n 邏輯卷卷名 卷組 表示創建lv
也可以使用 -l 參數,通過指定PE數來設定邏輯分區大小
lvremove /dev/VG_NAME/LV_NAME 用於刪除邏輯卷
同卷組一樣,邏輯卷在創建的過程中也被分成了一塊一塊的空間,這些空間稱爲LE(Logical Extents),在同一個卷組中,LE的大小和PE是相同的,並且一一對應。
創建一個5G大小的邏輯卷,邏輯卷卷名爲testlv
格式化:
創建目錄並掛載:
擴展邏輯卷:
# lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
使用+號表示增加了多少;不使用+號表示擴展到多少,即直接指明大小到多少
# resize2fs /dev/VG_NAME/LV_NAME
重新修改文件系統大小,不帶參數大小表示使用分區上所有可用大小
縮減邏輯卷步驟:
卸載設備:
# umount /dev/VG_NAME/LV_NAME
文件系統做強制檢測和修復:
# e2fsck -f /dev/VG_NAME/LV_NAME
縮減邏輯邊界; # 號表示縮減至多大
# resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
注意:此處縮減後的大小一定要能容納下當前邏輯卷裏面的內容;否則,文件會損壞
使用lvreduce命令縮減: - 號表示減少了多少
# lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
mount命令重新掛載設備:
關於數據備份的幾個介紹:
冷備份:卸載掉文件系統,不能讀不能寫
溫備份:不卸載文件系統,能讀取文件系統內容但是不能寫
熱備份:不卸載文件系統,既能讀取文件系統內容又能寫入
快照(snapshot):
主要是用作在線備份
快照卷核心技術:寫時複製(copy-on-write,COW)
寫時複製快照在快照時間點之後,沒有物理數據複製發生,僅僅複製了原始數據物理位置的元數據。因此快照創建非常快,可以瞬間完成。然後快照副本跟蹤原始卷的數據變化(即原始卷寫操作),一旦原始卷數據塊發生寫操作,則先將原始卷數據塊讀出並寫入快照卷,然後用新數據塊覆蓋原始卷。這樣我們訪問快照捲上的數據仍舊是寫操作前的,可以保證我們備份數據的一致性。
使用格式:
lvcreate -L #[mMgGtT] -p r(只讀方式) -s -n snap_lv_name original_lv_name
注意事項:
快照卷和原卷必須在同一卷組中;
快照卷要針對已有目標卷創建
創建的快照卷要足夠容下在備份數據完成前,數據塊發生變化寫入快照卷的大小
一旦超出快照卷大小,快照自動作廢