久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

linux軟raid如何實現(xiàn)

129次閱讀
沒有評論

共計 23858 個字符,預(yù)計需要花費 60 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

丸趣 TV 小編給大家分享一下 linux 軟 raid 如何實現(xiàn),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1 什么是 RAID,RAID 的級別和特點;

什么是 RAID 呢?全稱是“A Case for Redundant Arrays of Inexpensive Disks (RAID)”,在 1987 年,由加州大學(xué)伯克利大學(xué)發(fā)表的論文而來,其實就是這個標題的縮寫就是 RAID; 中譯為“磁盤陣列”;

RAID 就是把幾個物理磁盤組合在一起成為一個大的虛擬物理磁盤,主要目的和用途主要有:把若干小容量物理磁盤組成一個大容量虛擬存儲設(shè)備(以前的物理磁盤的容量都比較小);提高物理存儲效率(讀、寫),或提供冗余以提高數(shù)據(jù)存儲的安全性。

根據(jù)應(yīng)用方向的不同,RAID 也分不不同級別,有 LINEAR、RAID0、RAID1、RAID5、RAID10、RAID4、RAID6、MULTIPATH。常用的有 RAID0、RAID1、RAID5、RAID10(其實就是 0 +1)、LINEAR

1.1 什么是硬件 RAID 和軟 RAID;

RAID 還分為硬件 RAID 和軟件 RAID,硬件 RAID 是通過 RAID 卡來實現(xiàn)的,而軟件 RAID 是通過軟件來實現(xiàn)的;在企業(yè)級應(yīng)用領(lǐng)域,大部份都是硬件 RAID。而軟件 RAID 由于性價比高,大多被中小型企業(yè)所采用;

硬件 RAID 是通過 RAID 卡把若干同等容量大小的硬盤,根據(jù)使用方向的不同,聚合起來成為一個大的虛擬 RAID 設(shè)備(或 RAID0,或 RAID1, 或者 RAID5,或 RAID10……),如果每個硬盤容量不一致,以最小容量的硬盤為基礎(chǔ);它的成員是整個硬盤;

軟 RAID 是軟把若干同等容量大小的硬盤或分區(qū),根據(jù)使用方向的不同,聚合起來成為一個大的虛擬 RAID 設(shè)備(或 RAID0,或 RAID1, 或者 RAID5,或 RAID10……),如果每個硬盤或分區(qū)容量不一致,以最小容量的硬盤或分區(qū)為基礎(chǔ)。軟 RAID 的成員是整個硬盤或分區(qū);

RAID 總的來說還是應(yīng)用在生產(chǎn)型項目領(lǐng)域中,一般在商用辦公或個人娛樂應(yīng)用并未被大規(guī)模采用。應(yīng)有領(lǐng)域大多要求性價比級的低端服務(wù)器或 PC-SERVER;

1.2 RAID 的級別及特點;

RAID 有幾種級別,LINEAR,RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, and FAULTY. 其中我們常用有 RAID0、RAID1、RAID5、RAID10。

下面我們說說常用的 RAID0、RAID1、RAID5 以及 RAID10;

1.21 什么是軟 RAID0 及特點;

RAID0 是把兩個或兩個以上的容量相同的硬盤或分區(qū),通過 RAID 控制器(硬 RAID 是通過 RAID 卡來實現(xiàn)的,軟 RAID 是通過軟件來實現(xiàn)的),結(jié)合為一個在容量上是 RAID0 下成員的容量的總和,在寫入時,要向每個硬盤或分區(qū)同時寫入數(shù)據(jù)。

在硬 RAID 中,RAID0 的成員是以整個硬盤為單位的,把兩個硬盤或兩個以上的硬盤通過 RAID 卡綁定成為一個虛擬的磁盤設(shè)備,而每個硬盤就是 RAID0 的成員;

在軟 RAID0 中,RAID0 的成員是整個硬盤或分區(qū),容量是加入 RAID0 的所有成員容量的總和。在 RAID0 中每個成員的容量都是相同一致的。比如我們把 /dev/sdb、/dev/sdc、/dev/sdd 三個容量大小為 80G 的硬盤做成 RAID0,這時 RAID0 設(shè)備的容量就是三個硬盤的總和 80×3=240G。當(dāng)然我們也可以,在寫入數(shù)據(jù)時,系統(tǒng)要向每個硬盤同時寫入數(shù)據(jù),是以條塊的形式寫入。比如我們存一份數(shù)據(jù) linuxsir.tar.gz 到 RAID0 的設(shè)備中,這份數(shù)據(jù)是分拆成若干份被分散的寫入到 RAID0 中的每個成員中。只有 RAID0 中的每個成員正常運行,并且 RAID0 也正常運行的情況下,這份數(shù)據(jù)才是完整的。RAID0 中任何一個成員(硬盤分區(qū))有有問題時,RAID0 便不能運行,同時數(shù)據(jù)也不是完整的;

RAID0 在讀寫速度上是比較快的,是普通不做 RAID 的兩倍左右(注:實際速度和機器的硬件配置有關(guān)),所以 RAID0 常被用于對存儲效率要求較高,但對數(shù)據(jù)安全性要求不高的應(yīng)用解決方案中;

安全性:RAID0 中有任何一個成員出現(xiàn)故障,整個 RAID0 就不能被激活。數(shù)據(jù)不能保障;

1.22 什么是軟 RAID1 及特點;

RAID1 就是把若干相同容量的硬盤或分區(qū),成員與成員之間是鏡像關(guān)系。在容量上,RAID1 設(shè)備是單個成員的容量。比如兩個 80G 的硬盤做成 RAID1, 這個 RAID1 的設(shè)備容量仍是 80G。比如我們寫入一個份數(shù)據(jù) linuxsir.tar.bz2 到 RAID1 設(shè)備時,其實是向 RAID 的每個成員都寫了一份。比如 RAID1 設(shè)備下有兩個成員 /dev/sdb 和 /dev/sdc,我們寫入 linuxsir.tar.bz2 到 RAID1 時,/dev/sdb 和 /dev/sdc 都有一份完整的 linuxsir.tar.bz2。所以 RAID1 是冗余的陣列,一般被用于安全性要求比較高的應(yīng)用中。

因為 RAID1 在由于鏡像冗余,所以磁盤利用效率并不高,或者說是“浪費”。這種方案相對來說性價比并不高,一般很少應(yīng)用。數(shù)據(jù)讀寫效率要比 RAID0 慢。

安全性:RAID1 中只要有一個成員是健康的,RAID1 完全可以激活,而且數(shù)據(jù)絕對是完整安全的。如果所有的成員有故障,RAID1 也就報廢了。哈哈,這不是廢話嗎?

1.23 什么是軟 RAID5 及特點;

軟 RAID5 也是冗余安全的,RAID5 是把至少三個硬盤或分區(qū)通過軟件虛擬成為一個大的存儲設(shè)備。在容量上是(n-1)x 單個硬盤(分區(qū))容量,比如我們用三塊 80G 硬盤做成 RAID5, 容量就是兩塊容量的和 160G。在寫入上,數(shù)據(jù)被分拆成若干份,分別向 RAID5 的每個成員下寫入。比如把 linuxsir.tar.bz2 寫入 RAID5 時,要先把 linuxsir.tar.bz2 分拆成若干份,分別寫入 RAID5 成員中。因為涉及到冗余,所以數(shù)據(jù)在讀入速度上并不是很快,沒辦法和 RAID0 相比,但 RAID5 的寫入數(shù)據(jù)速度沒有 RAID1 和 RAID0 快,也沒有不做 RAID 的磁盤寫入速度要快;

