成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux操作系統存儲子系統核心技術之硬盤與RAID

系統 Linux
Linux操作系統的存儲子系統應該是Linux中最為復雜的子系統了。其實很多子系統都認為自己是最復雜的子系統,比如內存子系統和網絡子系統也這么說。

 Linux操作系統的存儲子系統應該是Linux中最為復雜的子系統了。其實很多子系統都認為自己是最復雜的子系統,比如內存子系統和網絡子系統也這么說。無論如何,存儲子系統在Linux中是比較復雜的。今天我們就介紹一下Linux的存儲子系統中的硬盤與RAID的相關內容,后面再寫一篇關于LVM與文件系統的內容。

[[350945]]

硬盤

在Linux的存儲子系統中,最底層的就是硬盤了。這里的硬盤并不是指我們看到的硬盤硬件,而是指在Linux內部看到的硬盤設備,或者說是塊設備。如果我們在/dev目錄執行以下ls命令,就可以看到很多設備。在這些設備中以sd開頭的就是基于SCSI協議的硬盤。

 

 

圖1 Linux中的塊設備

無論是基于SAS、iSCSI還是FC的磁盤設備,大概都是這個樣子。形似dm-X的是Device Map塊設備,也就是通過LVM進行管理的設備,這種設備是一種邏輯設備。

在Linux操作系統中塊設備的種類很多,有本地磁盤設備、有SAN設備還有基于網絡的塊設備。在虛擬機中塊設備又呈現為另外一種文件名,比如在Xen虛擬機中為xvdX。

雖然名稱差異很大,但是在Linux操作系統內核中的實現卻非常簡單。在內核中任何磁盤塊設備都是通過調用add_disk函數完成的。在《Linux設備驅動程序》這本書對塊設備進行了詳細的介紹,并且可以通過非常簡單的代碼實現一個自己的塊設備。

 

 

圖2 最簡單的塊設備驅動

這里面有2個函數,也就是alloc_disk和add_disk。前一個函數是分配一個通用塊的結構體,后者則是將該塊設備添加到內核,也就是在/dev目錄下生成一個“文件”。以上述代碼為例,執行后會生成如下塊設備。

 

  1. brw-rw---- 1 root disk 251, 0 Jun 16 09:13 /dev/sbulla 

這里我們自定義了一個設備名稱sbulla。其實我們看到的SCSI設備也是這樣定義的,只不過其定義名稱的時候是通過sd字符。

以上述代碼為例,在塊設備中比較重要的地方是初始化了一個隊列處理函數(sbull_full_request)。所有從上層訪問該塊設備的請求都會轉發到該處理函數進行處理。

所有塊設備都要初始化這個隊列,并且提供一個請求處理函數。不同的塊設備的請求處理函數略有不同。比如常見的SCSI塊設備,其處理函數初始化過程如下:

 

  1. q = __scsi_alloc_queue(sdev->host, scsi_request_fn); 

而nbd(網絡塊設備,通過網絡的方式將服務端的文件映射為客戶端的塊設備)設備的初始化隊列的代碼如下所示:

 

  1. disk->queue = blk_init_queue(do_nbd_request, &nbd_lock); 

類似的例子還很多,本文不再一一介紹。這里我們需要理解一點,核心問題在于注冊處理請求的回調函數,以及通過add_disk就可以在/dev目錄下面創建一個塊設備。

另外一點,對于任何類型的塊設備,無論是本地硬盤,還是經過網絡的NBD和iSCSI,還是FC設備,最后都是/dev目錄下的一個文件,而這個文件其實就是塊設備。我們可以通過對該文件的讀寫實現對塊設備的訪問。

RAID

作為普通用戶使用單個硬盤是沒有任何問題的,但是作為企業應用使用單個硬盤存在很大的風險。這時因為硬盤隨時有可能損壞,因此我們需要一種機制來保證即使出現硬盤故障的情況下,數據不會丟失,且業務仍然可以正常工作。

RAID正是解決上述問題的技術。RAID的全稱為廉價冗余磁盤陣列(Redundant Array of Inexpensive Disks),從字面可以看出其基本原理就是通過廉價的磁盤組成一組磁盤。RAID不僅僅可以通過冗余的方式解決數據可靠性的問題,還可以提高性能。其主要原理就是將請求拆分到多個物理硬盤來執行,性能自然比一個硬盤快了。

在Linux操作系統層面,其實就是將物理磁盤通過軟件抽象為邏輯磁盤。以RAID1(兩塊磁盤存儲相同的數據,在出現一塊磁盤故障的情況下,數據不丟失)為例,通過Linux內核中的軟件創建一個虛擬的塊設備,而該塊設備中記錄了底層對應的物理設備及相關參數。

 

 

