摘要:5.6. 高階儲存技術
5.6. 高階儲存技術
雖然到目前為止,本章只介紹了單機單磁碟的儲存環境;但目前還有其他的高階選擇,值得我們研究。接下來幾節,我們將為您介紹幾種常見的方法,讓您得以擴充您的大容量儲存系統。
5.6. 高階儲存技術
雖然到目前為止,本章只介紹了單機單磁碟的儲存環境;但目前還有其他的高階選擇,值得我們研究。接下來幾節,我們將為您介紹幾種常見的方法,讓您得以擴充您的大容量儲存系統。
5.6.1. 網路存取之儲存方式
將網路與儲存技術結合在一起,可為系統管理者提供無比的彈性。這種設定有以下兩種好處:
統合的儲存系統
易於管理
您可以安裝高效能伺服器,配上高速的網路,以及容量大且快的儲存裝置,結合為中央集權式的儲存裝置。只要設定正確,這速度不會比本機磁碟差。再者,它分享的特性可以降低成本,因為設立一台中央伺服器的成本,會比在每一台機器上裝設相同容量空間的成本低。除此之外,每台機器上的硬碟剩餘空間無法管理,也沒辦法有效運用;伺服器則完全相反。
集中式的儲存伺服器也能減輕管理工作。舉例來說,管理者只要監控中央伺服器,就可以得知磁碟儲存的狀況。備份更是化繁馭簡,備份一地的資料即可。雖然技術上,可以做到由網路備份客戶端的資料;但設定與維護,都是浩大的工程。
目前有多種網路儲存技術可供選擇;但要找出合適的並不容易。幾乎所有市面上的作業系統都多少提供從網路存取儲存系統的功能;但不同技術間並不相容。那麼該怎麼選擇最適合的技術呢?
通常最好的解決方式,是從客戶端的相容能力來決定答案。理由如下:
客戶端的整合問題不大
不需要在客戶端花上太多精力
客戶端的入門成本低
千萬記得,在計算客戶端的成本時,實際成本與客戶端的數目成正比。使用客戶端內建的技術,就不需要安裝額外的軟體(這樣可以省下鉅額的軟體成本)。同時您可以享受到客戶端作業系統的完善支援與整合。
但這同樣也有壞處:伺服器必須支援客戶端的網路存取技術才行。通常如果客戶端與伺服器端使用同樣的作業系統,那就不會有問題。要不然的話,管理者就得投資大量的時間與精力,讓伺服器能「說」客戶端的語言。然而,這問題不是那麼容易衡量的。
5.6.2. 以RAID為基礎的儲存方式
另一個系統管理者該鑽研的題目,是深入研究每種複雜的系統設定,並為每種不同的設定做最壞的打算。這看起來好像很悲觀;不過人無遠慮,必有近憂。在看著光鮮閃亮的伺服器之時,試想某個星期六晚上,它突然停止運作,那該怎麼辦?
有這點認知之後,運用我們對於硬碟的儲存知識,看看可能會發生哪些問題。首先,想想硬體完全故障的情況:
一個擁有四個分割區的硬碟,完全故障:那這些分割區上面的資料會如何?
馬上無法存取資料(至少在您更換硬體、還原備份資料之前,絕對沒有辦法)。
有顆硬碟上面,只有一個分割區;但由於存取過於頻繁,超出硬碟的負荷量,那對於需要存取資料的應用程式,會發生什麼情況?
因為硬碟無法回應大量的讀寫動作,應用程式速度變慢。
您有一個緩慢成長的大型資料檔,很快地,它的大小將超出硬碟的可用空間。然後會發生什麼事?
硬碟被塞滿,資料檔不再繼續增長,使用者資料檔的應用程式停止執行。
以上任何一個問題都會讓您的資料中心陷於癱瘓;而管理者可能隨時都會遇到這種問題。怎麼辦呢?
還好,有種技術可以解決以上這些問題。這技術叫做 RAID。
5.6.2.1. 基本概念
RAID 是 Redundant Array of Independent Disks(獨立磁碟(組成)之冗餘陣列)的縮寫。[1]。正如這名稱的字面意義,RAID 是由多顆硬碟組合而成,運作時就好像是單顆硬碟一樣。
1980 年代中,加州大學柏克萊分校(University of California, Berkeley)的研究者,開始研發 RAID 技術。當時高階電腦所用的高效能硬碟機,跟剛成型的個人電腦硬碟間,有著很大的價格、容量、與速度鴻溝。RAID 的概念為組合多個便宜的硬碟,組成一個與高階硬碟旗鼓相當的產品。
更重要的是,RAID 有多種建置方式,依照最終設定的不同,有著不一樣的特性。現在就讓我們來仔細看看不同設定(又稱 RAID「」等級(levels)」)的同。
5.6.2.1.1. RAID 的等級
柏克萊的研究者一開始制定了五種 RAID 等級,編號從「1」到「5」。後來隨著時代演進,其他研究者也定義了更多的等級與編號。但不是所有的 RAID 等級都很有用:有些只有學術價值,有些甚至根本沒上市過。
最後發展至今,常見的只有以下三種 RAID 等級:
等級 0
等級 1
等級 5
接下來的章節將為您介紹這幾種等級的詳細內容。
5.6.2.1.1.1. RAID 0
這模式被灌上 RAID 之名,實在有點言過其實,因為它並沒有用到任何冗餘(redundancy)的磁碟。不過即使 RAID 0 沒有辦法帶來任何資料可靠度的益處,它還是有其他優點。
RAID 0 使用了兩個以上的硬碟,每個硬碟的可用空間都被切割為「區塊(chunks)」,區塊代表的是硬碟中磁區的組合。所有寫到磁碟陣列中的資料,都會被拆開為一個一個的區塊,依序寫進陣列中的每個磁碟。這些區塊在陣列中,看起來就像一條一條的條紋。因此 RAID 0 也有另一個稱號:「等量磁區(striping)」。
舉例來說,將 12KB(千位元組)的資料,寫入雙磁碟、使用 4KB 區塊大小的陣列時,資料會被分成三個 4KB 的區塊,用以下方式寫進磁碟中:
第一個 4K 會被寫入第一個硬碟中的第一個區塊。
第二個 4K 會被寫到第二個磁碟中的第一個區塊。
最後一個 4K 會被寫到第一個磁碟中的第二個區塊。
跟單硬碟比起來,RAID 0 的優點包括了:
更大的儲存空間 — RAID 0 陣列的容量大於單硬碟,可以儲存更大的資料檔。
讀寫效能更佳 — RAID 0 陣列的 I/O 動作,都被平均分配到陣列中的所有硬碟中。(假設所有 I/O 都不是單區塊的資料)
不浪費空間 — 所有硬碟上的空間全部用來儲存資料。
跟單硬碟比起來,RAID 0 有以下缺點:
較不可靠 — 要讓 RAID 0 運作,陣列中的每個磁碟都要正常工作。在 N 個硬碟的 RAID 0 中,一個硬碟壞掉,損失的是 1/N 的資料,但卻會讓整個陣列無用武之地。

