上一篇文章已經介紹了RAID技術的原理,那麼RAID的實現呢?有兩種方式,RAID軟件和RAID硬件。可是因軟件RAID佔用主機CPU和主機內存,並且RAID功能不易實現,通常較少使用。因此通常經過硬件RAID,即RAID卡。php
上上篇有提到過SCSI卡,人們通常在這個SCSI卡上增長額外的芯片實現RAID功能。這樣實現了RAID功能的板卡就叫作RAID卡。固然也能夠在南橋芯片上實現RAID的功能,集成在主板上,某些主板廣告中所謂的「板載」RAID芯片就是這種方式。html
RAID卡帶有CPU、ROM、RAM、XOR等主要的芯片,同時也有本身的總線和IO接口,因此RAID卡就是一個小的計算機系統。node
因此,操做系統不用作任何改動,除了RAID驅動程序外,不用安裝額外的任何軟件,能夠直接識別已經通過RAID處理生成的虛擬磁盤。linux
RAID生成虛擬磁盤,包含條帶化,是通過一系列運算的。虛擬盤提供給外面操做系統的文件系統仍然像物理盤,尋址仍然是LBA塊。緩存
這種虛擬盤或者邏輯盤就叫作LUN,Logic Unit Number。架構
LUN對上層OS操做系統而言至關於一塊「物理盤」,OS在這個盤上能夠進行分區和格式化。工具
而這些邏輯盤是如何劃分的,信息是否能夠保存?系統重啓後,操做系統安裝後,是否還存在?spa
RAID卡能夠針對總線上的N塊磁盤進行分組,RAID Group。每組能夠作成本身的RAID級別,沒必要相同。LUN必須是同一個RG中劃分出來的,不能跨RG。操作系統
每一個磁盤上保留了一個區域,專門記錄了邏輯盤劃分信息、RAID類型以及組內其餘磁盤信息,這些信息稱爲RAID信息。SNIA委員會爲了統一各個廠家的信息格式,定義了一種叫作DDF的標準。不少公司在磁盤最末1MB的空間寫入這些信息。並且即便將這些磁盤打亂順序,或者拿到其餘支持這個標準的控制器上,也照樣能識別出劃分好的邏輯盤所需的信息。.net
前面章節描述過SCSI總線能夠鏈接16個設備(32位的SCSI能夠鏈接32個),每一個設備有一個SCSI ID號,也叫Target ID。可是對於大型磁盤陣列,能夠生成幾百甚至上千個虛擬磁盤,爲每一個虛擬磁盤分配一個Target ID是遠遠不夠的。因而將每一個Target ID下再劃分更多的 LUN ID(視ID字段長度而定),即LUN是一個次級尋址ID,虛擬磁盤也就變成了Target x LUN y,因此LUN ID的做用是擴充了Target ID。
LUN是SCSI協議中的名字,後面人們把硬件層次生成的虛擬磁盤統一稱爲」LUN「,不論是不是在SCSI環境下。而由軟件生成的虛擬磁盤,統一稱爲」卷「,好比各類卷管理軟件、軟RAID軟件等所生成的虛擬磁盤。
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它由Heinz Mauelshagen在Linux 2.4內核上實現。Microsoft叫作VM。都是基於OS層面,將OS識別到的物理磁盤(或者RAID的虛擬化的邏輯磁盤LUN)進行組合,並分配的軟件。
PV:Physical Volume,物理卷,操做系統識別到的物理盤或者LUN。
VG:Volume Group,卷組,多個PV能夠邏輯地放在一個VG中。VG是一個虛擬的大存儲空間,將多個PV首位相連,組成一個邏輯上的連續編址的存儲池。
LV:Logical Volume,邏輯卷,VG通過分區生成不少個邏輯卷,最終給OS使用。
LVM將一個或多個硬盤的分區在邏輯上集合,至關於一個大硬盤來使用,當硬盤的空間不夠使用的時候,能夠繼續將其它的硬盤的分區加入其中,這樣能夠實現磁盤空間的動態管理,相對於普通的磁盤分區有很大的靈活性。
以下圖所示PV、VG、LV三者關係:
以上描述了LVM最主要的幾個概念和分區的過程。可是還有一些相關的知識,例如OS使用的最小單位是什麼,LVM又該如何尋址。因此補充幾個相關的概念:
PP: Physical Partition,物理區塊, 有些資料上描述爲PE(physical extent),它是在邏輯上將一個VG分割成連續的小塊,邏輯上的分割。LVM會記錄PE的大小(由幾個扇區組成),PE大小可配置,默認是4MB。每一個PE具備惟一的編號,是LVM尋址的最小單元。
LP: Logical Partition,邏輯區塊, 有些資料上描述爲LE(logical extent),一個LE能夠對應一個PE,也能夠對應多個PE。前者對應先後沒有區別,後者則能夠對應RAID 0或RAID 1的機制。通常採用前者一一對應的關係。
LVM實現了磁盤的邏輯管理,其實也就是磁盤的物理的信息的映射。例如PE是多少?VG有多大,從哪一個PV到哪一個PV?LV又是對應VG哪塊區域?這些信息都將記錄在磁盤上的某個區域,這個區域叫作VGDA(Volume Group Descriptor Area)。
VGDA存放在每塊物理磁盤上的某塊區域(通常最開頭),記錄LVM的配置信息,例如PE大小、初始偏移、PV的數量和信息、排列順序、LV的數量和信息,以及PV和LV之間的映射關係。LVM初始化的時候讀取這些信息,而後在緩存中生成映射公式,從而完成LV的掛載。掛載以後,就能夠接受IO了。
LVM能夠隨時在線擴容,也能夠對磁盤再劃分、再組合,很是靈活。底層磁盤擴容後,(磁盤控制器)會通知LVM,LVM能夠直接對某個捲進行擴容,因此LVM能夠屏蔽底層的變化。收縮邏輯卷也是一樣能夠作到。
而舊的MBR分區方式是一種最簡單的分區管理方式,分區信息保存在MBR分區表中,分區表或者說MBR位於磁盤0磁道0磁頭的0號扇區上,即LBA1地址上。後續文件系統相關的章節再做詳細說明。
不論是MBR仍是VGDA,一旦信息丟失,整個系統數據就不能被訪問。
在磁盤分區時候,會更新MBR的分區表;一樣LVM作邏輯卷的時候,也會更新VGDA的數據。事實上高級的LVM,仍是保留了MBR,因此MBR和VGDA會同時更新。
之前在安裝Linux的時候,必須單獨劃分一個/boot分區,用於啓動基本操做系統,通常100~200MB。目前不少新版的OS也能夠不用。
LVM能夠給系統建立一個快照,因爲使用了寫入時複製(copy-on-write) 策略,相比傳統的備份更有效率。
初始的快照只有關聯到實際數據的inode的實體連接(hark-link)而已。只要實際的數據沒有改變,快照就只會包含指向數據的inode的指針,而非數據自己。
快照會跟蹤原始卷中塊的改變,一旦你更改了快照對應的文件或目錄,這個時候原始捲上將要改變的數據會在改變以前拷貝到快照預留的空間。
這樣的話,只要你修改的數據(包括原始的和快照的)不超過2G,你就能夠只使用2G的空間對一個有35G數據的系統建立快照。
要建立快照,在卷組中必須有未被分配的空間。和其餘邏輯卷同樣,快照也會佔用卷組中的空間。因此,若是你計劃使用快照來備份你的根(root)分區,不要將整個卷組的空間都分配給根(root)邏輯卷。
(1)配置,能夠像建立普通邏輯卷同樣建立快照邏輯卷
# lvcreate --size 100M --snapshot --name snap01 /dev/vg0/lv
你能夠修改少於100M的數據,直到該快照邏輯卷空間不足爲止。
(2)恢復(合併),要將邏輯卷卷'lv' 恢復到建立快照'snap01'時的狀態
# lvconvert --merge /dev/vg0/snap01
注意: 合併後快照將被刪除。
也能夠拍攝多個快照,每一個快照均可以任意與對應的邏輯卷合併。
快照也能夠被掛載,並可用dd或者tar備份。使用dd備份的快照的大小爲拍攝快照後對應邏輯卷中變動過文件的大小。 要使用備份,只需建立並掛載一個快照,並將備份寫入或解壓到其中。再將快照合併到對應邏輯卷便可。
快照主要用於提供一個文件系統的拷貝,以用來備份; 比起直接備份分區,使用快照備份能夠提供一個更符合原文件系統的鏡像。
參考:
LVM 快照
而如下連接有更多的對快照進行分類和一致性問題進行分析,有興趣的能夠參考:
https://blog.csdn.net/erhei0317/article/details/52551610
經過連續幾篇文檔,咱們從下往上介紹了磁盤、陣列和LUN、LVM以及LVM快照,存儲的底層知識告一段落。再往上就是文件系統,在介紹文件系統以前,我將先介紹下存儲常見的三種架構。
參考資料:《大話存儲II》。