一、LUN
1、LUN的由來
上一篇文章已經介紹了RAID技術的原理,那么RAID的實現呢?有兩種方式,RAID軟件和RAID硬件。但是因軟件RAID占用主機CPU和主機內存,而且RAID功能不易實現,一般較少使用。所以一般通過硬件RAID,即RAID卡。
上上篇有提到過SCSI卡,人們一般在這個SCSI卡上增加額外的芯片實現RAID功能。這樣實現了RAID功能的板卡就叫做RAID卡。當然也可以在南橋芯片上實現RAID的功能,集成在主板上,某些主板廣告中所謂的“板載”RAID芯片就是這種方式。
RAID卡帶有CPU、ROM、RAM、XOR等主要的芯片,同時也有自己的總線和IO接口,所以RAID卡就是一個小的計算機系統。
所以,操作系統不用做任何改動,除了RAID驅動程序外,不用安裝額外的任何軟件,可以直接識別已經經過RAID處理生成的虛擬磁盤。
RAID生成虛擬磁盤,包含條帶化,是經過一系列運算的。虛擬盤提供給外面操作系統的文件系統仍然像物理盤,尋址仍然是LBA塊。
這種虛擬盤或者邏輯盤就叫做LUN,Logic Unit Number。
2、LUN管理
LUN對上層OS操作系統而言相當於一塊“物理盤”,OS在這個盤上可以進行分區和格式化。
而這些邏輯盤是如何划分的,信息是否可以保存?系統重啟后,操作系統安裝后,是否還存在?
RAID卡可以針對總線上的N塊磁盤進行分組,RAID Group。每組可以做成自己的RAID級別,不必相同。LUN必須是同一個RG中划分出來的,不能跨RG。
每個磁盤上保留了一個區域,專門記錄了邏輯盤划分信息、RAID類型以及組內其他磁盤信息,這些信息稱為RAID信息。SNIA委員會為了統一各個廠家的信息格式,定義了一種叫做DDF的標准。很多公司在磁盤最末1MB的空間寫入這些信息。而且即使將這些磁盤打亂順序,或者拿到其他支持這個標准的控制器上,也照樣能識別出划分好的邏輯盤所需的信息。
3、為什么要划分LUN
前面章節描述過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
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它由Heinz Mauelshagen在Linux 2.4內核上實現。Microsoft叫做VM。都是基於OS層面,將OS識別到的物理磁盤(或者RAID的虛擬化的邏輯磁盤LUN)進行組合,並分配的軟件。
1、基本概念
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的機制。一般采用前者一一對應的關系。
2、LVM的實現
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也可以不用。
3、LVM快照
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》。