磁盤管理

磁盤管理

磁盤(Disk)在計算機硬件中扮演的是持久存儲數據的角色。

## 一、 硬盤的分類
### 1. 按接口分類:

接口 | 描述 | 理論讀取數據速率 | IOPS | 適用場景
—— | —— | ———————— | ——– | ———–
IDE(ata) | 并口 | 133MB/s | 100 | 家用級
SCSI | 并口 | Ultrascsi320: 320MB/s;Ultrascsi640: 640MB/s | 150-200 | 企業級
SATA | 串口 | SATA3: 6Gbps(1024*6/8=768MB/s) | 100 | 家用級
SAS | 串口 | 6Gbps(1024*6/8=768MB/s | 150-200 | 企業級
USB | 串口 | 3.0: 480MB/s |? |家用級

### 2. 按運轉原理分類

存儲機制 | 運行原理
———— | ————
機械硬盤 | 由馬達驅動,使得鋼化玻璃盤片旋轉
固態硬盤 | 并行開啟多個FLASH通道進行存取操作

## 二、機械硬盤組成及運作原理

(1) 磁道(track)
盤片上存在同軸的多條同心圓磁道,每條磁道周長不一樣。
這樣給磁道間帶來一些區別:
a. 每條磁道上存儲數據的多少不等
b. 單位時間內各磁道上走過的路徑長度不等,讀取速度不同

數據讀取步驟
a. 等待磁頭臂移動到需要讀取數據的磁道上
b. 等待磁盤旋轉到指定數據讀取位置
c. 讀取數據

硬盤轉速:轉速越快,步驟b時間越短
5400, 7200, 10000, 15000,單位是rpm/min,意思是轉/分鐘

平均尋道時間:我們把(步驟a + 步驟b)叫做平均尋道時間,是衡量機械硬盤速度的重要指標之一。

(2) 扇區(sector)
在每個磁道上按照固定大?。?12bytes)切分,每個部分叫一個扇區。

(3) 柱面(cyllnder)
不同盤面上的同一個編號的磁道共同構成一個圓柱體,叫做一個柱面

為了方便讀取,在磁盤分區時,是按照柱面進行劃分的。

 

設備文件:FHS
/dev
設備文件:關聯至設備的驅動程序,設備的訪問入口

設備號:
major:主設備號,區分設備類型,用于標明設備所需要的驅動程序
minor:次設備號,區分同種類型下的不同設備;是特定設備的訪問入口

mknod命令: 創建字符設備或者塊設備
語法:mknod [OPTIONS]… NAME TYPE [MAJOR MINOR]
-m MODE: 創建后的設定文件的訪問權限

磁盤的設備名稱:

接口類型 | 名稱
———— | ——
IDE | /dev/hd[a-z]
SCSI, SATA, USB, SAS | /dev/sd[a-z]

> 注意:CentOS6、7統統將硬盤設備文件標識為/dev/sd[a-z]#

引用設備的方式
(1) 設備文件名
(2) 卷標
(3) UUID

磁盤分區:
1. MBR(master boot record)
其中,MBR:使用第0號扇區,也就是sector 0,大小為512字節,分為三個部分
(1) 前446字節:bootloader,程序,引導啟動操作系統的程序
(2) 中間64字節:partition allocation table,分區表,每16字節標識一個分區,最多只能有四個分區
(3) 最后2字節:用來聲明當前MBR區域是否有效,MBR區域的有效性標識;55AA為有效,否則無效