因為 RAID5 在容量損失比較小,有冗余安全保障,另外寫入速度比較快,從整體上來看,性價比比較高,所以被大范圍內(nèi)采用;

安全性:當(dāng) RAID5 中的成員中有一個發(fā)生故障時,RAID5 一樣能啟動和正常運行,只要 n -1(注 n 3)塊硬盤或分區(qū)的不出故障,RAID5 上的數(shù)據(jù)就是安全,對于一個文件存到 RAID5 設(shè)備中,只有成員是 n -1(注 n 3)無故障時,這份文件才是完整的。比如 RAID5 有四個硬盤(或分區(qū))做的,當(dāng)一個硬盤或分區(qū)掛掉了,并不影響整個 RAID5 上數(shù)據(jù)的完整性和安全性。

1.24 什么是軟 RAID10 及特點;

軟 RAID10 也是冗余安全陣列,是 RAID0+ 1 的集成,RAID10 是把至少四個硬盤或分區(qū)通過軟件虛擬成為一個大的存儲設(shè)備。在容量是:n/2x 單個硬盤(分區(qū))容量,比如我們用四塊 80G 硬盤做成 RAID5, 容量就是兩塊容量的和 4 /2×80=160G。做 RAID10 所需要的硬盤或分區(qū)個數(shù)是偶數(shù)的。

RAID10, 有 RAID1 的鏡像特點,還有 RAID0 的速度。可以這么理解 RAID10, 比如有四個硬盤做成的 RAID10, 過程是先把每兩個硬盤做成 RAID1, 然后再兩個 RAID1 的基礎(chǔ)上再做成 RAID0。從理論上來說,RAID10 應(yīng)該繼承 RAID0 的速度和 RAID1 的冗余安全。但經(jīng)過我在軟 RAID0、RAID1、RAID5、RAID10 的測試過程中發(fā)現(xiàn) RAID10 的寫入速度是最慢的,測試方法是用超過 1G 的大文件幾盤復(fù)制。結(jié)果發(fā)現(xiàn)速度由高低的順序是:RAID0 不做 RAID RAID1 RAID5 RAID10

2 在 Linux 中,軟 RAID 的創(chuàng)建和管理;

在 Linux 中,軟 RAID 是通 mdadm 來創(chuàng)建和管理的,mdadm 是一個專用創(chuàng)建和管理 RAID 的軟件,在 Linux 中,大多發(fā)行版本已經(jīng)默認安裝,mdadm 能創(chuàng)建任何級別的軟 RAID;

在本節(jié)中,RAID 創(chuàng)建并不是目的,我們還要查看學(xué)會 RAID 的狀態(tài),啟動、停止 RAID。還要學(xué)會使用 RAID。所以 RAID 的使用應(yīng)該包括創(chuàng)建、管理和使用。RAID 的使用就是在 RAID 設(shè)備上創(chuàng)建文件系統(tǒng),然后供存儲應(yīng)用;

流程是:

[RAID 創(chuàng)建]- [RAID 管理]- [RAID 的使用]
                            |
                  [RAID 的維護]

2.1 RAID 的創(chuàng)建方法;

創(chuàng)建 RAID 有兩個方法,

第一種方法:用 mdadm 通過 - C 或 –create 參數(shù)來創(chuàng)建 RAID。這種方法,是把 RAID 信息寫到每個 RAID 成員的 superblocks(超級塊)中,在每個 RAID 成員的超級塊中,都會記錄 RAID 的級別、成員、RAID 的 UUID 等…… 這種方法把 RAID 的信息記錄在各個成員的 superblocks(超級塊)中。這種方法對于重裝系統(tǒng)或系統(tǒng)發(fā)生災(zāi)難來來說,有利于現(xiàn)有 RAID 的恢復(fù);這種方法是最常用的;

第二種方法:用 mdadm 通過 - B 或 –build 參數(shù)來創(chuàng)建 RAID。這種方法并不把 RAID 的信息寫入 RAID 成員的 superblocks(超級塊中),所以我們無法通過查看 RAID 成員信息來獲得 RAID 的級別,以及 RAID 的成員等;這種方法對于重裝系統(tǒng)或系統(tǒng)發(fā)生災(zāi)難來來說,不利于現(xiàn)有 RAID 的恢復(fù);如果你想用第二種方法來創(chuàng)建 RAID,可以在下面的語法中,把 - C 或 –create 換成 - B 或 –build。

語法:創(chuàng)建把 RAID 信息寫入 RAID 每個成員的 superblocks(超級塊)中;

mdadm -C   -v  /dev/mdX   -lY   -nZ  RAID 成員

mdadm  –create  –verbose  /dev/mdX   –level=Y    –RAID-devices=Z    RAID 成員
注:

-C 是 –create 的縮寫,表示創(chuàng)建的意思;這種方法是創(chuàng)建把 RAID 信息寫入每個 RAID 成員 superblocks(超級塊)的方法。這是最常用的方法。
-v 和 –verbose,顯示創(chuàng)建過程中詳細的事件;

如果把 - C 或 –create 換成 - B 或 –build,就是創(chuàng)建 RAID 的另一種方法,不把 RAID 信息寫入 RAID 成員的 superblocks(超級塊)中,如果您試用,請自己嘗試;

RAID 設(shè)備:/dev/mdX,RAID 設(shè)備在 Linux 中,大多是 /dev/md0,/dev/md1…… 第一個設(shè)備從 /dev/md0 開始。比如你已經(jīng)有 RAID0 設(shè)備是 /dev/md0,你再想做一個 RAID5,那就是 /dev/md1,以此類推;

RAID 級別:用 -lY 或 –level= Y 表示,Y 是 RAID 的級別。RAID 的級別有 RAID0 就用 0 表示,RAID1 就用 1 表示,RAID5 就用 RAID5 表示,RAID10 就用 10 表示。RAID 的級別是根據(jù)自己的使用方向和現(xiàn)有磁盤和分區(qū)個數(shù)來定位。如果你就想高速讀寫、大容量,對數(shù)據(jù)安全性要求不高,那就用 RAID0,如果對數(shù)據(jù)要求較高,可以用 RAID1 或 RAID5,再者就是 RAID10。比如 -l0 或 –level= 0 表示 RAID0,-l5 或 –level= 5 表示 RAID5, -l1 或 –level= 1 表示 RAID1,-l10 或 –level=10 表示 RAID10;

-nZ 或 –RAID-devices=Z 表示 RAID 成員的個數(shù),比如我們把三個硬盤分分區(qū)做成一個 RAID,那就是 3 個設(shè)備。就要寫成這樣 -n3 或 –RAID-devices=3;值得注意的是 RAID0 和 RAID1 至少需要兩個設(shè)置,RAID5 至少需要三個設(shè)備,RAID10 至少四個設(shè)備;

RAID 成員:也就是 RAID 的組成設(shè)備,要一個一個的列出來,每個設(shè)備后要用空格來隔開;比如我們把 /dev/sdb、/dev/sdc、/dev/sdd 三個硬盤做成 RAID0,在 RAID 設(shè)備這塊,我們要寫成 /dev/sdb /dev/sdc /dev/sdd;軟件 RAID 的成員還可以是分區(qū),比如 /dev/sdb1、/dev/sdc1 ……

舉例一:我們要做一個 RAID0, 成員是 /dev/sdb、/dev/sdc 兩個硬盤設(shè)備。我們要運行如下命令;

