博文大綱 什麼是RAID Software,hardware RAID 軟件磁盤陣列的設置 仿真RAID錯誤的救援模式 開機自動啓動RAID並自動掛載
1.什麼是RAID:node
1.磁盤陣列全名是「 Redundant Arrays of Inexpensive Disks, RAID 」,英翻中的意思是:容錯式廉價磁盤陣列。vim
2.RAID 能夠經過一個技術(軟件或硬件),將多個較小的磁盤整合成爲一個較大的磁盤設備;而這個較大的磁盤功能可不止是儲存而已,他還具備數據保護的功能呢。安全
3.整個 RAID 因爲選擇的等級(level)不一樣,而使得整合後的磁盤具備不一樣的功能服務器
這種模式若是使用相同型號與容量的磁盤來組成時,效果較佳。
這種模式的 RAID 會將磁盤先切出等量的區塊(名爲chunk,通常可設置 4K~1M 之間),而後當一個文件要寫入 RAID 時,該文件會依據 chunk 的大小切割好,以後再依序放到各個磁盤裏面去。
因爲每一個磁盤會交錯的存放數據,所以當你的數據要寫入 RAID 時,數據會被等量的放置在各個磁盤上面。
網絡
這種模式也是須要相同的磁盤容量的,最好是如出一轍的磁盤。
若是是不一樣容量的磁盤組成 RAID-1 時,那麼總容量將以最小的那一顆磁盤爲主!這種模式主要是「讓同一份數據,完整的保存在兩顆磁盤上頭」
舉例來講,若是我有一個 100MB 的文件,且我僅有兩顆磁盤組成 RAID-1 時,那麼這兩顆磁盤將會同步寫入 100MB 到他們的儲存空間去。所以,總體 RAID 的容量幾乎少了 50%。因爲兩顆硬盤內容如出一轍,好像鏡子映照出來同樣,因此咱們也稱他爲 mirror 模式ide
因爲兩顆磁盤內的數據如出一轍,因此任何一顆硬盤損毀時,你的數據仍是能夠完整的保留下來的!
最大優勢 備份性能
RAID-0 的性能佳可是數據不安全,RAID-1 的數據安全可是性能不佳,那麼能不能將這二者整合起來設置 RAID 呢?
RAID 1+0 就是:
(1)先讓兩顆磁盤組成 RAID 1,而且這樣的設置共有兩組;
(2)將這兩組 RAID 1 再組成一組 RAID 0。這就是 RAID 1+0
RAID 0+1 就是:
(1)先讓兩顆磁盤組成RAID 0,而且這樣的設置共有兩組;
(2) 將這兩組RAID 0 再組成一組RAID 1 。這就是RAID 0+1測試
RAID-5 至少須要三顆以上的磁盤纔可以組成這種類型的磁盤陣列。
這種磁盤陣列的數據寫入有點相似 RAID-0 ,不過每一個循環的寫入過程當中(striping),在每顆磁盤還加入一個同位檢查數據(Parity),這個數據會記錄其餘磁盤的備份數據,用於當有磁盤損毀時的救援。ui
每一個循環寫入時,都會有部分的同位檢查碼(parity)被記錄起來,而且記錄的同位檢查碼每次都記錄在不一樣的磁盤,所以,任何一個磁盤損毀時都可以藉由其餘磁盤的檢查碼來重建本來磁盤內的數據喔!不過須要注意的是,因爲有同位檢查碼,所以 RAID 5 的總容量會是總體磁盤數量減一顆。
本來的 3 顆磁盤只會剩下(3-1)=2 顆磁盤的容量。
當損毀的磁盤數量大於等於兩顆時,這整組 RAID 5 的數據就損毀了。由於 RAID 5 默認僅能支持一顆磁盤的損毀狀況spa
讀取性能:優 寫入性能:通常 RAID5 :支持1顆損壞 RAID6 :支持2顆損壞
爲了讓系統能夠實時的在壞掉硬盤時主動的重建,所以就須要預備磁盤(spare disk)的輔助。所謂的 spare disk 就是一顆或多顆沒有包含在本來磁盤陣列等級中的磁盤,這顆磁盤平時並不會被磁盤陣列所使用,當磁盤陣列有任何磁盤損毀時,則這顆 spare disk 會被主動的拉進磁盤陣列中,並將壞掉的那顆硬盤移出磁盤陣列!而後當即重建數據系統。
當磁盤陣列的磁盤損毀時,就得要將壞掉的磁盤拔除,而後換一顆新的磁盤。
Software,hardware RAID:
系統資源,好比說 CPU 的運算與 I/O 總線的資源等。不過目前咱們的我的計算機實在已經很是快速了,所以之前的速度限制如今已經不存在!
咱們的 CentOS 提供的軟件磁盤陣列爲 mdadm 這套軟件,這套軟件會以 partition 或 disk 爲磁盤的單位,也就是說,你不須要兩顆以上的磁盤,只要有兩個以上的分區(partition)就可以設計你的磁盤陣列了。
此外, mdadm 支持剛剛咱們前面提到的RAID0/RAID1/RAID5/spare disk 等!並且提供的管理機制還能夠達到相似熱拔插的功能,能夠線上(文件系統正常使用)進行分區的抽換
軟件磁盤陣列的設置:
配置RAID
(給服務器添加一塊硬盤,建立5個分區(也能夠添加5塊硬盤每塊一個分區))
1.[root@localhost ~]# gdisk /dev/sdb //進入硬盤 Creating new GPT entries. Command (? for help): n //建立分區 Partition number (1-128, default 1): 1 //默認爲1 First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +1G //大小爲1G Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem' 按照上面同樣配置再創建4塊分區
Command (? for help): p //查看分區表信息 Disk /dev/sdb: 41943040 sectors, 20.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): 6A978C77-4505-4345-ABEC-AE3C31214C6D Partition table holds up to 128 entries First usable sector is 34, last usable sector is 41943006 Partitions will be aligned on 2048-sector boundaries Total free space is 31457213 sectors (15.0 GiB) Number Start (sector) End (sector) Size Code Name 1 2048 2099199 1024.0 MiB 8300 Linux filesystem 2 2099200 4196351 1024.0 MiB 8300 Linux filesystem 3 4196352 6293503 1024.0 MiB 8300 Linux filesystem 4 6293504 8390655 1024.0 MiB 8300 Linux filesystem 5 8390656 10487807 1024.0 MiB 8300 Linux filesystem Command (? for help): wq //保存退出
[root@localhost ~]# mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sd[b-e]1 命令參數: --create #表示要建立raid --auto=yes /dev/md0 #新創建的軟件磁盤陣列設備爲md0,md序號能夠爲0-9 --level=5 #磁盤陣列的等級,這裏表示建立是的raid5 --raid-devices #添加做爲磁盤陣列用的磁盤的塊數 --spare-devices #添加做爲預備(spare)磁盤的塊數 /dev/sd[b-f]1 #磁盤陣列所使用的設備,還可寫成/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
[root@localhost ~]# cat /proc/mdstat #查看RAID的配置文件 Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0] 41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2** [3/3] [UUU]** unused devices: <none> [root@localhost ~]# mdadm -D /dev/md0 #查看RAID配置文件詳細信息 /dev/md0: Version : 1.2 Creation Time : Sun Jun 30 10:43:20 2019 ** Raid Level : raid5** #陣列類型爲raid5 ………… #省略部份內容 Active Devices : 3 #活躍的磁盤數目 Working Devices : 4 #全部的磁盤數目 Failed Devices : 0 #故障的磁盤數目 Spare Devices : 1 #熱備份的磁盤數目
Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 3 8 65 - spare /dev/sde1 #一塊磁盤用於熱備份
[root@localhost ~]# mkfs.xfs /dev/md0 #格式化磁盤 [root@localhost ~]# mkdir /a [root@localhost ~]# mount /dev/md0 /a #掛載磁盤 [root@localhost ~]# df -hT #查看磁盤大小 ………… #省略部份內容 /dev/md0 xfs 40G 33M 40G 1% /a
[root@localhost ~]# vim /etc/fstab #編寫文件開機自動掛載 ………… #省略部份內容 /dev/md0 /a xfs defaults 0 0
[root@localhost ~]# cd /a [root@localhost a]# touch 123.txt 456.txt #建立測試文件 [root@localhost a]# mdadm /dev/md0 -f /dev/sdb1 #模擬sdb1損壞 mdadm: set /dev/sdb1 faulty in /dev/md0 [root@localhost a]# mdadm -D /dev/md0 #查看/dev/md0詳細信息 ………… #省略部份內容 Number Major Minor RaidDevice State 3 8 65 0 spare rebuilding /dev/sde1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 0 8 17 - faulty /dev/sdb1 [root@localhost a]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd1[4] sde1[3] sdc1[1] sdb1[0](F) 41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2 [**3/3] [UUU]** unused devices: <none> [root@localhost a]# ll #查看測試的文件 總用量 0 -rw-r--r--. 1 root root 0 6月 30 11:06 123.txt -rw-r--r--. 1 root root 0 6月 30 11:06 456.txt
[root@localhost a]# mdadm /dev/md0 -r /dev/sdb1 #移除已損壞的磁盤 mdadm: hot removed /dev/sdb1 from /dev/md0 [root@localhost a]# mdadm -D /dev/md0 #查看/dev/md0詳細信息 ………… #省略部份內容 Number Major Minor RaidDevice State 3 8 65 0 active sync /dev/sde1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 [root@localhost a]# mdadm /dev/md0 -a /dev/sdb1 #添加一塊硬盤 mdadm: added /dev/sdb1 [root@localhost a]# mdadm -D /dev/md0 #查看/dev/md0詳細信息
服務器再添加一塊磁盤,重啓以後再加上:
[root@localhost a]# mdadm /dev/md0 -a /dev/sdf1 mdadm: added /dev/sdf1 [root@localhost a]# mdadm -D /dev/md0 ………… #省略部份內容 Number Major Minor RaidDevice State 3 8 65 0 active sync /dev/sde1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 5 8 17 - spare /dev/sdb1 6 8 81 - spare /dev/sdf1
[root@localhost a]# mdadm /dev/md0 -G -n4 #-n用來指定raid中活動盤的數量。最好保證要有足夠的熱備盤添加。 [root@localhost a]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Jun 30 10:43:20 2019 Raid Level : raid5 Array Size : 41908224 (39.97 GiB 42.91 GB) #磁盤容量已將發生變化 Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 4 Total Devices : 5 Persistence : Superblock is persistent Update Time : Sun Jun 30 11:22:00 2019 State : clean #構建完成 ………… #省略部份內容 Number Major Minor RaidDevice State 3 8 65 0 active sync /dev/sde1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 6 8 81 3 active sync /dev/sdf1 5 8 17 - spare /dev/sdb1 #此時raid中已經由四塊硬盤了
[root@localhost a]# df -hT #查看以後,容量並無發生變化 ………… #省略部份內容 /dev/md0 xfs 40G 33M 40G 1% /a [root@localhost a]# resize2fs /dev/md0 #(resizefx適用於ext3,ext4等文件系統不適用於xfs文件系統) #resize2fs命令用於更新磁盤 resize2fs 1.42.9 (28-Dec-2013) resize2fs: Bad magic number in super-block 當嘗試打開 /dev/md0 時 找不到有效的文件系統超級塊. [root@localhost a]# xfs_growfs /dev/md0 #對文件系統進行擴容 meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=10475520, imaxpct=25 = sunit=128 swidth=256 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=5120, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 10475520 to 15715584 [root@localhost a]# df -hT 文件系統 類型 容量 已用 可用 已用% 掛載點 ………… #省略部份內容 /dev/md0 xfs 60G 33M 60G 1% /a #再次查看容量已經發生變化