2. GPT(GUID Partition Table)
GPT全名Globally Unique Identifier Partition Table Format(GUID分區表),是源于EFI(可擴展固件接口) 使用的磁盤分區架構?,F在用最直白的語言說明之——?? 二者比較:MBR磁盤最多允許存在4個主分區,并且支持磁盤最大容量為2TB;而GPT磁盤最多可允許存在128個主分區(在Windows系統中),支持磁盤的最大容量為18EB(1EB=1024PB=1024*1024TB)。每個GPT磁盤都存在Protective MBR,用來防止不能識別GPT分區的磁盤管理工具的破壞。對于Windows系統來說,“GPT分區方案”中的幾個分區:MSR分區、ESP分區。前面提到的Protective MBR,在Windows系統中即為MSR分區,是必須存在的一個分區;ESP分區(非必須存在),是采用UEFI BIOS電腦的系統中,存放啟動文件的分區(當然,還有其他文件)。??? GPT “優缺點”并存。優點:支持更大的硬盤、更多的分區、單個分區大小更大、每個分區存在GUID、分區表自帶備份。當然,GUID分區表也存在著不足,那就是目前仍有一部分操作系統不支持讀寫GPT磁盤(比如32位windows xp),不能從GPT磁盤啟動(目前只有基于EFI的系統支持從GPT磁盤啟動),但從長遠發展來看,EFI的電腦將會普及,GPT分區將會成為主流。

傳統BIOS與新型EFI/UEFI BIOS的基本認識:

傳統BIOS的全稱是Basic Input Output System,譯為“基本輸入輸出系統”,是電腦主板ROM芯片上的一段代碼。按下電源后,計算機會進行加電自檢(檢測硬件是否正常)、初始化硬件(使硬件按照PC的架構工作)、啟動OS Loader加載操作系統(由BIOS讀取MBR上的Loader)、向系統及軟件提供服務、硬件中斷處理(硬件出現錯誤指令->中斷一下->由BIOS提供正確執行結果)。?? 有必要澄清一下BIOS和CMOS的概念,上文說到BIOS是一段“代碼”,當屬軟件范疇;而CMOS(Complementary Metal Oxide Semiconductor)譯為“互補金屬氧化物半導體”,是主板上的一塊RAM芯片,當屬硬件范疇。CMOS中存放系統參數,通常有“BIOS設置、CMOS設置”等不確切的說法,準確的說法應是:通過BIOS設置程序對CMOS參數進行設置。?? 新一代的電腦主板采用UEFI BIOS,EFI(Extensible Firmware Interfaces,譯為可擴展固件接口)的概念最早由Intel提出,UEFI是EFI的升級版。EFI/UEFI BIOS與傳統BIOS不同之處在于,可以用鼠標操作,具有多國語言版,開機自檢后還會加載硬件在EFI中的驅動程序,不用操作系統負責驅動的加載工作,可視之為“微型系統”。?? 總結:新一代的BIOS取代傳統BIOS是有依據的,堅信:新事物必將取代舊事物。但就目前來說仍是“傳統BIOS”的天下。

## 三、RAID磁盤冗余
RAID(Redundant Arrays of Inexpensive Disks),廉價冗余磁盤陣列。后由于其費用增加,英文全稱改為Redundant Arrays of Independent Disks,獨立冗余磁盤陣列。其基本思想就是把多個相對便宜的硬盤組合起來,成為一個硬盤陣列組,使性能達到甚至超過一個價格昂貴、容量巨大的硬盤。
RAID控制器接到服務器傳送來的存儲請求后,將數據按照設定好的大小分塊(chunk),這個數據塊和數據存儲在文件系統中的塊(block)不一樣,這個chunk塊,是為了將數據分散存儲到不同的磁盤中而劃分的。
### 1. RAID能夠解決的問題以及提供的解決方案

需要解決的問題 | 解決方案
——————— | ———–
磁盤損壞造成的數據丟失問題 | 磁盤冗余
單塊磁盤數據存取速度慢(硬件I/O速率低下)的問題 | 磁盤并行讀寫,增加緩存,提供設備獨自的UPS供電

### 2. RAID的分類及其特性
#### (1) 按實現方式劃分