提示
如果你記不住各種 RAID 等級有什麼不同,不妨把 RAID 0 想成 0% 的硬碟空間是重複的。
5.6.2.1.1.2. RAID 1
RAID 1 使用兩個(甚至多個)完全相同的硬碟。所有資料會同時寫進兩個硬碟中,就好像鏡子裡外各有一份相同的資料一樣。也因此,RAID 1 也被稱為磁碟鏡像(mirroring)。
資料寫入 RAID 1 的時候,都會複製成兩份:一份寫到第一顆硬碟,另一份寫到第二顆硬碟。而相反地,讀取資料時,只要從其中一顆硬碟讀取即可。
跟單硬碟比起來,RAID 1 陣列有以下好處:
更佳的冗餘可靠性 — 即使陣列裡其中一個硬碟故障,使用者還是可以存取資料。
更好的讀取效能 — 從兩個硬碟上分頭讀取資料,可以分擔單硬碟的 I/O 負荷。
跟單硬碟比較起來,RAID 1 有以下缺點:
陣列的最大空間,無法超過陣列中最大硬碟的容量。
寫入效能變慢 — 因為兩個硬碟都得保持最新的資料,所以每次寫入的時候,兩顆硬碟都得運作,拖慢整個陣列的寫入效能。
成本效益較低 — 因為兩顆硬碟中,只存有一份資料,所以 RAID 1 的成本至少是單硬碟的兩倍。