mdadm  -C  –verbose  /dev/md0 -l0 -n2 /dev/sdb /dev/sdc

mdadm -C  –verbose   /dev/md0   –level=0  –RAID-devices=2  /dev/sdb /dev/sdc
如果我們想把 /dev/sdb1、/dev/sdc1 和 /dev/sdd1 三個分區(qū)做成 RAID0 呢?

mdadm  -C  -v  /dev/md0 -l0 -n3 /dev/sd[bcd]1

mdadm -C  –verbose   /dev/md0   –level=0  –RAID-devices=3  /dev/sdb1 /dev/sdc1  /dev/sdd1
舉例二:我們要做一個 RAID5,成員是 /dev/sdb、/dev/sdc、/dev/sdd 三個設(shè)備,我們要運行如下命令;

mdadm  -C  -v  /dev/md0 -l5 -n3 /dev/sd[bcd]

mdadm -C  –verbose   /dev/md0   –level=5  –RAID-devices=3  /dev/sdb /dev/sdc  /dev/sdd 
如果我們想把 /dev/sdb1、/dev/sdc1 和 /dev/sdd1 三個分區(qū)做成 RAID5 呢?

mdadm  -C  -v  /dev/md0 -l5 -n3 /dev/sd[bcd]1 

mdadm -C  –verbose   /dev/md0   –level=5  –RAID-devices=3  /dev/sdb1 /dev/sdc1  /dev/sdd1
創(chuàng)建完成后,RAID 也就立即啟動了。我們會發(fā)現(xiàn)有類似如下一行的提示信息:

mdadm: array /dev/md0 started.
我們要可以通過下面的命令來查看 RAID 的信息;

mdadm -Ds /dev/md0
mdadm -D /dev/md0

2.2 RAID 管理工具;

RAID 的管理包括創(chuàng)建、啟動、狀態(tài)查看等一系列工具;我們只說常用的使用方法;

2.21 RAID 的啟動方法;

RAID 的啟動有兩種方法,一種是指定 RAID 設(shè)備和 RAID 成員的辦法來啟動 RAID,另一種辦法是通過加載 RAID 默認的配置文件來啟動。

第一種方法:不通過讀取 mdadm.conf 來啟動 RAID;適用情況是你沒有配置 /etc/mdadm.conf 文件;

語法:

mdadm -A RAID 設(shè)備   RAID 成員
注:

-A 同 –assemble,意思是激活一個已經(jīng)存在的 RAID;
RAID 設(shè)備,就是 /dev/md0 或 /dev/md1 …… 根據(jù)你所創(chuàng)建的 RAID 設(shè)備為準;
RAID 成員,就是你要啟動的 RAID,其下屬設(shè)備有哪些,要一個一個的列出來,中間以空格分開;

舉例:比如我要啟動一個 RAID,設(shè)備是 /dev/md0,其下有成員是 /dev/sdb 和 /dev/sdc;所以我要用下面的辦法;

[root@linuxsir:~] mdadm  -A /dev/md0  /dev/sdb /dev/sdc
注:這種情況,是沒有配置 RAID 的配置文件 /etc/mdadm.conf 時,所使用的啟動方法;如果您已經(jīng)配置好了 /etc/mdadm.conf 文件,就可以用 mdadm -As 來啟動;

第二種方法:利用配置好的 /etc/mdadm.conf 來啟動 RAID;

mdadm -A RAID 設(shè)備  

mdadm -As
注:這種啟動方法的前提是要配置 /etc/mdadm.conf 文件,要把您系統(tǒng)中所有的 RAID,都寫入這個文件,然后就可以簡單的用這個命令來啟動了;

-A 同 –assemble,意思是激活一個已經(jīng)存在的 RAID;
RAID 設(shè)備,就是 /dev/md0 或 /dev/md1 …… 根據(jù)你所創(chuàng)建的 RAID 設(shè)備為準;

舉例:

[root@linuxsir:~] mdadm  -A /dev/md0
[root@linuxsir:~] mdadm -As
注:比如我配置好 /etc/mdadm.conf 后,啟動 RAID 設(shè)備 /dev/md0,就用上面的辦法。具體 mdadm.conf 的寫法,請參見 RAID 的配置文件一節(jié);

2.22 RAID 管理工具一些常用參數(shù)說明;

mdadm 參數(shù)  [RAID 設(shè)備]  [RAID 成員]

-A 或  –assemble   激活一個 RAID;
-S 和 –stop   停止正在運行的設(shè)備;
-s 或 –scan   掃描 RAID 設(shè)備;
-D 或 –detail 查看 RAID 的詳細信息;
–examine   查看 RAID 成員的詳細信息;
注:其中 [] 中的選項是可選的。

舉例:

[root@linuxsir:~]# mdadm -As  
[root@linuxsir:~]# mdadm -Ss
[root@linuxsir:~]# mdadm -Ds
[root@linuxsir:~]# mdadm –examine /dev/sdb
注:上面的些標例,都是在配置好 /etc/mdadm.conf 的情況下,運行的,如果您沒配置好 mdadm.conf 文件,請指定 RAID 設(shè)備及其成員;其中,–As 是搜索 /etc/mdadm.conf,然后根據(jù) mdadm.conf 配置好的 RAID 信息來啟動 RAID。-Ss 是搜索正在運行的 RAID,然后停止。-Ds 搜索 RAID,查看 RAID 信息;–examine /dev/sdb 是查看其中一塊硬盤的 RAID 信息,這個很有用。比如你忘記了 RAID 的成員和 UUID,想恢復(fù)現(xiàn)有的 RAID,就要用這個來查看,然后重新讓 RAID 啟動起來。

比如系統(tǒng)有一個 RAID,但在 /etc/mdadm.conf 中沒有相應(yīng)的記錄 RAID 信息。我不知道這個 RAID 是哪個類型的,是 RAID0,還是 RAID1,還是 RAID5??到底機器中有幾個 RAID?如果您是一個新接手的管理員,應(yīng)該想知道這些信息。那就一個一個硬盤,一個一個的分區(qū)查看過去。從中找出系統(tǒng)中所有的 RAID。然后一個一個的恢復(fù)。這時就要用到 –examine 這個參數(shù)了;

[root@linuxsir:~]# fdisk -l 

[root@linuxsir:~]# # mdadm   –examine   /dev/sdb
/dev/sdb:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 35e1a3e6:ed59c368:e5bc9166:5004fe52
  Creation Time : Wed Aug  1 07:11:43 2007
     RAID Level : RAID0
  Used Dev Size : 0
   RAID Devices : 2
  Total Devices : 2
Preferred Minor : 0

    Update Time : Thu Aug  2 07:43:30 2007
          State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
  Spare Devices : 0
       Checksum : 8f8a235e – correct
         Events : 0.29

     Chunk Size : 64K

      Number   Major   Minor   RAIDDevice State
this     0       8       16        0      active sync   /dev/sdb

   0     0       8       16        0      active sync   /dev/sdb
   1     1       8       32        1      active sync   /dev/sdc
注:

首先:我們用 fdisk -l 查看一下機器中所有硬盤和分區(qū),如果不能完全列出,請指定具體硬盤。
其次:我們查看一下某個硬盤或分區(qū)上是否有 RAID 信息,比如我查看的是 /dev/sdb,結(jié)果顯示出,/dev/sdb 是 RAID0 設(shè)備的一個成員,/dev/sdb 和 /dev/sdc 共同組成的 RAID0;

