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塊磁盤,我們來查看下是否存在:
[root@bogon ~]# 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陣列
[root@bogon ~]# 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陣列的狀態
[root@bogon ~]# 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##此處我們可以看到陣列已經同步完成了! [root@bogon ~]# 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 : bogon:0 (local to host bogon) 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 ##此硬盤處於空閒狀態
四、將磁盤格式化
[root@bogon ~]# 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 ##格式成功!
五、掛載設備然後我們使用看看是否正常
[root@bogon ~]# mkdir /md0dir [root@bogon ~]# mount /dev/md0 /md0dir/ [root@bogon ~]# 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)##臨時掛載成功 [root@bogon ~]# 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 ~ [root@bogon ~]# mount -a ##使fsta文件中沒掛載的都掛上來 [root@bogon ~]# cd /md0dir/ ##進入掛載目錄中創建文件測試正常! [root@bogon md0dir]# ls lost+found [root@bogon md0dir]# touch 1.txt [root@bogon md0dir]# ls 1.txt lost+found [root@bogon md0dir]#
六、現在我們來模擬下磁盤出現故障,然後看看raid會有什麼變化
[root@bogon md0dir]# mdadm /dev/md0 -f /dev/sdd ##標記/dev/sdd爲損壞 mdadm: set /dev/sdd faulty in /dev/md0 [root@bogon 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 : bogon:0 (local to host bogon) 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損壞了 [root@bogon 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> [root@bogon md0dir]# cd [root@bogon ~]# cd /md0dir/ [root@bogon md0dir]# ls 1.txt lost+found [root@bogon md0dir]# touch 2.txt [root@bogon md0dir]# ls 1.txt 2.txt lost+found ###看來一切正常,嘻嘻。
七、接下了我們把剛剛損壞的磁盤給移除掉
[root@bogon md0dir]# mdadm /dev/md0 -r /dev/sdd mdadm: hot removed /dev/sdd from /dev/md0 [root@bogon 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 : bogon:0 (local to host bogon) 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陣列中了
八、如果在壞一塊盤那我們數據將會有損壞,所有我們在添加一塊盤來做備份
[root@bogon md0dir]# mdadm /dev/md0 -a /dev/sdd ##由於我磁盤不夠了所有就把移走那塊添加了 mdadm: re-added /dev/sdd [root@bogon 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 : bogon:0 (local to host bogon) 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給停止服務吧,,由於我之前掛載了,所有我們先卸載然後在停止服務。 [root@bogon ~]# umount /md0dir/ [root@bogon ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0