提示
如果你記不住各種 RAID 等級有什麼不同,不妨把 RAID 1 想成 100% 的硬碟空間是重複的。
5.6.2.1.1.3. RAID 5
RAID 5 試圖結合 RAID 0 與 RAID 1 的優點,但又避免它們的缺點。
跟 RAID 0 一樣,RAID 5 陣列包含了多個硬碟,每個硬碟切成若干區塊。這讓 RAID 5 陣列比其他任何單硬碟都大。跟 RAID 1 類似,RAID 5 陣列使用了部份磁碟空間,儲存多餘的位元組,增加可靠性。
然而,RAID 5 的運作方式卻跟 RAID 0 或 RAID 1 截然不同。
RAID 5 陣列最少需要三顆(或是更多)大小一致的硬碟。每個硬碟都分成若干區塊,讓資料依序寫入。然而跟 RAID 0 不同的是,不是每個區塊都拿來儲存資料。相反地,擁有 n 個硬碟的陣列中,第 n 個區塊會拿來儲存同位檢查碼(parity)。
如果陣列中的任何一顆硬碟故障,那麼利用同位檢查碼,就可以將原始資料復原。第 x 個區塊中的同位檢查碼,配上第二組第 x 個區塊的資料做數學運算,就可以算出最後一組區塊的資料。如果其中一個區塊的內容更新了,那麼對應的同位檢查碼也得同步運算,馬上更新。
這表示每次資料寫進陣列的時候,至少會寫入「兩顆」硬碟:一個是儲存資料的硬碟,另一個則是記載同位檢查碼的硬碟。
值得注意的一點是,同位檢查的區塊並不集中在同一顆硬碟上;相反地,它們分散在所有硬碟中。雖然技術上可以將所有同位檢查的區塊放在同樣的硬碟上(事實上,這正是 RAID 4 的作法),但這種作法會導致每次寫入資料時,一定會動到這顆硬碟,成為效能瓶頸。將同位檢查資訊分散到陣列中的所有硬碟去,可以減輕這問題。
然而,我們還是得留意同位檢查對整體容量的影響。雖然同位檢查資訊被分散到陣列中的所有硬碟裡,但實際可用的硬碟空間,是所有硬碟數減一。
跟單硬碟比起來,RAID 5 陣列有以下優點:
更佳的冗餘可靠性 — 如果陣列中其中一顆硬碟壞掉,陣列還是可以繼續運作,同時藉由同位檢查資訊,可以重建壞掉的區塊[2]
更佳的讀取效能 — 由於 RAID 0 型態的儲存方式使然,資料分散在陣列中的硬碟,讀取的 I/O 活動也同樣平均分散到所有硬碟上。
合理的成本效益 — 以擁有 n 顆硬碟的 RAID 5 陣列來說,只有 1/n 的空間被浪費掉。
跟單硬碟比起來,RAID 5 陣列擁有以下缺點:
寫入效能較低 — 因為每次寫入資料時,最少需要用到兩顆硬碟(一顆負責寫入資料,另一顆寫入同位檢查碼),所以 RAID 5 的寫入效能比單硬碟來得低[3]
5.6.2.1.1.4. 複合式 RAID
從我們之前的討論中,很明顯可以看出每種 RAID 都有其優點與缺點。就在開始使用 RAID 後不久,人們開始想著,可不可以把不同等級的 RAID 組合起來,結合多方的優點,但避免所有的缺點呢?
舉例來說,RAID 0 陣列裡的硬碟,實際上是幾個 RAID 1 陣列,那有什麼好處呢?這方式會讓您享受 RAID 0 的速度,又有 RAID 1 的可靠性。
而這只是例子之一。其他常見的複合式 RAID 有:
RAID 1+0
RAID 5+0
RAID 5+1
因為複合式 RAID 只在專業領域內出現,所以我們在此不詳細討論。然而,在討論複合式 RAID 時,有兩點要注意:
順序不同,意義不同:RAID 等級中的數字,會對可靠度造成相當程度的影響。舉例來說,RAID 1+0 跟 RAID 0+1 就「不」相同。
高成本:如果要找出所有複合式 RAID 的共同缺點,那一定是成本。舉例來說,RAID 5+1 至少需要六顆硬碟(陣列愈大,需要的硬碟還會更多)。
我們已經了解 RAID 的基本概念,現在就來看看 RAID 是怎麼實作出來的。
5.6.2.1.2. 實作 RAID
從之前的敘述,您可以看出 RAID 需要比一般硬碟更具「智慧」才行。RAID 至少要能做到以下事情:
將 I/O 需求分散到陣列中的所有硬碟
RAID 5 需要計算同位檢查資訊,並寫到相對應的硬碟裡
監測陣列中的硬碟;當硬碟壞掉時,採取適當的應對措施
當修復或替換了壞掉的硬碟後,開始重建陣列的過程
提供管理者維護硬碟的方法(移除或新增硬碟、開始或終止重建過程等等)
要達成這些功能,主要有以下兩種方式,我們將為您提供更多資訊:
5.6.2.1.2.1. 硬體 RAID
硬體 RAID 通常以介面卡的形式銷售。這介面卡會處理所有與 RAID 有關的功能,並直接控制接在上面的硬碟。只要安裝了驅動程式,對作業系統來說,硬體 RAID 卡上的陣列看起來就像單顆硬碟一樣。
大部分 RAID 控制卡都使用 SCSI 硬碟;不過市面上也找得到 ATA 介面的 RAID 卡。不管怎麼說,管理者介面多半是以下三種方式之一:
專用的工具程式,在作業系統中執行。這應用程式提供了軟體介面,讓管理者維護控制卡
透過序列埠,使用終端機模式,連接介面卡
類似 BIOS 的介面,只能在電腦開機時使用
有些 RAID 控制卡採用了多種管理介面。很顯然,軟體介面的彈性最高,因為管理者可以在系統執行時,同時進行維護。但是如果您要從介面卡上的陣列中,載入作業系統開機,那就需要其他類型的介面了。
由於市面上的 RAID 卡種類繁多,我們在此就不多作介紹。最好的方法,是參考製造商的說明文件,以獲得更進一步資訊。
5.6.2.1.2.2. 軟體 RAID
軟體 RAID 是以作業系統核心或驅動程式等方式製作,為特定作業系統設計的陣列。因此就硬體支援而言,它提供了更高的彈性 — 只要作業系統支援的硬體,都可以當成 RAID 的一部分來用。這作法不需要購買昂貴、專有的 RAID 硬體,可以大幅降低建置 RAID 的成本。
軟體 RAID 使用 CPU 進行同位檢查運算;而硬體 RAID 則仰賴介面卡上的晶片。由於目前 CPU 的效能極高,因此有些軟體 RAID 的效能會比硬體 RAID 來得好。
然而,軟體 RAID 也有不及硬體 RAID 的地方。其中最重要的,是軟體 RAID 不一定能拿來開機。通常只有 RAID 1 可以拿來開機,因為電腦的 BIOS 並不認得 RAID;但 RAID 1 中的任何硬碟都存放同樣的資料,內容與單顆硬碟的無異,因此 BIOS 可以順利的執行開機程序。接下來作業系統獲得系統控制權之後,就可以切換到軟體 RAID 模式去。
5.6.3. 邏輯磁區管理
另一個先進的儲存技術是「邏輯磁區管理(LVM, logical volume management)」。LVM 可將實際的儲存裝置視為低階的區塊,使用者可以在這些區塊上建立不同的儲存設定。LVM 的實際運作情形則根據作法不同,而有所差異;但 LVM 通常包括實體儲存分群(physical storage grouping)、重設邏輯磁區大小(logical volume resizing)、以及資料轉移(data migrating)。
5.6.3.1. 實體儲存分群
雖然各廠商對這功能的名稱可能會有所不同,但實體儲存分群卻是所有 LVM 的基礎。正如這名稱所指,實體的儲存裝置可以分門別類(或集中)成為一或多個邏輯儲存裝置。這些邏輯儲存裝置(或稱邏輯卷冊(volumes))的容量,可以比其下的任何一個實體儲存裝置都來得大。
舉兩個 100 GB 的硬碟為例,您可以建立一個 200 GB 的邏輯卷冊;也可以建立兩個卷冊,大小分別為 150 GB 與 50 GB。只要不超過總容量(以這例子來說,是 200 GB),那您可以切成任何組合,完全取決於您公司的需要。
這讓系統管理者將所有的儲存裝置,視為一個整體中的一小部份,只要不超過上限,邏輯卷冊的容量不限。除此之外,管理者可以在這整體儲存環境中,動態而直接地加入新的儲存裝置,以符合將來的需求。
5.6.3.2. 重設邏輯磁區大小
LVM 最為系統管理者所稱道的,是能輕易地將儲存需求,導向到其他地方去。在非 LVM 環境中,磁碟空間不足的最佳處理方式,是將檔案從接近全滿的硬碟,移到擁有更大空間的硬碟去。通常這表示要重新設定系統的儲存裝置,為求使用者的方便,管理者得在下班後,才開始進行這動作。
然而,LVM 能輕易地增加邏輯卷冊的大小。假設我們目前的總容量為 200 GB,分成 150 GB 的邏輯卷冊,以及 50 GB 的預留空間。如果這 150 GB 的空間滿了,我們就可以藉由 LVM,在不動到硬體設定的情形下,增加其空間(例如10 GB)。視您的作業系統而定,這動作可以自動完成,或需要稍微停機一會兒。
5.6.3.3. 資料轉移
到目前為止,大部分老練的系統管理者都對 LVM 的功能印象深刻;但他們還是會問:
如果,邏輯卷冊中的某顆硬碟開始出問題,那會發生什麼事呢?
好消息是,多數 LVM 都加入了轉移資料的功能,把資料從特定硬碟上轉出。不過前提是,卷冊內要有足夠的大小,消化這些資料。一旦資料轉移完成,您就可以將故障的硬碟抽出,替換新的上去。
5.6.3.4. 有了 LVM,還要 RAID 幹嘛?
既然 LVM 跟 RAID 的功能相近(例如可以動態抽換壞掉的硬碟),又有後者所不及之處(例如為卷冊動態加入更多空間),那許多使用者會想,我們還要 RAID 幹什麼?
事實上,RAID 與 LVM 是互補的技術,可以搭配使用(就跟複合式 RAID 一樣),互採所長,互補其短。
注
[1]
早期 RAID 研究開始時,這縮寫指得是 Redundant Array of Inexpensive(便宜的) Disks,但隨著 RAID 所用的「單顆」硬碟變得愈來愈便宜,便宜到比較價格已經失去了意義。
[2]
當陣列中有硬碟無法正常工作時,I/O 效能會降低,這是因為重建遺失的資料需要時間的關係。
[3]
每次寫入的時候,為了要運算同位檢查碼,效能還會再往下降。然而,隨著 RAID 5 實作方式的不同(例如在系統的什麼地方做運算),這效能的衝擊就可大可小,甚至可以忽略不計。