邏輯卷管理

LVM(邏輯卷管理),位於操作系統和硬盤之間,LVM屏蔽了底層硬盤帶來的複雜性。最簡單的,LVM使得N塊硬盤在OS看來成爲一塊硬盤,大大提高了系統可用性。

 

 

LVM的引入,使得文件系統和底層磁盤之間的關係變得更爲靈活,而且更方便關係。LVM有以下特點:

 

  • 統一進行磁盤管理。按需分配空間,提供動態擴展。
  • 條帶化(Striped)
  • 鏡像(mirrored)
  • 快照(snapshot)

 

 

LVM可以做動態磁盤擴展,想想看,當系統管理員發現應用空間不足時,敲兩個命令就完成空間擴展,估計做夢都要笑醒:)

 

 

LVM的磁盤管理方式

 

LVM中有幾個很重要的概念:

 

  • PV(physical volume):物理卷。在LVM中,一個PV對應就是操作系統能看見的一塊物理磁盤,或者由存儲設備分配操作系統的lun。一塊磁盤唯一對應一個PV,PV創建以後,說明這塊空間可以納入到LVM的管理。創建PV時,可以指定PV大小,即可以把整個磁盤的部分納入PV,而不是全部磁盤。這點在表面上看沒有什麼意義,但是如果主機後面接的是存儲設備的話就很有意義了,因爲存儲設備分配的lun是可以動態擴展的,只有當PV可以動態擴展,這種擴展性才能向上延伸。
  • VG(volume group):卷組。一個VG是多個PV的集合,簡單說就是一個VG就是一個磁盤資源池。VG對上屏蔽了多個物理磁盤,上層是使用時只需考慮空間大小的問題,而VG解決的空間的如何在多個PV上連續的問題。
  • LV(logical volume):邏輯卷。LV是最終可供使用卷,LV在VG中創建,有了VG,LV創建是隻需考慮空間大小等問題,對LV而言,他看到的是一直聯繫的地址空間,不用考慮多塊硬盤的問題。

 

有了上面三個,LVM把單個的磁盤抽象成了一組連續的、可隨意分配的地址空間。除上面三個概念外,還有一些其他概念:

 

 

  • PE(physical extend): 物理擴展塊。LVM在創建PV,不會按字節方式去進行空間管理。而是按PE爲單位。PE爲空間管理的最小單位。即:如果一個1024M的物理盤,LVM的PE爲4M,那麼LVM管理空間時,會按照256個PE去管理。分配時,也是按照分配了多少PE、剩餘多少PE考慮。
  • LE(logical extend):邏輯擴展塊。類似PV,LE是創建LV考慮,當LV需要動態擴展時,每次最小的擴展單位。

 

對於上面幾個概念,無需刻意去記住,當你需要做這麼一個東西時,這些概念是自然而然的。PV把物理硬盤轉換成LVM中對於的邏輯(解決如何管理物理硬盤的問題),VG是PV的集合(解決如何組合PV的問題),LV是VG上空間的再劃分(解決如何給OS使用空間的問題);而PE、LE則是空間分配時的單位。

 

 

 

 

如圖,爲兩塊18G的磁盤組成了一個36G的VG。此VG上劃分了3個LV。其PE和LE都爲4M。其中LV1只用到了sda的空間,而LV2和LV3使用到了兩塊磁盤。

      

串聯、條帶化、鏡像

 

 

串聯(Concatenation): 按順序使用磁盤,一個磁盤使用完以後使用後續的磁盤。

 

條帶化(Striping): 交替使用不同磁盤的空間。條帶化使得IO操作可以並行,因此是提高IO性能的關鍵。另外,Striping也是RAID的基礎。如:VG有2個PV,LV做了條帶數量爲2的條帶化,條帶大小爲8K,那麼當OS發起一個16K的寫操作時,那麼剛好這2個PV對應的磁盤可以對整個寫入操作進行並行寫入。

 



Striping帶來好處有:

 

  • 併發進行數據處理。讀寫操作可以同時發送在多個磁盤上,大大提高了性能。

 

Striping帶來的問題:

 

  • 數據完整性的風險。Striping導致一份完整的數據被分佈到多個磁盤上,任何一個磁盤上的數據都是不完整,也無法進行還原。一個條帶的損壞會導致所有數據的失效。因此這個問題只能通過存儲設備來彌補。
  • 條帶大小的設定很大程度決定了Striping帶來的好處。如果條帶設置過大,一個IO操作最終還是發生在一個磁盤上,無法帶來並行的好處;當條帶設置國小,本來一次並行IO可以完成的事情會最終導致了多次並行IO。

 

鏡像(mirror)

如同名字。LVM提供LV鏡像的功能。即當一個LV進行IO操作時,相同的操作發生在另外一個LV上。這樣的功能爲數據的安全性提供了支持。如圖,一份數據被同時寫入兩個不同的PV。

 

 

使用mirror時,可以獲得一些好處:

  • 讀取操作可以從兩個磁盤上獲取,因此讀效率會更好些。
  • 數據完整複雜了一份,安全性更高。
但是,伴隨也存在一些問題:
  • 所有的寫操作都會同時發送在兩個磁盤上,因此實際發送的IO是請求IO的2倍
  • 由於寫操作在兩個磁盤上發生,因此一些完整的寫操作需要兩邊都完成了纔算完成,帶來了額外負擔。
  • 在處理串行IO時,有些IO走一個磁盤,另外一些IO走另外的磁盤,一個完整的IO請求會被打亂,LVM需要進行IO數據的合併,才能提供給上層。像一些如預讀的功能,由於有了多個數據獲取同道,也會存在額外的負擔。

 

快照(Snapshot)

 

快照如其名,他保存了某一時間點磁盤的狀態,而後續數據的變化不會影響快照,因此,快照是一種備份很好手段。

 

但是快照由於保存了某一時間點數據的狀態,因此在數據變化時,這部分數據需要寫到其他地方,隨着而來回帶來一些問題。關於這塊,後續存儲也涉及到類似的問題,後面再說。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章