得到這些信息有何用呢?我們就可以激活 RAID,或重寫 /etc/mdadm.conf,讓 RAID 重新運行起來。在此過程中,千萬不要用 - C 或 –create 參數(shù)來重新創(chuàng)建 RAID,否則你以前存在的 RAID 就被破壞,里面的數(shù)據(jù)當(dāng)然也會一無所有!!!切記。在一個有數(shù)據(jù)的 RAID 中,不能隨便用 -C 參數(shù)。如果用了 - C 或 –create 就是創(chuàng)建一個新的 RAID 設(shè)備!

2.3 RAID 的配置文件;

RAID 并不是一定要配置文件,但有配置文件,會方便管理,比如 RAID 最精簡的方法執(zhí)行、狀態(tài)查看………… 也需要 RAID 的配置文件。如果不沒有配置文件,還要指定 RAID 成員;

RAID 的配置文件是 mdadm.conf 位于 /etc 目錄,如果你沒有這個文件,可以自己創(chuàng)建一個;當(dāng)我們做好 RAID 后,首先要配置這個文件;把你所有的 RAID 配置信息都寫入這個文件。我們可以自己手工編寫。參照 mdadm.conf 配置文件的示例就比較方便。

你也可以用下面的辦法,要先做好 /etc/mdamd.conf 的備份;

[root@linuxsir~] mv  /etc/mdadm.conf /etc/mdadm.conf.bak

第一步:搜索 RAID;

搜索 RAID 是以激活 RAID 為前掉條件,否則下面的命令不會有什么作用;請參見激活 RAID 的辦法;

語法:

mdadm -Ds
注:其中 -D 表示 –detail,-s 表示 –scan,兩者結(jié)合起來就 -Ds;
提示:運行查詢 RAID 的時,要首先激活 RAID;

舉例:

[root@linuxsir~] mdadm -Ds 
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
第二步:查詢 RAID 的詳細信息;主要是查看 RAID 的成員有哪些;

語法:

mdadm -D RAID 設(shè)備
舉例:

下面查詢已經(jīng)啟動了的 RAID 設(shè)備 /dev/md0 的詳細信息;

[root@linuxsir~] mdadm -D  /dev/md0  

/dev/md0:
        Version : 00.90.03
  Creation Time : Wed Aug  1 07:11:43 2007
     RAID Level : RAID0
     Array Size : 156249856 (149.01 GiB 160.00 GB)
   RAID Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Thu Aug  2 07:22:27 2007
          State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 64K

           UUID : 35e1a3e6:ed59c368:e5bc9166:5004fe52
         Events : 0.21

    Number   Major   Minor   RAIDDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
注:通過查詢詳細信息,我們得到 /dev/md0 是 RAID0,下面兩個成員 /dev/sdb 和 /dev/sdc;UUID 為 35e1a3e6:ed59c368:e5bc9166:5004fe52;這個 RAID 是有超級塊的;

第三步:書寫 RAID 的配置文件 mdadm.conf;

[root@linuxsir~] mdadm -Ds   /etc/mdadm.conf   注:把查詢出來的 RAID 信息寫到 mdadm.conf 中;
[root@linuxsir~]more /etc/mdadm.conf   注:看看有沒有內(nèi)容寫進來?
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
因為我們在前面已經(jīng)通過 mdadm -D /dev/md0 得知其下有成員 /dev/sdb 和 /dev/sdc 兩塊硬盤。所以我們要修改一下 mdamd.conf 的內(nèi)容。要在加上 /dev/md0 的成員 /dev/sdb 和 /dev/sdc;用編輯器打開 /etc/mdadm.conf;

在下面類似的一行;

ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
修改成

ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52 devices=/dev/sdb,/dev/sdc
其實也就是把 /dev/md0 這個 RAID 設(shè)備的成員指定出來,每個設(shè)備之間要用, 號隔開。或者寫成 devices=/dev/sd[bc]類似的寫法也行;

我們來看一下 /dev/md0 這行,其中 /dev/md0 這行是一個 RAID0 設(shè)備,由兩個成員組成,/dev/md0 的 UUID 為 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52,兩個成員分別是 /dev/sdb 和 /dev/sdc 兩個硬盤;

其實我們無論添加多少 RAID 設(shè)備,都可以通過這種方法寫入 RAID 配置文件 /etc/mdadm.conf 中,每個 RAID 設(shè)備一行;寫好后,我們要重啟一下 RAID;

[root@linuxsir~] mdadm -Ss

[root@linuxsir~] mdadm –stop –scan
mdadm: stopped /dev/md0

[root@linuxsir~] mdadm -As 

[root@linuxsir~] mdadm  –assemble –scan 

mdadm: /dev/md0 has been started with 2 drives.
注:-S 和 –stop 相同,表示停止 RAID。而 - s 和 –scan 相同,表示掃描 RAID。- A 和 –assemble 表示激活 RAID;這些參數(shù)都比較簡單,查查 man 和 help 就知道了;

激活 RAID 后,我們要通過查看 RAID 的狀態(tài)來判斷 RAID 是否正常和健康……

3 RAID 設(shè)備的使用:RAID 設(shè)備分區(qū)、文件系統(tǒng)初始化,掛載方法;

既然我們已經(jīng)把 RAID 設(shè)備做好了,我們就要使用這個設(shè)備。RAID 做好后,類似一個沒有格式化的新硬盤。如果我們拿到新硬盤時第一步是做什么?對,是分區(qū)和格式化,安裝操作系統(tǒng)。RAID 做好后,沒有文件系統(tǒng),一樣是沒辦法用的,所以我們做好 RAID 后,要來創(chuàng)建文件系統(tǒng);RAID 只不過是把幾個硬盤或分區(qū)綁定在一起成為一個大的虛擬物理存儲設(shè)備。如果我們要對這個大的虛擬設(shè)備進行使用,就要在這個設(shè)備上創(chuàng)建文件系統(tǒng)才行。Linux 目前可用的文件系統(tǒng)有 reiserfs、xfs、ext3,我推薦 reiserfs 和 xfs,感覺這個比較安全點。雖然現(xiàn)在有超強的 zfs,但我認為還是處于小白鼠階段。對于重量級應(yīng)用來說,我們還是觀察一段時間再說。

RAID 做好后,我們要為它進行文件系統(tǒng)初始化,當(dāng)初始化完成后,我們就可以掛載使用了。在一般情況下,我們可以把做好的 RAID 掛載到 /home,我們可以把所有的存儲性文件。

在 Linux 中, 創(chuàng)建文件系統(tǒng)的工具有 mkfs.xfs(創(chuàng)建 xfs 文件系統(tǒng)),mkfs.jfs(創(chuàng)建 JFS 文件系統(tǒng)),mkfs.reiserfs(創(chuàng)建 reiserfs 文件系統(tǒng)),mkfs.ext3(創(chuàng)建 ext3 文件系統(tǒng))……。我們推薦的是 reiserfs 和 xfs,不推薦 ext2 或 ext3,為什么不推薦?因為實踐是檢驗真理的唯一標準,性能不如人、安全性不如人,怎么用?我不是 ext 文件系統(tǒng)的專家,我只用最方便,維護起來比較容易的文件系統(tǒng)。

RAID 也可以分區(qū)來使用,但以我看來,大可不必,凡是能用到 RAID 的,大多是服務(wù)器領(lǐng)域。我們可以把 RAID 做成后,掛載到 /home 目錄上。有關(guān)數(shù)據(jù)存儲的都放在 RAID 上。操作系統(tǒng)并不安裝在 RAID 上,當(dāng)操作系統(tǒng)發(fā)生故障的時候,我們僅僅是修復(fù)或重裝操作系統(tǒng),對數(shù)據(jù)存儲的 RAID 沒有任何影響。就是重裝操作系統(tǒng),我們也能在幾分鐘之內(nèi)恢復(fù) RAID。

