偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

磁盤(pán)的可靠性其實(shí)很低,這種數(shù)據(jù)可靠性技術(shù)可以解決

存儲(chǔ) 存儲(chǔ)設(shè)備
在Linux操作系統(tǒng)下提升磁盤(pán)可靠性的技術(shù)就是RAID技術(shù)。具體實(shí)現(xiàn)有兩種,一種是通過(guò)MD實(shí)現(xiàn)的多磁盤(pán)設(shè)備,另外一種是LVM。今天我們主要介紹一下通過(guò)MD實(shí)現(xiàn)的RAID技術(shù)。

在我們?nèi)粘5恼J(rèn)識(shí)中,磁盤(pán)是非常可靠的。作者03年自己組裝的電腦的磁盤(pán)現(xiàn)在還在用著,想想都快二十年了。很多人可能會(huì)想,消費(fèi)級(jí)的磁盤(pán)都這么靠譜,那企業(yè)級(jí)的豈不是更加厲害。其實(shí)并非如此,其實(shí)磁盤(pán)是很容易出現(xiàn)故障的。

磁盤(pán)

作者有幸參觀過(guò)一個(gè)大型的數(shù)據(jù)中心,發(fā)現(xiàn)成堆的故障磁盤(pán)。據(jù)說(shuō),該數(shù)據(jù)中心每天有幾十塊磁盤(pán)出現(xiàn)故障。谷歌在設(shè)計(jì)其分布式文件系統(tǒng)GFS的時(shí)候,也是將磁盤(pán)作為非常不可靠部件進(jìn)行考慮的,因此在其架構(gòu)中通過(guò)多副本保證其可靠性。

想想其中的原因,大概是使用頻度的差異造成的錯(cuò)覺(jué)吧。我們平時(shí)使用的磁盤(pán)平均下來(lái)每天應(yīng)該不會(huì)超過(guò)一小時(shí),而且大部分時(shí)間都沒(méi)有數(shù)據(jù)讀寫(xiě)。而數(shù)據(jù)中心磁盤(pán)則是7*24小時(shí)運(yùn)行,且負(fù)載很重。試想,如果讓你7*24小時(shí)不歇著,估計(jì)...

好了,廢話少說(shuō)。既然磁盤(pán)這么不靠譜,我們今天就給大家介紹一下存儲(chǔ)領(lǐng)域保證磁盤(pán)可靠性的技術(shù)。為了方便大家理解和日后學(xué)習(xí),我們就以Linux內(nèi)核為例進(jìn)行介紹,其實(shí)技術(shù)是相通的,大家可以遷移過(guò)去。在Linux操作系統(tǒng)下提升磁盤(pán)可靠性的技術(shù)就是RAID技術(shù)。具體實(shí)現(xiàn)有兩種,一種是通過(guò)MD實(shí)現(xiàn)的多磁盤(pán)設(shè)備,另外一種是LVM。今天我們主要介紹一下通過(guò)MD實(shí)現(xiàn)的RAID技術(shù)。

一、RAID的原理及基本操作

人類認(rèn)識(shí)事物的客觀規(guī)律是具體的比抽象的容易理解。因此,為了讓大家更加容易理解本文介紹的內(nèi)容,我們先從具體的內(nèi)容開(kāi)始。

1. RAID的基本原理

RAID的全稱為廉價(jià)冗余磁盤(pán)陣列(Redundant Array of Inexpensive Disks),從字面可以看出其基本原理就是通過(guò)廉價(jià)的磁盤(pán)組成一組磁盤(pán),從而提高磁盤(pán)的整體可靠性。在Linux操作系統(tǒng)層面,其實(shí)就是將物理磁盤(pán)通過(guò)軟件抽象為邏輯磁盤(pán)。以RAID1(兩塊磁盤(pán)存儲(chǔ)相同的數(shù)據(jù),在出現(xiàn)一塊磁盤(pán)故障的情況下,數(shù)據(jù)不丟失)為例,通過(guò)Linux內(nèi)核中的軟件創(chuàng)建一個(gè)虛擬的塊設(shè)備,而該塊設(shè)備中記錄了底層對(duì)應(yīng)的物理設(shè)備及相關(guān)參數(shù)。

圖1 RAID示意圖

