大部分用戶都會擔心,萬一硬盤發生故障,數據丟失咱們辦呢?其實現在不少用戶由於硬盤容量等方面的限制,都會在主機上掛有不止一塊的硬盤。此時若把這些硬盤組成一個磁盤陣列,那麼用戶就可以高枕無憂了。磁盤陣列可以將多個硬盤組成一個虛擬的硬盤。在操作上,用戶會覺得跟使用單一硬盤沒有什麼不同。但是在實際存儲數據過程中,磁盤陣列是將數據分別保存在不同的硬盤上,以提高數據的安全性。筆者今天將跟大家說說如何在Linux環境下玩轉磁盤陣列。
一、使用磁盤陣列可以帶來哪些好處?
在具體如何配置磁盤陣列之前,筆者要先給大家介紹一下利用磁盤陣列的好處。先給大家一點動力,讓大家能夠繼續看下面的內容。
第一個好處是磁盤陣列可以提高數據存取的效率。硬盤其實就好像是一個盒子,其內部空間很大,但是出入的口子很小。當要把大量數據保存在這個盒子的時候,只有通過這個小小的盒子來保存數據。其存取的效率明顯不是很高。但是,如果采用磁盤陣列的話,當系統向硬盤中寫入數據的時候,會先把大塊的數據分割成多個小區快,並同時寫到不同的硬盤中。這就好像在一個盒子中開了多個出入孔,同時往這個孔中加入數據一樣,可以提高硬盤的寫入速度。同理,在讀取的時候,也可以同時從不同的硬盤中讀取,提高數據讀取的速度。所以磁盤陣列可以提高數據的存儲效率。為此,在一些服務器上部署磁盤陣列,可以提高服務器的應用性能。
第二個好處是可以整合多塊硬盤。多數的Linux系統管理員也許都遇到過這種問題。一塊硬盤用著用著,突然空間不夠了。此時該如何處理呢?其實,管理員不需要更換硬盤。而是可以把多個小容量的硬盤整合起來,組合成一個容量比較大的虛擬硬盤。因為磁盤陣列操作起來,就好像跟一塊硬盤一樣,所以不會給用戶的工作帶來不利的影響。所以把多塊閒置的硬盤利用磁盤陣列組合成一塊虛擬硬盤,是解決磁盤容量不足的一個不錯的方法。
第三個好處是可以提供比較高的安全性。當硬盤中的數據存儲發生錯誤時,磁盤陣列技術能夠利用現有的信息對損壞的數據進行自動修復。磁盤陣列會產生一個校驗碼。這個校驗碼會存放在不同的磁盤上。當某塊磁盤突然出現損壞時,磁盤陣列技術就可以利用這個校驗碼來恢復損壞磁盤的數據。故磁盤陣列技術也經常被用在Linux服務器,以提高服務器數據的安全性。
二、Linux磁盤陣列與其它操作系統的差異。
從磁盤陣列的概念中,我們知道磁盤陣列是由一個個不同的硬盤組合而成的一個虛擬硬盤。其他操作系統,如微軟操作系統,若要采用磁盤陣列的話,也有這方面的限制。但是,Linux與其他操作系統不同。它可以在同一塊硬盤中實現磁盤陣列。也就是說,Linux操作系統不是以硬盤為單位來組成磁盤陣列的,而是以分區為單位。既可以通過把一個硬盤分割成不同的分區,然後再把它們組合成一個磁盤陣列。
不過在同一塊硬盤上分割成多塊分區,並重新組合成一個磁盤陣列的話,就不能夠享受磁盤陣列所帶來的好處。如上面所講的提高硬盤數據存取效率、提高數據安全性等等,都將不在有。也就是說,其已經失去了將數據存放在不同磁盤、以降低數據損壞風險、提高數據存儲效率的目的。磁盤陣列的使用價值將無法體現。
故系統管理員之所以把一塊硬盤分割成不同的分區,並實現磁盤陣列,主要是出於實驗、學習的目的。在實際部署中,筆者建議企業還是采用至少三塊硬盤來實現磁盤陣列,讓磁盤陣列真真發揮其應有的效益。
三、Linux系統下如何設置磁盤陣列?
在Linux系統中,磁盤陣列主要通過/etc/raidtab配置文件來控制的。若系統管理員需要實現磁盤陣列的話,就需要手工創建這個配置文件。或者從其他地方復制這個文件,並進行相應的修改。默認情況下,在Linux系統中不會有這個文件。下面筆者就對這個文件中的主要參數進行講解,幫助大家建立一個正確的磁盤陣列配置文件。
參數一:raid-level 指定磁盤陣列的類型。
磁盤陣列到目前為止,有不下於十種的類型。而Linux系統則只支持其中的不種類型。系統管理員需要了解這五種磁盤陣列類型的特點,並根據企業的實際應用場景選擇合適的磁盤類型。筆者平時比較喜歡采用Linear或者RAID-5這兩種磁盤陣列類型。為此就給大家分析一下這兩個磁盤類型的特點。
Linear磁盤陣列模式比較簡單,它只是起到一個磁盤的整和作用。如果采用這種磁盤陣列模式,Linux系統會先將數據存放在第一塊硬盤中。只有當這個硬盤空間已經使用完了,操作系統才會將數據存儲到第二塊硬盤中。以此類推。在這種模式下,由於沒有把數據分塊同時存入到多個硬盤中,所以不能夠提高數據存取效率。同時,也不存在校驗碼,故也沒有數據自我修復的功能。也就是說,這種模式的磁盤陣列,只起到了把小容量的硬盤整和中一塊大硬盤的作用。所以這種模式實際應用的不多。但是因為其配置簡單,所以是用來理解磁盤陣列這種技術的好渠道。
RAID-5磁盤陣列模式是現在主流的磁盤陣列模式。在這種模式下,Linux操作系統會將數據切割成固定大小的小區塊,並同時分別保存到不同的硬盤中。而且這種磁盤陣列模式,會產生校驗碼,並且把校驗碼存放在不同的硬盤中。由於其並沒有保留固定的一塊硬盤來存放同為校驗碼,所以當任何一塊硬盤損壞時,損壞的數據都可以被修復。若采用這種模式,可以提高數據的存儲效率、增強數據的安全性、把不同硬盤整和成一塊虛擬硬盤。而且,其沒有把同位校驗碼存放在同一塊硬盤中,所以不會造成整體系統性能的瓶頸。筆者現在企業中的服務器,就是采用了這種磁盤陣列模式。
參數二:chunk-size 指定分塊的大小。
采用磁盤陣列後,數據會被分割成許多小塊,然後寫入到硬盤中。那麼這個塊的大小是多少呢?在磁盤陣列配置文件中,需要指定每個寫入區塊的大小。其最小單位是2KB。用戶指定的區塊大小,必須都是2的整數次方。如可以設置為4、8、16等等。不過這個參數配置對於Liner模式下沒有實際意義。因為在Liner模式下實際上不會對數據進行分塊。因為其先把數據存儲在第一塊硬盤上。當第一塊硬盤滿後在存儲在第二塊上,以此類推。故不會對數據進行分塊。所以這個參數對Liner這種磁盤陣列模式不起作用。
參數三:persistent-superblock:設置是否要寫入超級塊。
在微軟的操作系統下部署磁盤陣列的話,就不需要設置這個內容。但是在Linux下,必須對此進行設置。因為Linux系統采用的是Ext2/3文件系統。對於這個文件系統來說,硬盤分區首先被劃分為一個個Block。同一個ext2文件系統上的每個block大小都是一樣的。但是對於不同的ext2文件系統,block的大小可以有區別。典型的block大小是1024 bytes或者4096 bytes。這個大小在創建ext2文件系統的時候被決定,它可以由系統管理員指定,也可以由文件系統的創建程序根據硬盤分區的大小,自動選擇一個較合理的值。一個硬盤分區上的block計數是從0開始
的,並且這個計數對於這個硬盤分區來說是全局性質的。
編輯推薦:關於LINUX系統ROOT帳號管理的幾個啟示
Superblock有一個比較時髦的中文名稱,叫做超級塊。超級塊是硬盤分區開頭(開頭的第一個byte是byte 0)從 byte 1024開始往後的一部分數據。由於 block size最小是 1024 bytes,所以super block可能是在block 1中(可能此時block 的大小正好是 1024 bytes),也可能是在block 0中(可能此時block 的大小超過 1024 bytes)。超級塊中的數據其實就是文件卷的控制信息部分,也可以說它是卷資源表,有關文件卷的大部分信息都保存在這裡。所以這個超級塊中的信息就好像是FAT32文件系統下的分區格式,非常的重要。
這個參數就是用來控制是否需要寫入硬盤的這個塊。如果要寫入的話,就設置為1;不寫入的話,就設置為0