如果您想把 RAID 再進進行分區(qū)使用,可以用 fdisk、parted 或 cfdisk 來進行分區(qū)工作,也可以嘗試 LVM 的來對分區(qū)進行管理,LVM 能自動調(diào)整分區(qū)的大小。當(dāng)然,我不會推薦 RAID+LVM,或?qū)?RAID 進行分區(qū)操作。

RAID 做好后,我們就像使用物理硬盤一樣使用它,比如根據(jù)前面的例子,把 /dev/sdb 和 /dev/sdc 兩個硬盤做成 RAID0,其設(shè)備為 /dev/md0,我們就可以對 /dev/md0 進行和物理硬盤一樣的操作。如果我們不分區(qū),只是進行創(chuàng)建文件系統(tǒng),那就比較簡單了。

比如我們在 /dev/md0 上創(chuàng)建 reiserfs 文件系統(tǒng),我們可以用 mkfs.reiserfs 命令來完成。

第一步:查看 /dev/md0 設(shè)備是否存在,以及它的容量;

[root@linuxsir:~]# fdisk -l /dev/md0

Disk /dev/md0: 159.9 GB, 159999852544 bytes
2 heads, 4 sectors/track, 39062464 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md0 doesn t contain a valid partition table
注:我們可以看到 /dev/md0 設(shè)備有 158.0GB 的容量,不包含有效分區(qū)。如果您想要用分區(qū)操作,請用 fdisk /dev/md0、或 cfdisk /dev/md0 或 parted /dev/md0 來操作;

第二步:創(chuàng)建文件系統(tǒng);

在這里我們是計劃用 reiserfs 文件系統(tǒng);

[root@linuxsir:~]# mkfs.reiserfs  /dev/md0 

mkfs.reiserfs 3.6.19 (2003 www.namesys.com)

A pair of credits:
Nikita Danilov  wrote  most of the core  balancing code, plugin infrastructure,
and directory code. He steadily worked long hours, and is the reason so much of
the Reiser4 plugin infrastructure is well abstracted in its details.  The carry 
function, and the use of non-recursive balancing, are his idea.

Oleg Drokin was the debugger for  V3 during most of the time that  V4 was under
development,  and was quite  skilled and fast at it.  He wrote  the large write
optimization of V3.

Guessing about desired format.. Kernel 2.6.21.5-smp is running.
Format 3.6 with standard journal
Count of blocks on the device: 39062464
Number of blocks consumed by mkreiserfs formatting process: 9404
Blocksize: 4096
Hash function used to sort names: r5
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 2b06b743-8a4e-4421-b857-68eb2176bc50
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
        ALL DATA WILL BE LOST ON /dev/md0 !
Continue (y/n):y   注:在這里輸入 y,就進行創(chuàng)建文件系統(tǒng)了;
Initializing journal – 0%….20%….40%….60%….80%….100%
Syncing..ok

Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.

ReiserFS is successfully created on /dev/md0.
這樣文件系統(tǒng) reiserfs 就創(chuàng)建成功了。如果您想創(chuàng)建 xfs 文件系統(tǒng),就用 mkfs.xfs /dev/md0,其它文件系統(tǒng)也類似 ……

第三步:掛載文件系統(tǒng)并使用;

[root@linuxsir:~]# mkdir /mnt/data
[root@linuxsir:~]# mount /dev/md0 /mnt/data 
[root@linuxsir:~]# df -lh /dev/md0

文件系統(tǒng)               容量   已用 可用 已用 % 掛載點
/dev/md0              150G   33M  149G   1% /mnt/RAID0
注:這樣就就 /dev/md0 設(shè)備掛載到 /mnt/RAID0 上了。可以看到設(shè)備大小為 150G。已使用 33M,掛載點為 /mnt/RAID0。我們可以向設(shè)備里存儲文件;

其實根據(jù) Linux 文件系統(tǒng)的結(jié)構(gòu),以及最新 Linux 軟件方便易用的特點。我們完全可以把 /home 獨立出來。把 RAID 設(shè)備掛載到 /home 目錄上。凡是涉及用戶或數(shù)據(jù)存儲的,都可以放在 /home 中,比如數(shù)據(jù)庫,網(wǎng)絡(luò)服務(wù)器有關(guān)數(shù)據(jù)存儲的,都指定到 /home 中的文件夾中。所有的一切都是根據(jù)方便管理為前提。

如果您的 RAID 是在安裝系統(tǒng)后創(chuàng)建的,如果掛載到 Linux 現(xiàn)有目錄下,要先做好相應(yīng)目錄的數(shù)據(jù)遷移到 RAID 設(shè)備中,然后再把 RAID 掛載到 Linux 目錄中。比如你想把 RAID 掛載到 /home 目錄中,可以先創(chuàng)建一個臨時的目錄,把 RAID 掛到這個臨時的目錄上,接著再把 /home 目錄下的文件都移到 RAID 上,然后再把 RAID 卸載,再重新掛載到 /home 中,這樣 /home 的數(shù)據(jù)就完遷移了。

至于如何把操作系統(tǒng)安裝或移到 RAID 上,不同的 Linux 發(fā)行版有不同的方法。Fedora 或 Redhat 在安裝的過程中,就為我們提供了在 RAID1 上安裝系統(tǒng)。其它的發(fā)行版是否支持,不太知道,Slackware 是不支持。如果您想把系統(tǒng)移植到 RAID1 中,可能需要安裝好系統(tǒng)后,再進行移植。感覺軟 RAID1 在一塊硬盤上做,沒太大的必要,如果要做 RAID1, 也要在兩個硬盤上(或兩個屬于不同硬盤的分區(qū)上來做)。

如何開機掛載 RAID 設(shè)備,不同的發(fā)行版也有自己的方法,流程是先激活 RAID,然后才是掛載。

4 軟 RAID 的高級進階及維護;

RAID 做好以后,并不是萬事大吉了,還要進行日常維護;比如某個硬盤(或分區(qū))壞掉,我們可以在不停機的情況下?lián)Q上。或者我們?yōu)?RAID 做一個冗余的硬盤或分區(qū),當(dāng) RAID 發(fā)生故障時,冗余硬盤或分區(qū)自動推上工作,能實現(xiàn)零停機任務(wù)。

4.1 如何向已存在的 RAID 中,添加一塊硬盤或分區(qū);

RAID 有幾種模式,比如創(chuàng)建、管理。下面我們所說的就是 RAID 的管理模式 Manage,也可以說是 RAID 的進階應(yīng)用。管理模式的目的,僅僅是為了把有問題的 RAID 成員換掉,或者為了管理的需要把其中一個 RAID 成員由另一個來替換,也可能是為了安全需要,讓新增加的硬盤或分區(qū)當(dāng)做 RAID 的備用 (spare) 成員;在管理模式中,RAID 的真正成員個數(shù)并不改變。比如我們做 RAID5 是,用的是三個硬盤或分區(qū)。在增加 RAID 成員時,RAID5 仍是三個成員,容量還是保持不變,如果三個 RAID 成員完全正常健康,新增加的成員,僅僅是備用 (spare) 成員。備用成員的用途就是當(dāng) RAID 的真正成員發(fā)生問題時,備用成員會馬上啟動,僅僅是起到安全的冗余的作用;