因此,從用戶層面來(lái)看就是一塊普通的磁盤(pán)設(shè)備,而在底層卻是2個(gè)獨(dú)立的物理硬盤(pán)。當(dāng)用戶向邏輯磁盤(pán)寫(xiě)數(shù)據(jù)的時(shí)候,其中的軟件會(huì)通過(guò)參數(shù)進(jìn)行計(jì)算,并將數(shù)據(jù)重新定向到底層的物理設(shè)備。通過(guò)這種方法可以保證即使出現(xiàn)某個(gè)物理磁盤(pán)損壞,用戶的數(shù)據(jù)仍然完好無(wú)損。

2. Linux下RAID管理

在Linux操作系統(tǒng)下可以通過(guò)mdadm工具非常方便的創(chuàng)建RAID。我們以RAID1為例演示一下如何創(chuàng)建??赡芎芏嗤瑢W(xué)沒(méi)有多塊物理磁盤(pán),其實(shí)沒(méi)有關(guān)系,我們可以通過(guò)虛擬機(jī)創(chuàng)建虛擬磁盤(pán)或者loop設(shè)備模擬的方式創(chuàng)建RAID。

為了方便大家練習(xí),本文就通過(guò)loop設(shè)備模擬磁盤(pán)來(lái)創(chuàng)建RAID。首先需要?jiǎng)?chuàng)建2個(gè)loop設(shè)備。具體執(zhí)行如下命令:

創(chuàng)建loop設(shè)備

圖2 創(chuàng)建loop設(shè)備

成功運(yùn)行上述命令后,在/dev目錄下就多出2個(gè)設(shè)備,分別是loop0和loop1。我們可以將這兩個(gè)設(shè)備當(dāng)做磁盤(pán)來(lái)使用。下面我們就可以創(chuàng)建RAID了,非常簡(jiǎn)單,通過(guò)一條命令就可以了。

  1. mdadm --create /dev/md1 --level=1 --raid-devices=2 /de 

在上面命令中/dev/md1表示創(chuàng)建的新設(shè)備的名稱,level=1表示是RAID1,后面分別是物理設(shè)備的數(shù)量和具體的物理設(shè)備路徑。

除了創(chuàng)建RAID之外,mdadm還支持很多功能,比如獲取RAID的詳細(xì)信息(mdadm --detail /dev/md1)。

圖3 RAID的詳細(xì)信息

該命令的功能很多,我們就不一一介紹了。這里只是拋磚引玉,具體內(nèi)容大家自行學(xué)習(xí)就行。后面我們重點(diǎn)從原理和實(shí)現(xiàn)層面介紹一下Linux的RAID技術(shù)。

3. RAID軟件架構(gòu)

Linux的RAID實(shí)現(xiàn)在用戶態(tài)和內(nèi)核態(tài)都有涉及。其中用戶態(tài)主要進(jìn)行RAID的管理,而內(nèi)核態(tài)一方面配合用戶態(tài)進(jìn)行RAID管理,另外一方面則實(shí)現(xiàn)對(duì)IO的處理,這部分才是RAID最為核心的內(nèi)容。

圖4 軟件架構(gòu)

對(duì)于基于SCSI物理磁盤(pán)的RAID來(lái)說(shuō),Linux環(huán)境下整個(gè)軟件架構(gòu)如圖4所示。其中虛線以上的為用戶態(tài)的軟件模塊,虛線以下的為內(nèi)核態(tài)的軟件模塊。這里比較核心的是RAID公共層,在這里主要?jiǎng)?chuàng)建md設(shè)備,該設(shè)備是一個(gè)邏輯設(shè)備,也是用戶可以看到的RAID設(shè)備。其下則是具體的RAID模塊,用于實(shí)現(xiàn)不同的RAID級(jí)別(算法)。

再往下就是通用SCSI驅(qū)動(dòng)層了,也就是圖中的SCSI磁盤(pán)驅(qū)動(dòng)這一層的內(nèi)容。該層其實(shí)是SCSI系統(tǒng)的上層驅(qū)動(dòng)(SCSI子系統(tǒng)分為上中下三層)。RAID模塊通過(guò)調(diào)用該層的數(shù)據(jù)訪問(wèn)接口就可以實(shí)現(xiàn)物理磁盤(pán)數(shù)據(jù)讀寫(xiě)了。

