RAID全稱是 “A Case for Redundant Arrays of Inexpensive Disks (RAID)”,稱為“廉價磁盤冗余陣列”,由加州大學伯克利大學在1987年發表的論文中而來。RAID的主要思想就是把若干小容量物理磁盤組成一個大容量虛擬存儲設備,以提高磁盤存儲的讀、寫效率,並提供冗余以提高數據存儲的安全性。
根據應用方向的不同,RAID也分為不同級別,常用的有RAID-0、RAID-1、RAID-5、RAID-10。
RAID-0也稱為條帶模式(striping),即把連續的數據分散到多個磁盤上存取,最少需要磁盤數大於等於2。當系統有數據請求就可以被多個磁盤並行的執行,每個磁盤執行屬於它自己的那部分數據請求。這種數據上的並行操作可以充分利用總線的帶寬,顯著提高磁盤整體存取性能。因為讀取和寫入是在設備上並行完成的,讀取和寫入性能將會增加,這也通常是使用RAID-0的主要原因。但RAID-0沒有數據冗余,如果驅動器出現故障,那麼將無法恢復任何數據,所以一般主要用在對設備讀取要求高,但對數據安全性不做要求的業務中。
RAID-1又稱為鏡像(Mirroring),RAID-1要求至少有2的整數倍塊硬盤,並使用0塊或更多的備用磁盤。每次寫數據時會同時寫入鏡像盤。這種陣列可靠性很高,但其有效容量減小到總容量的一半,同時這些磁盤的大小應該相等,否則總容量只具有最小磁盤的大小。這種方法完整備份了數據,對數據的寫入速度稍有降低,而且磁盤的利用率只有二分之一。但其優點是對數據的容錯很好,對數據的讀取有較大的提高。
RAID-5具有和RAID-0相近似的數據讀取速度,同時磁盤空間利用率也要比RAID1高。屬於是RAID-0和RAID-1的折中方案,是一種存儲性能、數據安全和存儲成本兼顧的存儲解決方案。由於存儲成本相對較低,是目前運用較多的一種解決方案。
RAID-5陣列中數據的分布與RAID-0類似,數據也是分布到每塊硬盤上,但Raid-5沒有獨立的奇偶校驗盤,他通過將校驗的數據循環存儲並分散放在所有磁盤上,其中任意N-1塊磁盤上都存儲完整的數據,也就是說有相當於一塊磁盤容量的空間用於存儲奇偶校驗信息。因此當RAID5能夠支持在一塊盤離線的情況下保證數據的正常訪問,不會影響數據的完整性,從而保證了數據安全。當損壞的磁盤被替換後,RAID還會自動利用剩下奇偶校驗信息去重建此磁盤上的數據,來保持RAID5的高可靠性。
RAID-5的組建,至少需要三塊或更多的磁盤,並可以使用0塊或更多的備用磁盤,其數據安全保障程度要比RAID1低,寫入數據的速度比對單個磁盤進行寫入速度稍慢。如果有兩塊或兩塊以上硬盤同時離線,或者RAID信息出錯等原因,陣列便會失效,這時就需要對數據進行重組。並且做raid 5陣列所有磁盤容量必須一樣大,當容量不同時,會以最小的容量為准。 同時,最好硬盤轉速一樣,否則會影響性能。
RAID 1+0也被稱為RAID-10標准,實際是將RAID-0和RAID-1標准結合的產物,是先對磁盤先進行RAID-1,然後RAID-0,這種方法即提供了冗余,而且也提升了速度。
在連續地以位或字節為單位分割數據並且並行讀/寫多個磁盤的同時,為每一塊磁盤作磁盤鏡像進行冗余。它的優點是同時擁有RAID-0的超凡速度和RAID-1的數據高可靠性,但是CPU占用率同樣也更高,而且磁盤的利用率比較低。由於利用了RAID-0極高的讀寫效率和RAID-1較高的數據保護、恢復能力,使RAID-10成為了一種性價比較高的等級,目前幾乎所有的RAID控制卡都支持這一等級。
但是,RAID-10對存儲容量的利用率和RAID-1一樣低,只有50%。因此,RAID10即高可靠性與高效磁盤結構它是一個帶區結構加一個鏡象結構,可以達到既高效又高速的目的,RAID 10能提供比RAID 5更好的性能,使用此方案比較昂貴。
由於RAID的使用性很高,而對硬盤的使用內核需要識別,在最新的內核中已經默認加載了對常見RAID卡的驅動。RAID設備在linux系統中會被識別成/dev/md[N] N是數字。使用mdadm命令能夠對RAID設備配置。
目前 RAID技術大致分為兩種:基於硬件的RAID技術和基於軟件的RAID技術。其中在Linux下通過自帶的軟件就能實現RAID功能,由於是用軟件去實現的RAID功能,所以它配置靈活、管理方便。同時使用軟件RAID,還可以實現將幾個物理磁盤合並成一個更大的虛擬設備,從而達到性能改進和數據冗余的目的。
Linux軟RAID是在linux操作系統層面進行的軟件RAID配置,雖然也能對數據進行保護,但是在實際生產環境中,還是建議使用存儲中磁盤陣列和硬RAID實現磁盤存儲冗余。基於硬件的RAID解決方案比基於軟件RAID技術在使用性能和服務性能方面不僅更勝一籌,而且在檢測和修復多位錯誤的能力、錯誤磁盤自動檢測和陣列重建等方面更有安全保障。
基本操作命令總結:
創建模式:
-C:創建md0
-n#:指明創建raid所需要的磁盤個數
-#:指明 創建raid的級別
-c:指明創建的塊大小
-x:指明冗余(空閒)磁盤的個數
-a{yes|no}:自動創建目標raid設備的設備文件
管理模式:
-f:標記模擬指定磁盤為損壞
-a:向raid裡面添加磁盤
-r:移除磁盤
-S:停止陣列
-A -s:激活陣列
-D -s:生成配置文件(mdadm -D -s >> /etc/mdadm.conf)
mdadm -zero-superblock /dev/sdb1(刪除raid信息)
監控模式:
-F:(一般不怎麼常用)
裝配模式:
軟raid是基於系統的,當我們原系統損壞了,那麼我們此時就需要重新裝配raid
-A (例如:mdadm -A /dev/md1 /dev/sdb5 /dev/sdb6)
曾長模式:
用於增加磁盤,為陣列實現擴容
-G (例如:[root@localhost ~]# mdadm -G /dev/md2 -n 4)
查看:
mdadm -D /dev/md#(顯示raid陣列詳細信息)
cat /proc/mdstat(查看raid的狀態)
--------------------------------------------------------------------------------
下面我們就來具體操作試試吧!!
一、添加了4塊磁盤,我們來查看下是否存在:
[[email protected] ~]# fdisk -l
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 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: 0x000271fa
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 976895 487424 83 Linux
/dev/sda2 976896 196288511 97655808 83 Linux
/dev/sda3 196288512 200194047 1952768 82 Linux swap / Solaris
/dev/sda4 200194048 251658239 25732096 5 Extended
/dev/sda5 200196096 239257599 19530752 83 Linux
Disk /dev/sdd: 128.8 GB, 128849018880 bytes, 251658240 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 /dev/sdc: 128.8 GB, 128849018880 bytes, 251658240 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 /dev/sdb: 128.8 GB, 128849018880 bytes, 251658240 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 /dev/sde: 128.8 GB, 128849018880 bytes, 251658240 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
二、將添加的幾塊空閒磁盤創建成raid陣列
[[email protected] ~]# mdadm -C /dev/md0 -n3 -l5 -x1 /dev/sd{b,c,d,e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
三、查看下我們創建好的raid陣列的狀態
[[email protected] ~]# cat /proc/mdstat ##顯示陣列的狀態
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[4] sde[3](S) sdc[1] sdb[0]
251527168 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
bitmap: 0/1 pages [0KB], 65536KB chunk##此處我們可以看到陣列已經同步完成了!
[[email protected] ~]# mdadm -D /dev/md0 ###顯示下我們陣列的詳細信息
/dev/md0:
Version : 1.2
Creation Time : Sat Jun 4 10:17:02 2016
Raid Level : raid5 ##raid級別
Array Size : 251527168 (239.88 GiB 257.56 GB)
Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sat Jun 4 10:27:34 2016
State : clean ##狀��正常
Active Devices : 3 ##活動設備的磁盤塊數量
Working Devices : 4 ##總共工作設備的磁盤數量
Failed Devices : 0 ##沒出現損壞的磁盤
Spare Devices : 1 ##備份的磁盤數量
Layout : left-symmetric
Chunk Size : 512K
Name : bkjia.com:0 (local to host bkjia.com)
UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
Events : 127
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
3 8 64 - spare /dev/sde ##此硬盤處於空閒狀態
四、將磁盤格式化
[[email protected] ~]# mkfs.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
15720448 inodes, 62881792 blocks
3144089 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2210398208
1919 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, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done ##格式成功!
五、掛載設備然後我們使用看看是否正常
[[email protected] ~]# mkdir /md0dir
[[email protected] ~]# mount /dev/md0 /md0dir/
[[email protected] ~]# mount
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700)
/dev/md0 on /md0dir type ext4 (rw,relatime,seclabel,stripe=256,data=ordered)##臨時掛載成功
[[email protected] ~]# vim /etc/fstab ##設置開機自動掛載設備
# /etc/fstab
# Created by anaconda on Wed May 11 18:44:18 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=267aae0a-088b-453f-a470-fec8fcdf772f / xfs defaults 0 0
UUID=d8d9403c-8fa1-4679-be9b-8e236d3ae57b /boot xfs defaults 0 0
UUID=7f62d6d9-9eda-4871-b2d7-2cbd2bc4cc89 /testdir xfs defaults 0 0
UUID=abba10f4-18b3-4bc3-8cca-22ad619fadef swap swap defaults 0 0
/dev/md0 /md0dir ext4 defaults 0 0
~
[[email protected] ~]# mount -a ##使fsta文件中沒掛載的都掛上來
[[email protected] ~]# cd /md0dir/ ##進入掛載目錄中創建文件測試正常!
[[email protected] md0dir]# ls
lost+found
[[email protected] md0dir]# touch 1.txt
[[email protected] md0dir]# ls
1.txt lost+found
[[email protected] md0dir]#
六、現在我們來模擬下磁盤出現故障,然後看看raid會有什麼變化
[[email protected] md0dir]# mdadm /dev/md0 -f /dev/sdd ##標記/dev/sdd為損壞
mdadm: set /dev/sdd faulty in /dev/md0
[[email protected] md0dir]# mdadm -D /dev/md0 ##顯示下raid的信息看看
/dev/md0:
Version : 1.2
Creation Time : Sat Jun 4 10:17:02 2016
Raid Level : raid5
Array Size : 251527168 (239.88 GiB 257.56 GB)
Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sat Jun 4 11:55:39 2016
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1 ####此處的狀態也跟前的不一樣了,標記了損壞的塊數
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Rebuild Status : 0% complete
Name : bkjia.com:0 (local to host bkjia.com)
UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
Events : 129
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
3 8 64 2 spare rebuilding /dev/sde
##此時/dev/sdd開始rebuild數據
4 8 48 - faulty /dev/sdd##/dev/sdd損壞了
[[email protected] md0dir]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[4](F) sde[3] sdc[1] sdb[0]
251527168 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 2.2% (2847492/125763584) finish=10.0min speed=203392K/sec ##開始同步數據了!
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
[[email protected] md0dir]# cd
[[email protected] ~]# cd /md0dir/
[[email protected] md0dir]# ls
1.txt lost+found
[[email protected] md0dir]# touch 2.txt
[[email protected] md0dir]# ls
1.txt 2.txt lost+found ###看來一切正常,嘻嘻。
七、接下了我們把剛剛損壞的磁盤給移除掉
[[email protected] md0dir]# mdadm /dev/md0 -r /dev/sdd
mdadm: hot removed /dev/sdd from /dev/md0
[[email protected] md0dir]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Jun 4 10:17:02 2016
Raid Level : raid5
Array Size : 251527168 (239.88 GiB 257.56 GB)
Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sat Jun 4 12:07:12 2016
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : bkjia.com:0 (local to host bkjia.com)
UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
Events : 265
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
3 8 64 2 active sync /dev/sde
##此時我們就只有三塊盤在raid陣列中了
八、如果在壞一塊盤那我們數據將會有損壞,所有我們在添加一塊盤來做備份
[[email protected] md0dir]# mdadm /dev/md0 -a /dev/sdd ##由於我磁盤不夠了所有就把移走那塊添加了
mdadm: re-added /dev/sdd
[[email protected] md0dir]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Jun 4 10:17:02 2016
Raid Level : raid5
Array Size : 251527168 (239.88 GiB 257.56 GB)
Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sat Jun 4 12:11:54 2016
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Name : bkjia.com:0 (local to host bkjia.com)
UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
Events : 266
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
3 8 64 2 active sync /dev/sde
4 8 48 - spare /dev/sdd##ok我們又有備份盤了
接下我們就把raid給停止服務吧,,由於我之前掛載了,所有我們先卸載然後在停止服務。
[[email protected] ~]# umount /md0dir/
[[email protected] ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
如何在Linux上構建 RAID 10陣列
Debian軟RAID安裝筆記 - 使用mdadm安裝RAID1
常用RAID技術介紹以及示例演示(多圖)
Linux實現最常用的磁盤陣列-- RAID5
RAID0+1和RAID5的性能測試結果
Linux入門教程:磁盤陣列(RAID)
本文永久更新鏈接地址:
http://xxxxxx/Linuxjc/1145153.html TechArticle