我們要向一個既已存在 RAID 中,添加或移除一個硬盤或分區(qū),我們要用到 mdadm 工具的 -f 和 -r 以及 -a 參數(shù);

mdadm /dev/mdX -f RAID 成員
mdadm /dev/mdX -r RAID 成員
mdadm /dev/mdX -a RAID 成員
注:

-f 同 –fail 表示把一個設(shè)備列為有問題的設(shè)備,以便用 - r 或 –remove 參數(shù)移除;
-r 同 –remove 表示把 RAID 中的一個成員移出 RAID;
-a 同 –add 表示向一個 RAID 中添加一個成員;
–re-add 重新把最近移除的 RAID 成員重新添加到 RAID 中;

值得一提的是,這些參數(shù)的運用,必須是在 RAID 正常運行的情況下進行。其中 RAID 設(shè)備是 /dev/mdX,X 是一個大于 0 的整數(shù),RAID 成員是一個硬盤或分區(qū)。添加設(shè)備并不會把 RAID 的容量擴大,僅僅是為了添加備用成員,比如在 RAID1、RAID5 和 RAID10 中特加有用。當(dāng)一個 RAID 成員發(fā)生故障的時候,要用這種辦法來讓新成員頂替工作;

舉例:

[root@linuxsir:~]# mdadm /dev/md0 -f /dev/sdb3 
[root@linuxsir:~]# mdadm /dev/md0 -r /dev/sdb3
[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb5
注:當(dāng)我們想把一個 RAID 的成員 /dev/sdb3 移除 RAID 設(shè)備 /dev/md0 時,要首先標注它為有問題的(也可能是完全正常的,為了管理需要)。然后 用 - r 參數(shù)移除,接著用 -a 參數(shù)再添加一個設(shè)備 /dev/sdb5 到 RAID 設(shè)備 /dev/md0 中;

當(dāng)我們用 mdadm -D /dev/md0 查看 RAID 的狀態(tài)時,我們會看到 RAID 的詳細信息。比如是否正常、RAID 成員…… 下面是我們需要掌握的;

Raid Level : 注:陣列級別;比如 Raid5
Array Size : 注:陣列容量大小;
Used Dev Size : 注:RAID 單位成員容量大小,也就是構(gòu)成 RAID 的成員硬盤或分區(qū)的容量的大小;
Raid Devices : 注:RAID 成員的個數(shù);
Total Devices : RAID 中下屬成員的總計個數(shù),因為還有冗余硬盤或分區(qū),也就是 spare,為了 RAID 的正常運珩,隨時可以推上去加入 RAID 的;
State : clean, degraded, recovering 注:狀態(tài),包括三個狀態(tài),clean 表示正常,degraded 表示有問題,recovering 表示正在恢復(fù)或構(gòu)建;
Active Devices : 被激活的 RAID 成員個數(shù);
Working Devices : 注:正常的工作的 RAID 成員個數(shù);
Failed Devices : 出問題的 RAID 成員;
Spare Devices : 備用 RAID 成員個數(shù),當(dāng)一個 RAID 的成員出問題時,用其它硬盤或分區(qū)來頂替時,RAID 要進行構(gòu)建,在沒構(gòu)建完成時,這個成員也會被認為是 spare 設(shè)備;
Rebuild Status : 注:RAID 的構(gòu)建進度,比如 38% complete,表示構(gòu)建到 38%;
UUID : 注:RAID 的 UUID 值,在系統(tǒng)中是唯一的;

Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1 注:表示這個成員是激活的;
1 8 18 1 active sync /dev/sdb2 注:表示這個成員是激活的;
4 8 19 2 spare rebuilding /dev/sdb3 注:未被激活,正在構(gòu)建中的成頁,正在傳輸數(shù)據(jù);

3 8 49 – spare /dev/sdd1

注:spare /dev/sdd1 表示 /dev/sdd1 是 RAID 的備用成員,當(dāng) RAID 的正式成員 /dev/sdb1、/dev/sdb2 或 /dev/sdb3 中有一個出問題的時候,這個備用成員會自動進行工作的。這個并不是必須的,可以用添加 RAID 成員的辦法來添加,也可以在創(chuàng)建的 RAID 的時候添加;

4.2 如何為一個現(xiàn)有 RAID 擴充容量;

在 RAID 的管理模式中,我們提到增加 RAID 成員的辦法,如果 RAID 所有真正成員都是健康的,這個成員就進入備用 (spare) 狀態(tài)。只有當(dāng)真正成員有問題時,這個備用成員才啟用頂替出問題的成員來工作。

但我們能不能向 RAID 添加一個新成員,并且讓他成為 RAID 的真正成員,并且達到為 RAID 擴充容量呢?比如有一個 RAID5,用的是 3 個 20G 的分區(qū)做的,其總?cè)萘渴?3-1)x20=40G,我們能否為這個 RAID5 新增加一個 20G 的分區(qū),并且讓其成為這個 RAID5 真正的成員,并且達到擴充容量的目的,也就是說讓這個 RAID5 有四個真正的成員,其容量為(4-1)x20=60G。

在硬 RAID 中,這個工作比較容易,但在軟 RAID 中,是否能實現(xiàn)呢?答案是肯定的,這種情況僅針對已經(jīng)做好的 RAID,并且已經(jīng)在存儲過程中發(fā)現(xiàn) RAID 容易不足的情況下使用。如果是一個新做的 RAID,我們發(fā)現(xiàn)計劃錯了,我們重新做一次就行了,沒必要用擴容的辦法。

我們?yōu)楝F(xiàn)有的 RAID 擴充容量,利用的就是 RAID 的 Grow 模式,中譯為 RAID 的增長模式;應(yīng)用范圍是 RAID1、RAID4、RAID5、RAID6。

RAID 擴容流程:

向一個已經(jīng)存在的 RAID 中添加一個成員 - 執(zhí)行擴容指令
注:在這里我們要用到 RAID 的管理模式中的添加成員的辦法。也就是用到 mdadm 中的 -a 參數(shù),請參考上一節(jié)的內(nèi)容。這時添加的成員是備用 (spare) 成員,我們要把備用成員“推”到位置上。這時我們要用到 mdadm 的 Grow 模式;

舉例說明:

比如我們做的 RAID5, 由三個硬盤分區(qū) /dev/sdb1、/dev/sdc1、/dev/sdd1 構(gòu)成,這時的 RAID5 真正成員就是 3 個。當(dāng)我們添加一個分區(qū) /dev/sdb2 到這個 RAID5 時,新增加的這個 sdb2 就是這個 RAID5R 的備用 (spare) 成員。比如已有的 RAID5 的設(shè)備是 /dev/md0;

·   首先,查看 RAID 狀態(tài);
[root@linuxsir:~]# mdadm -D /dev/md0 
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Aug  7 01:55:23 2007
     Raid Level : raid5   注:RAID 級別;
     Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID 容量是 39069824
  Used Dev Size : 19534912 (18.63 GiB 20.00 GB) 注:RAID 中每個成員的容量是 19534912 
   Raid Devices : 3 注:RAID 真正成員是 3 個設(shè)備構(gòu)成;
  Total Devices : 3   注:總共設(shè)備是 3 個;
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Aug  7 02:02:33 2007
          State : clean   注:狀態(tài)正常;