這里需要說(shuō)明的是,這里的物理磁盤(pán)并不一定是本地磁盤(pán)。由于基于SAN或者其它協(xié)議的磁盤(pán)可以通過(guò)光纖或者SAS線連接到主機(jī),并呈現(xiàn)為物理硬盤(pán)。這種物理硬盤(pán)與本地物理硬盤(pán)沒(méi)有任何差異。

二、RAID的代碼淺析

針對(duì)Linux內(nèi)核的具體實(shí)現(xiàn),我們簡(jiǎn)單介紹一下其中的代碼。關(guān)于代碼部分我們以RAID1為例介紹兩部分的內(nèi)容,一部分是關(guān)于創(chuàng)建RAID的邏輯;另一部分是請(qǐng)求處理邏輯。理解了上述內(nèi)容,也就理解了關(guān)于RAID代碼邏輯的大部分內(nèi)容。

1. 關(guān)于RAID的超級(jí)塊

接觸過(guò)Linux文件系統(tǒng)的同學(xué)應(yīng)該對(duì)超級(jí)塊不會(huì)陌生。在RAID中也有超級(jí)塊(superblock),并且作用與文件系統(tǒng)類似。RAID超級(jí)塊的作用類似,可以將超級(jí)塊理解稱為RAID的地圖。RAID軟件對(duì)底層物理磁盤(pán)的一切操作都以該超級(jí)塊為依據(jù)。

Linux的RAID有多個(gè)版本,包括0.9、1.0、1.1和1.2四個(gè)版本,且版本之間并不能保證兼容性。對(duì)于1.2版本的RAID,其超級(jí)塊位于開(kāi)始4KB偏移的位置。我們可以通過(guò)dd或者其它工具將該數(shù)據(jù)導(dǎo)出到文件中,并通過(guò)二進(jìn)制工具查看。

RAID的超級(jí)塊

圖5 RAID的超級(jí)塊

如圖5是作者導(dǎo)出的上面創(chuàng)建的RAID1的超級(jí)塊信息及數(shù)據(jù)結(jié)構(gòu)(mdp_superblock_1)對(duì)比圖。如果看不清楚也沒(méi)關(guān)系,大家可以自行獲取上述進(jìn)行,并對(duì)比。

RAID的超級(jí)塊內(nèi)容非常多,在本文不可能一一介紹。這里大家只要知道這里面包含創(chuàng)建時(shí)間、RAID級(jí)別、設(shè)備大小及同步信息等內(nèi)容即可。后續(xù)我們可能會(huì)專門(mén)介紹超級(jí)塊中每個(gè)成員的具體作用。

2. 創(chuàng)建RAID核心流程

創(chuàng)建RAID的流程是由用戶態(tài)觸發(fā),內(nèi)核態(tài)具體完成的。RAID的創(chuàng)建核心分為3個(gè)步驟,具體如下:

  • 用戶態(tài)工具mdadm根據(jù)參數(shù)構(gòu)建超級(jí)塊,并寫(xiě)入物理設(shè)備
  • 用戶態(tài)工具觸發(fā)創(chuàng)建md設(shè)備(RAID設(shè)備)
  • 用戶態(tài)工具觸發(fā)內(nèi)核,是RAID處于運(yùn)行狀態(tài)

其中第一步我們不再解釋,原理很簡(jiǎn)單,大家自行閱讀代碼即可。關(guān)于第二步,用戶態(tài)工具(mdadm)通過(guò)向/sys/module/md_mod/parameters/new_array中寫(xiě)入一個(gè)名為md*的字符串來(lái)觸發(fā)內(nèi)核創(chuàng)建md設(shè)備。

圖6 RAID創(chuàng)建流程

這里的核心是分配一個(gè)關(guān)于md設(shè)備的數(shù)據(jù)結(jié)構(gòu)(mddev),并且調(diào)用通用塊層的接口創(chuàng)建一個(gè)通用塊設(shè)備并添加(add_disk)到系統(tǒng)。成功之后,我們就可以在/dev目錄下看到我們想創(chuàng)建的md設(shè)備了,設(shè)備名稱就是mdadm傳入的參數(shù)。這里面需要重點(diǎn)關(guān)注的是,在分配md設(shè)備的數(shù)據(jù)結(jié)構(gòu)的時(shí)候會(huì)關(guān)聯(lián)一個(gè)名為md_make_request的函數(shù),該函數(shù)就是RAID的IO處理函數(shù)。