分類 | 描述
—— | ——
外接式磁盤陣列 | 主板通過PCI或PCI-E的擴展接口連接RAID Adapter(適配器),來實現外掛磁盤陣列的方式
內接式磁盤陣列 | 主板上集成RAID Controller(控制器),自我實現磁盤冗余功能
軟件模擬磁盤陣列 | 硬件上并沒有RAID Controller,是通過軟件方式模擬出來,來實現冗余磁盤陣列的功能的實現方式
#### (2) 按級別劃分
多塊磁盤組織在一起的工作方式有很多種,它們各有特點,具體詳見:
**JBOD**

![JBOD.png](http://upload-images.jianshu.io/upload_images/7430414-6c0bf7afda64d4ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

JBOD(Just a Bunch Of Disks),只是一組磁盤合在一起看作一個磁盤。當第一塊磁盤寫滿后就繼續用第二塊,第二塊寫滿后用第三塊,依此類推。

**RAID0**

![RAID0.png](http://upload-images.jianshu.io/upload_images/7430414-d07c86ff343b0b42.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

將多個磁盤合并成一個大的磁盤,不具有冗余,并行I/O,速度最快。RAID 0亦稱為帶區集。它是將多個磁盤并列起來,成為一個大磁盤。在存放數據時,其將數據按磁盤的個數來進行分段,然后同時將這些數據寫進這些盤中,所以在所有的級別中,RAID 0的速度是最快的。但是RAID 0沒有冗余功能,如果一個磁盤(物理)損壞,則所有的數據都會丟失,危險程度與JBOD相當。
理論上越多的磁盤性能就等于“單一磁盤性能”ד磁盤數”,但實際上受限于總線I/O瓶頸及其它因素的影響,RAID性能會隨邊際遞減,也就是說,假設一個磁盤的性能是50MB每秒,兩個磁盤的RAID 0性能約96MB每秒,三個磁盤的RAID 0也許是130MB每秒而不是150MB每秒,所以兩個磁盤的RAID 0最能明顯感受到性能的提升。
Size = 2 x min(S1,S2,…)
但如果是以軟件方式來實現RAID,則磁盤的空間則不見得受限于此(例如Linux Software RAID),通過軟件實現可以經由不同的組合而善用所有的磁盤空間。
Size = sum of all disk
**RAID1**

![RAID1.png](http://upload-images.jianshu.io/upload_images/7430414-a0986128b056b63b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

兩組以上的N個磁盤相互作鏡像,在一些多線程操作系統中能有很好的讀取速度,理論上讀取速度等于硬盤數量的倍數,另外寫入速度有微小的降低。只要一個磁盤正常即可維持運作,可靠性最高。RAID 1就是鏡像,其原理為在主硬盤上存放數據的同時也在鏡像硬盤上寫一樣的數據。當主硬盤(物理)損壞時,鏡像硬盤則代替主硬盤的工作。因為有鏡像硬盤做數據備份,所以RAID 1的數據安全性在所有的RAID級別上來說是最好的。但無論用多少磁盤做RAID 1,僅算一個磁盤的容量,是所有RAID中磁盤利用率最低的一個級別。

如果用兩個不同大小的磁盤建RAID 1,可用空間為較小的那個磁盤,較大的磁盤多出來的空間也可以分區成一個區來使用,不會造成浪費。
Size = min(S1,S2,S3…)
**RAID4**
![RAID4.png](http://upload-images.jianshu.io/upload_images/7430414-68944c8f5dfc359b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
至少需要三塊磁盤來組建RAID4陣列,我們假設一共N塊磁盤,前N-1塊磁盤存儲業務數據,最后第N塊磁盤存儲校驗數據(異或運算),這樣一來,陣列中任何一塊磁盤損壞,都可以通過異或運算再計算出缺失的磁盤上的數據,通過這種方式來保護數據,防止數據丟失。
但這種方式有一個很嚴重的弊端:所有的校驗位都存儲在同一塊磁盤上,這樣一來,如果存儲業務數據的盤壞了一塊,業務仍然可以繼續,但是業務數據每次都需要異或運算之后計算出來再提供出去,會極大的消耗資源,而且校驗位都在同一塊磁盤上,也會造成這塊磁盤的讀寫操作會比其他存放業務數據的盤多,會提高校驗盤的損壞概率。
Size = (N-1) x min(S1,S2,…,SN)

**RAID5**

![RAID5.png](http://upload-images.jianshu.io/upload_images/7430414-669cc279a0dcebff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

RAID Level 5是一種儲存性能、數據安全和存儲成本兼顧的存儲解決方案。它使用的是Disk Striping(硬盤分區)技術。RAID 5至少需要三顆硬盤,RAID 5不是對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成RAID5的各個磁盤上,并且奇偶校驗信息和相對應的數據分別存儲于不同的磁盤上。當RAID5的一個磁盤數據發生損壞后,可以利用剩下的數據和相應的奇偶校驗信息去恢復被損壞的數據。RAID 5可以理解為是RAID 0和RAID 1的折衷方案。RAID 5可以為系統提供數據安全保障,但保障程度要比鏡像低而磁盤空間利用率要比鏡像高。RAID 5具有和RAID 0相近似的數據讀取速度,只是因為多了一個奇偶校驗信息,寫入數據的速度相對單獨寫入一塊硬盤的速度略慢,若使用“回寫高速緩存”可以讓性能改善不少。同時由于多個數據對應一個奇偶校驗信息,RAID 5的磁盤空間利用率要比RAID 1高,存儲成本相對較便宜。
Size = (N-1) x min(S1,S2,…,SN)
**RAID6**
![RAID6.png](http://upload-images.jianshu.io/upload_images/7430414-ac29517409f54f08.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
類似于RAID5,只是相比RAID5的一個校驗位,又多了一個校驗位,也就是說RAID組中如果一共有N塊磁盤,N-2塊存放業務數據,剩下2塊存放校驗數據,允許同時損壞兩塊磁盤。

 

**RAID 10 / RAID 01**

 

RAID 10是先鏡像再分區數據,先將所有硬盤分為兩組,視為是RAID 0的最低組合,然后將這兩組各自視為RAID 1運作。也就是先做RAID1,然后做RAID0。

![RAID10.png](http://upload-images.jianshu.io/upload_images/7430414-71e4e0f5770b4eb9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
RAID 01則是跟RAID 10的程序相反,是先分區再將數據鏡射到兩組硬盤。它將所有的硬盤分為兩組,變成RAID 1的最低組合,而將兩組硬盤各自視為RAID 0運作。也就是先做RAID0,然后做RAID1。
![RAID01.png](http://upload-images.jianshu.io/upload_images/7430414-c0f772799c7ed969.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
當RAID 10有一個硬盤受損,其余硬盤會繼續運作。RAID 01只要有一個硬盤受損,同組RAID 0的所有硬盤都會停止運作,只剩下其他組的硬盤運作,可靠性較低。如果以六個硬盤建RAID 01,鏡射再用三個建RAID 0,那么壞一個硬盤便會有三個硬盤脫機。因此,RAID 10遠較RAID 01常用,零售主板絕大部份支持RAID 0/1/5/10,但不支持RAID 01。

最后說說為什么RAID10比RAID 01好且靠譜:

RAID0+1是先做兩個RAID0,然后再做RAID1,因此RAID0+1允許壞多個盤,但只能在壞在同一個RAID0中,不允許兩個RAID0都有壞盤。
RAID1+0是先做RAID1,然后再做RAID0,因此RAID1+0允許壞多個盤,只要不是一對磁盤壞就可以啦。
因此說RAID1+0比RAID0+1安全得多,因為在同一對磁盤中,兩塊磁盤都壞掉的概率很低。
RAID 0和RAID 1分別用于增強存儲性能(RAID 0 條帶)和數據安全性(RAID 1 鏡像),而RAID 0+1和RAID 10兼顧了RAID 0和RAID 1的優點,它在提供RAID 1一樣的數據安全保證的同時,也提供了與RAID 0近似的存儲性能。雖然RAID 0+1和RAID 10基本原理相近,都是RAID0和RAID1的結合,不過還是有些區別。

在MySQL數據庫中,通常我們選用RAID 10。

**總結**

RAID級別 | 可用空間 | 允許壞盤個數 | 磁盤數限制 | 讀寫性能
————- | ———— | ———— | ————– | ————–
JBOD | Size = S1+S2+…+SN | 0 | 2+ | 讀寫性能均沒有變化
RAID0 | Size = 2 x min(S1,S2,…) | 0 | 2+ | 讀、寫性能均有提升
RAID1 | Size = min(S1,S2,S3…) | N-1 | 2+ | 讀性能有提升,寫性能略有下降
RAID4 | Size = (N-1) x min(S1,S2,…,SN) | 1 | 3+ | 讀、寫性能均有提升
RAID5 | Size = (N-1) x min(S1,S2,…,SN) | 1 | 3+ | 讀、寫性能均有提升
RAID6 | Size = (N-2) x min(S1,S2,…,SN) | 2 | 4+ | 讀、寫性能均有提升
RAID1+0 | Size = N x min(S1,S2,…,SN)/2 | 每個RAID1剩一塊健康盤即可 | 4+ | 讀、寫性能均有提升
RAID0+1 | Size = N x min(S1,S2,…,SN)/2 | RAID1有一個健康的RAID0組即可 | 4+ | 讀、寫性能均有提升

### 3. 軟RAID的實現
#### (1) 軟RAID在CentOS 6 系統上的實現
CentOS 6 上是結合內核中的md(multi devices)實現的
管理工具:
mdadm(一款模式化的工具,有很多種模式)
語法: mdadm [mode] <raiddevice> [OPTIONS] <component-devices>

支持的RAID級別:LINEAR(相當于JBOD)、RAID0(有時寫成Striping)、RAID1(有時寫成Monitoring)、RAID4、RAID5、RAID6、RAID10;

查看MD狀態:
方法一:
~]# cat /proc/mdstat
Personalities :
unused devices: <none>
方法二:
~]# ls /dev | grep “md”

mdadm命令:
語法:mdadm [mode] <raiddevice> [options] <component-devices>

mdadm的模式分類

模式 | 選項
—— | ——
創建模式(Create)| -C
裝配模式(assemble)|-A
監控模式(follower)|-F
管理模式|-f, -r, -a

**創建模式下的選項**

選項 | 含義
—— | ——
-n # | 使用#個塊設備來創建此RAID
-l # | 指名要創建的RAID級別
-a {yes\|no} | 是否自動創建目標RAID的設備文件
-c CHUNK_SIZE | 指明chunk塊大小
-x # | 指明空閑盤的個數
-D | 查看RAID設備的詳細信息

**管理模式下的選項**

選項 | 含義
—— | ——
-f | 手動設定磁盤狀態為錯誤
-a | 添加磁盤
-r | 從RAID中移除指定磁盤

**查看md的狀態**
~]# cat /proc/mdstat

**停止md設備**
~]# mdadm -S /dev/md#

示例:創建一個10G可用空間的RAID5,并測試將一塊磁盤設置為壞盤后的運行狀態和結果;
“`
~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

 

Command (m for help): n
Partition type:
p?? primary (2 primary, 0 extended, 2 free)
e?? extended
Select (default p): e
Partition number (3,4, default 3):
First sector (23070720-209715199, default 23070720):
Using default value 23070720
Last sector, +sectors or +size{K,M,G} (23070720-209715199, default 209715199):
Using default value 209715199
Partition 3 of type Extended and of size 89 GiB is set

Command (m for help): n
Partition type:
p?? primary (2 primary, 1 extended, 1 free)
l?? logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (23072768-209715199, default 23072768):
Using default value 23072768
Last sector, +sectors or +size{K,M,G} (23072768-209715199, default 209715199): +5G
Partition 5 of type Linux and of size 5 GiB is set

Command (m for help): n
Partition type:
p?? primary (2 primary, 1 extended, 1 free)
l?? logical (numbered from 5)
Select (default p): l
Adding logical partition 6
First sector (33560576-209715199, default 33560576):
Using default value 33560576
Last sector, +sectors or +size{K,M,G} (33560576-209715199, default 209715199): +5G
Partition 6 of type Linux and of size 5 GiB is set

Command (m for help): n
Partition type:
p?? primary (2 primary, 1 extended, 1 free)
l?? logical (numbered from 5)
Select (default p): l
Adding logical partition 7
First sector (44048384-209715199, default 44048384):
Using default value 44048384
Last sector, +sectors or +size{K,M,G} (44048384-209715199, default 209715199): +5G
Partition 7 of type Linux and of size 5 GiB is set

Command (m for help): n
Partition type:
p?? primary (2 primary, 1 extended, 1 free)
l?? logical (numbered from 5)
Select (default p): l
Adding logical partition 8
First sector (54536192-209715199, default 54536192):
Using default value 54536192
Last sector, +sectors or +size{K,M,G} (54536192-209715199, default 209715199): +5G
Partition 8 of type Linux and of size 5 GiB is set

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x277399ec

Device Boot????? Start???????? End????? Blocks?? Id? System
/dev/sdb1??????????? 2048??? 20973567??? 10485760?? 83? Linux
/dev/sdb2??????? 20973568??? 23070719???? 1048576?? 82? Linux swap / Solaris
/dev/sdb3??????? 23070720?? 209715199??? 93322240??? 5? Extended
/dev/sdb5??????? 23072768??? 33558527???? 5242880?? 83? Linux
/dev/sdb6??????? 33560576??? 44046335???? 5242880?? 83? Linux
/dev/sdb7??????? 44048384??? 54534143???? 5242880?? 83? Linux
/dev/sdb8??????? 54536192??? 65021951???? 5242880?? 83? Linux

Command (m for help): t
Partition number (1-3,5-8, default 8): 5
Hex code (type L to list all codes): fd
Changed type of partition ‘Linux’ to ‘Linux raid autodetect’

Command (m for help): t
Partition number (1-3,5-8, default 8): 6
Hex code (type L to list all codes): fd
Changed type of partition ‘Linux’ to ‘Linux raid autodetect’

Command (m for help): t
Partition number (1-3,5-8, default 8): 7
Hex code (type L to list all codes): fd
Changed type of partition ‘Linux’ to ‘Linux raid autodetect’

Command (m for help): t
Partition number (1-3,5-8, default 8):
Hex code (type L to list all codes): fd
Changed type of partition ‘Linux’ to ‘Linux raid autodetect’

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x277399ec

Device Boot????? Start???????? End????? Blocks?? Id? System
/dev/sdb1??????????? 2048??? 20973567??? 10485760?? 83? Linux
/dev/sdb2??????? 20973568??? 23070719???? 1048576?? 82? Linux swap / Solaris
/dev/sdb3??????? 23070720?? 209715199??? 93322240??? 5? Extended
/dev/sdb5??????? 23072768??? 33558527???? 5242880?? fd? Linux raid autodetect
/dev/sdb6??????? 33560576??? 44046335???? 5242880?? fd? Linux raid autodetect
/dev/sdb7??????? 44048384??? 54534143???? 5242880?? fd? Linux raid autodetect
/dev/sdb8??????? 54536192??? 65021951???? 5242880?? fd? Linux raid autodetect

# 此處需要將磁盤調整成Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

~]# kpartx -af /dev/sdb

查看MD狀態:
~]# cat /proc/mdstat
Personalities :
unused devices: <none>

~]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{5,6,7,8}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[4] sdb8[3](S) sdb6[1] sdb5[0]
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[=============>…….]? recovery = 68.7% (3601792/5238784) finish=0.1min speed=200099K/sec

unused devices: <none>

~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[4] sdb8[3](S) sdb6[1] sdb5[0]
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

~]# mke2fs -t ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
655360 inodes, 2619392 blocks
130969 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

~]# mount /dev/md0 /mydata

~]# df -lh
Filesystem????? Size? Used Avail Use% Mounted on
/dev/sda2??????? 50G? 4.7G?? 46G? 10% /
devtmpfs??????? 3.8G???? 0? 3.8G?? 0% /dev
tmpfs?????????? 3.9G?? 84K? 3.9G?? 1% /dev/shm
tmpfs?????????? 3.9G? 9.0M? 3.9G?? 1% /run
tmpfs?????????? 3.9G???? 0? 3.9G?? 0% /sys/fs/cgroup
/dev/md0??????? 9.8G?? 37M? 9.2G?? 1% /mydata
/dev/sda1?????? 297M? 152M? 146M? 51% /boot
tmpfs?????????? 781M???? 0? 781M?? 0% /run/user/0
tmpfs?????????? 781M?? 12K? 781M?? 1% /run/user/42

如果想實現自動掛載,建議使用UUID進行識別磁盤設備,因為/dev/md0這個設備名有可能下次會改變。

~]# blkid /dev/md0
/dev/md0: UUID=”7be0a3cd-7766-4d19-9120-7e514d004a67″ TYPE=”ext4″
~]# vim /etc/fstab
添加如下行:
UUID=7be0a3cd-7766-4d19-9120-7e514d004a67 /mydata???????????????? ext4??? defaults??????? 0 0

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Sun Oct? 8 01:10:03 2017
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0? (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 24

Number?? Major?? Minor?? RaidDevice State
0?????? 8?????? 21??????? 0????? active sync?? /dev/sdb5
1?????? 8?????? 22??????? 1????? active sync?? /dev/sdb6
4?????? 8?????? 23??????? 2????? active sync?? /dev/sdb7

3?????? 8?????? 24??????? –????? spare?? /dev/sdb8

手工設置/dev/sdb7為壞盤
~]# mdadm /dev/md0 -f /dev/sdb7
mdadm: set /dev/sdb7 faulty in /dev/md0

 

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Mon Oct? 9 14:48:58 2017
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0? (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 43

Number?? Major?? Minor?? RaidDevice State
0?????? 8?????? 21??????? 0????? active sync?? /dev/sdb5
1?????? 8?????? 22??????? 1????? active sync?? /dev/sdb6
3?????? 8?????? 24??????? 2????? active sync?? /dev/sdb8

4?????? 8?????? 23??????? –????? faulty?? /dev/sdb7

手工設置/dev/sdb8為壞盤
~]# mdadm /dev/md0 -f /dev/sdb8
mdadm: set /dev/sdb8 faulty in /dev/md0

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Mon Oct? 9 14:52:34 2017
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 2
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0? (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 45

Number?? Major?? Minor?? RaidDevice State
0?????? 8?????? 21??????? 0????? active sync?? /dev/sdb5
1?????? 8?????? 22??????? 1????? active sync?? /dev/sdb6
–?????? 0??????? 0??????? 2????? removed

3?????? 8?????? 24??????? –????? faulty?? /dev/sdb8
4?????? 8?????? 23??????? –????? faulty?? /dev/sdb7
此時RAID5仍然處于工作狀態,只是在降級運行

將壞盤移除
~]# mdadm /dev/md0 -r /dev/sdb7
mdadm: hot removed /dev/sdb7 from /dev/md0
~]# mdadm /dev/md0 -r /dev/sdb8
mdadm: hot removed /dev/sdb8 from /dev/md0

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 2
Persistence : Superblock is persistent

Update Time : Mon Oct? 9 14:57:04 2017
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0? (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 47

Number?? Major?? Minor?? RaidDevice State
0?????? 8?????? 21??????? 0????? active sync?? /dev/sdb5
1?????? 8?????? 22??????? 1????? active sync?? /dev/sdb6
–?????? 0??????? 0??????? 2????? removed

再將兩塊標記的壞盤加回來
~]# mdadm /dev/md0 -a /dev/sdb7
mdadm: added /dev/sdb7

~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb7[3] sdb6[1] sdb5[0]
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[===>……………..]? recovery = 19.1% (1004672/5238784) finish=0.3min speed=200934K/sec

unused devices: <none>

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent

Update Time : Mon Oct? 9 14:58:21 2017
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Rebuild Status : 52% complete

Name : sapbcs.mageedu.com:0? (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 57

Number?? Major?? Minor?? RaidDevice State
0?????? 8?????? 21??????? 0????? active sync?? /dev/sdb5
1?????? 8?????? 22??????? 1????? active sync?? /dev/sdb6
3?????? 8?????? 23??????? 2????? spare rebuilding?? /dev/sdb7

~]# mdadm /dev/md0 -a /dev/sdb8
mdadm: added /dev/sdb8

~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Sep 29 16:42:09 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Mon Oct? 9 14:59:15 2017
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Name : sapbcs.mageedu.com:0? (local to host sapbcs.mageedu.com)
UUID : 88e887e8:8a782316:380d87b9:c476ca72
Events : 67

Number?? Major?? Minor?? RaidDevice State
0?????? 8?????? 21??????? 0????? active sync?? /dev/sdb5
1?????? 8?????? 22??????? 1????? active sync?? /dev/sdb6
3?????? 8?????? 23??????? 2????? active sync?? /dev/sdb7

4?????? 8?????? 24??????? –????? spare?? /dev/sdb8

“`

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88075

(0)
N27_sapbcsN27_sapbcs
上一篇 2017-10-27
下一篇 2017-10-27

相關推薦

  • N25第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。     其常用的有: touch、stat、rm、cp、mv、install touch 命令    命令格式: touch [OPTION]… File… 命令參數: -a&n…

    Linux干貨 2016-12-12
  • 使用haproxy代理LAMP、LNMP 實現WordPress發布

    haproxy簡介 HAProxy是專業的反向代理軟件,它可以支持4層和7層代理服務。其配置包含一下幾個配置段: global:全局設置,通常與操作系統有關 defaults:配置默認參數,可以被frontend、backend、listen組件利用 frontend:接收親請求的前虛擬節點 backend:后端服務集群的配置,一個backend可以對應多個…

    2017-05-17
  • 作業–文本處理工具

    1、找出ifconfig命令結果中本機的所有IPv4地址。 [root@liang ~]# ifconfig        #centos6下 eth0      Link encap:Et…

    Linux干貨 2016-08-10
  • Linux Basics

    計算機的組成及其功能:             CPU:運算器、控制器、寄存器、緩存             存儲器:內存,RAM(Random Access Memory)   …

    Linux干貨 2016-09-17
  • 用戶和組管理 第三周

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d' ' -f1 | sort -u who:查看當前已經登陸的所有用戶的詳細信息 cut -d ' ' -f1:以空格為界顯示每行第一列 sort -u :在輸出行中去除重復行。 2、取出最后登錄到當前系…

    Linux干貨 2017-02-13
  • 磁盤分區、軟RAID創建及shell腳本參數傳遞,for循環,運算表達式應用 1、創建一個10G分區,并格式為ext4文件系統。 先使用fdisk工具創建一個10G的新分區。使用fdisk打開要創建磁盤分區的物理設備fdisk /dev/sdb,然后使用n指令創建新的分區,分區類型選此處選擇為主分區,第一個柱面使用默認的1,最后的柱面,使用+10G這種表示方…

    Linux干貨 2016-12-26
欧美性久久久久