Active Devices : 3   注:激活的設(shè)備是 3 個;其實就是 RAID 真正成員正常激活的個數(shù);
Working Devices : 3   注:正常工作的設(shè)備是 3 個;
Failed Devices : 0   注:有問題的設(shè)備是 0 個;
  Spare Devices : 0 注:備用設(shè)備是 0 個;

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d   注:RAID 的 UUID;
         Events : 0.16

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1   注:RAID 真正成員 /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1   注:RAID 真正成員 /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1   注:RAID 真正成員 /dev/sdd1
·   其次,我們?yōu)檫@個 RAID5 添加一個成員;
把 /dev/sdb2 添加到 RAID 設(shè)備 /dev/md0,然后查看 RAID 的狀態(tài)及詳細信息;

[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb2   注:添加分區(qū) /dev/sdb2 到 /dev/md0 中;
mdadm: added /dev/sdb2  

[root@linuxsir:~]# mdadm -D /dev/md0   注:查看 /dev/md0 的詳細信息;
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Aug  7 01:55:23 2007
     Raid Level : raid5   注:RAID 級別;raid5 
     Array Size : 39069824 (37.26 GiB 40.01 GB)   注:RAID 容量是 39069824
  Used Dev Size : 19534912 (18.63 GiB 20.00 GB)   注:RAID 中每個成員的容量是 19534912 
   Raid Devices : 3   注:RAID 真正成員是 3 個設(shè)備構(gòu)成;
  Total Devices : 4   注:總共設(shè)備是 4 個;
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Aug  7 02:14:13 2007
          State : clean   注:狀態(tài)正常;
Active Devices : 3 注:激活的設(shè)備是 3 個;其實就是 RAID 真正成員正常激活的個數(shù);
Working Devices : 4   注:正常工作的設(shè)備是 4 個;
Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d
         Events : 0.18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1   注:RAID 真正成員 /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1   注:RAID 真正成員 /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1   注:RAID 真正成員 /dev/sdd1

       3       8       18        –      spare   /dev/sdb2   注:注:RAID 備用成員 /dev/sdb2
添加 /dev/sdb2 到 /dev/md0 后,我們發(fā)現(xiàn) RAID 的組成設(shè)備總數(shù)由 3 個變成了 4 個,但真正成員個數(shù)并沒有變化,多出了一個備用成員 /dev/sdb2。但 /dev/md0 的容量并沒有變大。所以這時我們要為 RAID 來擴容,解決辦法就是讓 /dev/sdb2 成為 RAID 的真正成員,RAID 的容易由 40G 擴展到 60G;

·   第三,為 RAID 進行擴充容量;
在這里我們要用到 RAID 的 Grow 模式,也就是增長模式。擴充模式,極為簡單,有 –size 參數(shù),- n 參數(shù) –size 是指大定 RAID 的大小,這個可以省略,具體由你所做的 RAID 級別而定。-n 代表 RAID 真正成員的個數(shù)。在這個例子中,RAID5 真正成員是 3 個,后來我們又添加了一個備用成員 /dev/sdb2 進去。我們所做的就是把這個備用成員“推”到真正成員的位置上。也就是說 RAID 的真正成員由 3 個變成 4 個。只是這一簡單的指令,就可以讓 RAID5 容量增加起來。

[root@linuxsir:~] # mdadm -G /dev/md0   -n4 

mdadm: Need to backup 384K of critical section..
mdadm: … critical section passed.
然后我們查看 RAID 的詳細信息;

[root@linuxsir:~] # mdadm -D /dev/md0
/dev/md0:
        Version : 00.91.03
  Creation Time : Tue Aug  7 01:55:23 2007
     Raid Level : raid5
     Array Size : 39069824 (37.26 GiB 40.01 GB)   注:RAID 的容量,我們發(fā)現(xiàn) RAID 的容量并沒有增大,這是因為構(gòu)建沒有完成;等構(gòu)建完成時就會改變過來;
  Used Dev Size : 19534912 (18.63 GiB 20.00 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Aug  7 02:36:06 2007
          State : clean, recovering   注:正常,恢復(fù)中;
Active Devices : 4   注:RAID 的正式成員已經(jīng)變到 4 個;
Working Devices : 4
Failed Devices : 0
  Spare Devices : 0 注:備用成員由 1 個,減少到 0 個;說明已經(jīng)把 RAID 備用成員推到了 RAID 的正式成員中;

         Layout : left-symmetric
     Chunk Size : 64K

Reshape Status :  17% complete   注:RAID 重新構(gòu)建狀態(tài),已經(jīng)完成 17%;目前并未完成構(gòu)建;
  Delta Devices : 1, (3- 4) 注:RAID 的正式成員增加一個,由 3 個到 4 個;

           UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d
         Events : 0.100

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       18        3      active sync   /dev/sdb2 注:/dev/sdb2 已經(jīng)由 spare 改變到 active,也就是說由備用
當(dāng)執(zhí)行完增容后,我們發(fā)現(xiàn) RAID 的容量并沒有增大,這是因為構(gòu)建沒有完成,等 RAID 完成構(gòu)建后,RAID 的容量就會改變?yōu)?19534912x(4-1)=58604736K=60G;構(gòu)建進度也可以 cat /proc/mdstat 來查看。

新增加一個 RAID 正式成員的辦法,不會讓 RAID 原有的數(shù)據(jù)丟失,也不會破壞原有的數(shù)據(jù)。所以這種辦法對 RAID 已經(jīng)存儲大量數(shù)據(jù),當(dāng)容量發(fā)生危機時而不損失原有數(shù)據(jù)的前提下,所采用的一種安全可行的擴容辦法;當(dāng)然擴容后,你要修改 /etc/mdadm.conf;

4.3 RAID 正式成員個數(shù)達不到 RAID 啟動要求時,如何啟動 RAID;

可能存在這樣一種狀況,當(dāng) RAID 的一個正式成員掛掉后,這時 RAID 按以前說的常規(guī)辦法是不能啟動的。這時我們要強制啟動,要用到 –run 參數(shù);比如當(dāng)做 RAID5 時,我們用到了三個硬盤或分區(qū),當(dāng)其中有一個掛掉,按 RAID5 的特點來說,數(shù)據(jù)一樣是安全完整的,但 RAID5 啟動按常規(guī)辦法是必須要達到做 RAID 時所指定的正式成員個數(shù),這時按常規(guī)啟動辦法是不行的,我們要用到 –run 參數(shù);

我們舉個例子。比如 RAID5 正式成員有 3 個 /dev/sdb1,/dev/sdb2,/dev/sdb3,我們只用 /dev/sdb1 和 /dev/sdb2 來啟動 RAID5;

[root@linuxsir:~] # mdadm -A –run /dev/md0  /dev/sdb1 /dev/sdb2

5 軟 RAID 設(shè)備使用方向的探討;

對于軟 RAID 是把幾個同容量的物理磁盤或分區(qū)組成一個大的虛擬設(shè)備來用,我們應(yīng)用方向是什么呢?通過 RAID 的定義,我們可以知道 RAID 是為了解決容量、讀寫效率以及磁盤冗余安全而提出來的。

5.1 僅僅是為了擴充存儲可用空間,是否必需做 RAID;

如果是僅僅解決容量問題,我看大可不必用 RAID。因為 LVM 比 RAID 更為靈活,無論怎么做,都不會帶來容易上的損失。而只有 RAID0 和 LINEAR 級別才不會帶來容量上的損失,RAID1、RAID5 和 RAID10 由于要有安全冗余,所以 RAID 的容量必然減少;

LVM 技術(shù)能把所有空閑硬盤或分區(qū)結(jié)合在一起來使用,并不要求每個分區(qū)或硬盤大小容易是一致的,而 RAID 必須要求每個 RAID 成員容量大小相同,如果不相同,以最小的成員的容易計算,這個損失還不算,還要有安全冗余帶來的容量損失,比如把兩塊 80G 的硬盤做成 RAID1, 這時的 RAID1 是一塊硬盤的容量。LVM 做好后,也相當(dāng)于一個空白的虛擬設(shè)備,可以在上面劃成一個分區(qū)來使用,也可以劃分幾個,如果劃成幾個,我們還可以自動調(diào)整分區(qū)的大小。而 RAID 一但做好,如果再進行分區(qū),分區(qū)的容量是沒辦法自由調(diào)整的;

有的弟兄會問,我是不是做好 RAID,然后在 RAID 上再做 LVM,也就是 RAID+LVM 模式。這種方案實現(xiàn)起來并不困難,但對于軟 RAID 來說,這種方案是否真的價值?我們用 RAID 的目的無非是“容量 + 讀寫效率 + 安全”。我們有必要把做好的 RAID 再分割的四分五裂嗎?我感覺沒必要,因為對于存儲設(shè)備來說,每增強一項管理技術(shù),就意味著風(fēng)險,這種風(fēng)險一是來自于管理員技術(shù)水平,二是來自于設(shè)備老化。另外集中于不分區(qū)的存儲設(shè)備,也能為數(shù)據(jù)遷移和系統(tǒng)管理帶來方便;

5.2 在同一個硬盤做 RAID 是否有必要;

在同一塊硬盤上做 RAID 是否有必要,如果您是想提高數(shù)據(jù)讀寫速度,還是有必要的。RAID0 就能為你帶來這種高速存儲的快感。如果您想在同一塊硬盤上做軟 RAID,想同時兼顧效率和安全,我看大可以免了。因為硬盤一壞掉,什么重要的數(shù)據(jù)都會一鍋爛;

5.3 軟 RAID 的合理使用方向;

目前支持 SATA 主板的機器只能技術(shù)最多四塊硬盤。比如四個 80G 的 SATA 硬盤,IDE 硬盤也同理;我們要根據(jù)自己的使用方向來做 RAID。下面我根據(jù)一個示例來說明 RAID 的合理使用方向;

第一個硬盤分區(qū)情況:

/dev/sda1  20G 大小    
/dev/sda2  20G 大小    
/dev/sda3  20G 大小    
—–/dev/sda5  swap 分區(qū)  - 內(nèi)存兩倍大小
—–/dev/sda6   用于 /tmp  2G 大小;
—–/dev/sda7 
注:我們首先把操作系統(tǒng)安裝到第一個分區(qū) /dev/sda1,交換分區(qū)是 /dev/sda5,/dev/sda6 為臨時 /tmp 的目錄;那 /dev/sda1 和 sda2、sda3、sda7 是用做什么的呢?可以用來安裝系統(tǒng)。我們設(shè)計的是僅安裝系統(tǒng),涉及數(shù)據(jù)保存的,都放到 RAID 上。比如我把 sda1 和 sda2 安裝同樣的系統(tǒng),把由第二三四塊硬盤做好的 RAID 掛在 /home 上,所有應(yīng)用數(shù)據(jù)都存在 RAID 上。當(dāng) sda1 系統(tǒng)被破壞時,我們可以用最短的時間啟用 sda2 的系統(tǒng),并在 sda2 上裝載由第二三四塊硬盤上做的 RAID。

第二三四個硬盤,我們可以用來整塊硬盤來做 RAID,不必為每塊硬盤分區(qū)。比如為了讀寫效率,我們可以做成 RAID0, 為了安全,你可以做 RAID5。如果做 RAID0 設(shè)備的容量是 3x80G=240G,如果做 RAID5,RAID5 設(shè)備的容量是(3-1)x80=160G。有的弟兄可能會說,為什么我不能把磁盤進行分區(qū),然后做 RAID0 呢?RAID10 也就是 RAID0+RAID1 的組合,安全和效率都有。這種方案也是可以的,但您必須做到,當(dāng)有一個硬盤壞掉時,不會影響數(shù)據(jù)的整體安全性。也就是說,當(dāng)一個硬盤壞掉時,另外兩塊硬盤組合起來,仍能組成一份完整的數(shù)據(jù)。當(dāng) RAID 中的一塊硬盤壞掉時,我們能通過更換硬盤,簡單的修復(fù),就能讓 RAID 正常運行起來,而且數(shù)據(jù)是完整的。如果您對數(shù)據(jù)安全極為重視的,在做軟 RAID 的過程中,能做到這點,這個 RAID 方案就屬于你。

所以在做軟 RAID 時,首先要明白自己的目的是什么,然后再來根據(jù)目的判斷自己的所要達到的效果。如果是簡單追求的是讀寫效率,我們就不必考慮數(shù)據(jù)的安全性。如果是數(shù)據(jù)的安全性對我們來說極為重要,我們就要判斷,當(dāng)一塊硬盤壞掉時,是否影響數(shù)據(jù)的完整性!比如,我們用兩塊硬盤來做 RAID5 或 RAID10,可以這樣說,沒有一點安全性的。無論您怎么分區(qū)和組合,也不會為您帶來一點安全感。

6 常見問題及處理;

涉及一些補充和增訂的內(nèi)容,我們在這里一一列出;

6.1 如何清除一個 RAID 成員的超級塊存儲存的 RAID 信息;

RAID 成員在 superblock 中所存儲的 RAID 信息是極為重要的,我們可以根據(jù)這個信息輕松恢復(fù) RAID。

mdadm –zero-superblock RAID 成員;
如果你確認 RAID 成員這個成員對你沒任何用處,你已經(jīng)把這個成員移除 RAID,并且您想把這個設(shè)備另作他用。這時你可以清除其 superblock 的信息。比如;

[root@linuxsir:~] # mdadm –zero-superblock /dev/sdd3
這個示例就是清除 /dev/sdd3 中的超級塊中所存儲的 RAID 信息;

7 關(guān)于本文;

其實軟 RAID 使用起來比較簡單,難點在于后期的管理和維護。軟 RAID 的使用教程,其實用幾個命令足以能說的清楚。但一想到初學(xué) Linux 的弟兄也可能象我當(dāng)初學(xué)習(xí) Linux 一樣,總想找一個 Step By Step 的教程看著實現(xiàn)自己想要做的東西,基于這個大多數(shù)初學(xué)者的想法,我就寫了這么一個看起來相對復(fù)雜的文章。

這篇文章看起來條理不夠清晰,另外 mdadm 的模式也沒有給大家說,而是把模式分拆開來放在具體的應(yīng)用中。

我僅僅是用自己從新手理解的角度來寫這篇文章,文中大量存在不規(guī)范的用語,這也是在情理之中的。最主要的是有些專業(yè)束語我不知道如何翻譯才好。

以上是“l(fā)inux 軟 raid 如何實現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

向 AI 問一下細節(jié)

丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-07發(fā)表,共計23858字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 广河县| 黔江区| 吉安市| 福泉市| 阿合奇县| 丽江市| 青河县| 习水县| 枞阳县| 客服| 武宁县| 五寨县| 鹿邑县| 唐河县| 吉水县| 靖西县| 逊克县| 井研县| 泰兴市| 玛纳斯县| 青海省| 公主岭市| 遂宁市| 柳江县| 荣成市| 锦州市| 襄城县| 新乡市| 雷山县| 外汇| 衢州市| 枞阳县| 上高县| 纳雍县| 华池县| 大方县| 巴林左旗| 台湾省| 防城港市| 平山县| 富平县|