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