此時(shí)已經(jīng)可以看到設(shè)備,但是還不能使用,因?yàn)镽AID設(shè)備還沒(méi)有與底層的物理設(shè)備關(guān)聯(lián)起來(lái)。因此,后續(xù)mdadm工具會(huì)通過(guò)系統(tǒng)調(diào)用觸發(fā)內(nèi)核啟動(dòng)RAID,具體流程如圖7所示。

RAID啟動(dòng)流程

圖7 RAID啟動(dòng)流程

此時(shí),內(nèi)核會(huì)根據(jù)超級(jí)塊信息執(zhí)行若干動(dòng)作,并且更改其中某些狀態(tài)標(biāo)記。成功之后RAID設(shè)備就可以使用了。關(guān)于細(xì)節(jié)我們這里不做介紹,介紹了大家也記不住,有興趣的同學(xué)可以自行閱讀代碼。

3. 讀寫(xiě)請(qǐng)求核心流程

前文我們知道創(chuàng)建RAID其實(shí)是創(chuàng)建了一個(gè)通用塊設(shè)備,并注冊(cè)了請(qǐng)求處理函數(shù)(md_make_request)。當(dāng)在用戶態(tài)通過(guò)文件系統(tǒng)接口訪問(wèn)該塊設(shè)備(RAID)時(shí),虛擬文件系統(tǒng)會(huì)調(diào)用該函數(shù)(請(qǐng)參考本號(hào)之前關(guān)于SCSI磁盤(pán)的文章)。因此,關(guān)于RAID的讀寫(xiě)流程,我們就從該函數(shù)開(kāi)始介紹,下面先看一下整體流程。

圖8 讀寫(xiě)流程

從圖8可以看出整個(gè)流程還是比較簡(jiǎn)單的。在公共層會(huì)根據(jù)參數(shù)調(diào)用個(gè)性層的接口,對(duì)于RAID1來(lái)說(shuō)就是調(diào)用raid1_make_request函數(shù)。該函數(shù)中會(huì)根據(jù)請(qǐng)求類型出現(xiàn)不同的分支,上圖是寫(xiě)數(shù)據(jù)的流程。

RAID1本身比較簡(jiǎn)單(請(qǐng)求分別放入底層物理磁盤(pán)),IO經(jīng)過(guò)簡(jiǎn)單處理后會(huì)放入一個(gè)隊(duì)列中。然后喚醒守護(hù)線程刷寫(xiě)隊(duì)列。

責(zé)任編輯:趙寧寧 來(lái)源: itworld123
相關(guān)推薦

2010-12-28 19:50:21

可靠性產(chǎn)品可靠性

2010-12-28 20:04:10

網(wǎng)絡(luò)的可靠性網(wǎng)絡(luò)解決方案可靠性

2017-06-23 18:25:51

kafka數(shù)據(jù)可靠性

2016-12-22 15:27:22

數(shù)據(jù)中心NFV運(yùn)營(yíng)商

2011-05-25 19:31:07

Stratus信息化

2010-12-28 20:16:24

2010-12-28 19:55:20

軟件架構(gòu)可靠性

2020-12-06 14:51:23

物聯(lián)網(wǎng)可靠性IOT

2009-04-08 10:23:00

軟交換網(wǎng)絡(luò)可靠

2015-06-09 14:04:04

2013-11-04 17:04:22

容錯(cuò)可靠

2024-05-09 08:04:23

RabbitMQ消息可靠性

2021-02-02 11:01:31

RocketMQ消息分布式

2018-09-27 14:13:27

云服務(wù)可靠故障

2013-11-04 17:05:37

銀行容錯(cuò)

2024-02-28 10:26:04

物聯(lián)網(wǎng)數(shù)據(jù)存儲(chǔ)

2011-05-04 19:17:36

VPLSVPN技術(shù)

2023-11-17 09:00:00

Kafka開(kāi)發(fā)

2018-05-07 10:20:38

Kafka存儲(chǔ)機(jī)制

2013-10-12 10:19:44

虛擬化可靠性
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)