圖3 RAID1 示意圖

因此,從用戶層面來看就是一塊普通的磁盤設備,而在底層卻是2個獨立的物理硬盤。當用戶向邏輯磁盤寫數據的時候,其中的軟件會通過參數進行計算,并將數據重新定向到底層的物理設備。通過這種方法可以保證即使出現某個物理磁盤損壞,用戶的數據仍然完好無損。

除了上面說的RAID1外,還有很多RAID類型。不同的RAID類型實現不同的功能。比如RAID0實現條帶化,主要是提升性能;RAID1則是實現數據的冗余,防止磁盤故障導致的數據丟失;由于上述RAID只能解決一方面的問題,因此有人講兩者結合,出現了RAID10和RAID01,這樣既能保證數據的可靠性,又能提升性能。

由于RAID1是一份數據寫到兩個設備,因此只有50%的有效數據。為了提高有效數據率,于是發明了RAID5和RAID6等類型。其中RAID5通過增加一個校驗數據來保證數據的可靠性,以5塊盤的RAID5為例,其中有效數占4塊盤的空間,有效數據80%。但是RAID5有個問題,就是一組磁盤中只能壞一塊,如果損壞的磁盤超過1塊就會導致數據丟失。RAID6的算法與RAID5類似,它的特點是可以容忍2塊磁盤故障。

在實現層面,Linux的RAID實現在用戶態和內核態都有涉及。其中用戶態主要進行RAID的管理,而內核態一方面配合用戶態進行RAID管理,另外一方面則實現對IO的處理,這部分才是RAID最為核心的內容。

 

 

圖4 軟件架構

對于基于SCSI物理磁盤的RAID來說,Linux環境下整個軟件架構如圖4所示。其中虛線以上的為用戶態的軟件模塊,虛線以下的為內核態的軟件模塊。這里比較核心的是RAID公共層,在這里主要創建md設備,該設備是一個邏輯設備,也是用戶可以看到的RAID設備。其下則是具體的RAID模塊,用于實現不同的RAID級別(算法)。

再往下就是通用SCSI驅動層了,也就是圖中的SCSI磁盤驅動這一層的內容。該層其實是SCSI系統的上層驅動(SCSI子系統分為上中下三層)。RAID模塊通過調用該層的數據訪問接口就可以實現物理磁盤數據讀寫了。

責任編輯:華軒 來源: 今日頭條
相關推薦

2023-02-26 23:13:24

存儲LinuxRAID

2010-03-26 10:51:30

Linux操作系統

2009-12-09 17:25:19

Linux操作系統

2009-12-23 17:47:15

Linux操作系統

2010-04-26 09:52:39

2009-12-03 09:01:07

兩個Linux操作系統

2015-09-24 09:36:14

ONOS架構網絡操作系統

2009-02-02 09:43:19

固態硬盤SSD碎片整理

2010-04-08 16:05:49

Unix操作系統

2010-01-06 17:45:47

Linux操作系統

2020-12-29 16:39:01

Linux代碼命令

2018-03-02 09:04:08

虛擬化存儲云存儲

2010-04-20 15:36:01

Linux多點觸摸

2012-07-23 14:57:36

Linux操作系統集群

2018-09-14 11:00:33

操作系統存儲管理

2017-03-08 10:06:11

Java技術點注解

2010-02-25 15:03:58

Linux操作系統

2014-09-22 13:31:46

Linux

2010-05-04 14:27:52

Unix操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美日韩在线观看 | 涩涩导航 | 91一区二区 | 91免费小视频 | 久草热播| 人人鲁人人莫人人爱精品 | 精品日韩一区 | 九九福利 | 成人黄色av网址 | 丁香婷婷久久久综合精品国产 | 成人性视频在线 | 国产成人精品a视频一区www | 成人三级网址 | 国产精品中文字幕在线 | 亚洲成av片人久久久 | 欧美日韩免费在线 | 国产精品毛片无码 | 四虎在线观看 | 日韩中文字幕av | 国产三区视频在线观看 | 欧美xxxx色视频在线观看免费 | 欧美日韩国产欧美 | 99精品国产一区二区三区 | 亚洲人成免费 | 国产三级国产精品 | 亚洲一区视频在线 | 国产免费一区二区 | 欧美最猛黑人 | 国产一级免费视频 | 亚洲视频 欧美视频 | 国产亚洲精品精品国产亚洲综合 | 在线观看毛片网站 | 天天干在线播放 | 久久久久久久久久久久久久久久久久久久 | 成人a在线观看 | 亚洲成人一级片 | 一区二区三区视频 | 99一级毛片 | 中文字幕亚洲区一区二 | 久久免费视频1 | 黄色av网站在线观看 |