您好,登錄后才能下訂單哦!
一、什么是RAID:
- 磁盤陣列全名是“ Redundant Arrays of Inexpensive Disks, RAID ”,英翻中的意思是:容錯式廉價磁盤陣列。
- RAID 可以通過一個技術(軟件或硬件),將多個較小的磁盤整合成為一個較大的磁盤設備;而這個較大的磁盤功能可不止是儲存而已,他還具有數據保護的功能呢。
- 整個 RAID 由于選擇的等級(level)不同,而使得整合后的磁盤具有不同的功能
1、RAID-0(等量模式,stripe):性能最佳
- 這種模式如果使用相同型號與容量的磁盤來組成時,效果較佳。
- 這種模式的 RAID 會將磁盤先切出等量的區塊(名為chunk,一般可設置 4K~1M 之間),然后當一個文件要寫入 RAID 時,該文件會依據 chunk 的大小切割好,之后再依序放到各個磁盤里面去。
- 由于每個磁盤會交錯的存放數據,因此當你的數據要寫入 RAID 時,數據會被等量的放置在各個磁盤上面。
2、RAID-1(映射模式,mirror):完整備份
- 這種模式也是需要相同的磁盤容量的,最好是一模一樣的磁盤啦!
- 如果是不同容量的磁盤組成 RAID-1 時,那么總容量將以最小的那一顆磁盤為主!這種模式主要是“讓同一份數據,完整的保存在兩顆磁盤上頭”
- 舉例來說,如果我有一個 100MB 的文件,且我僅有兩顆磁盤組成 RAID-1 時,那么這兩顆磁盤將會同步寫入 100MB 到他們的儲存空間去。因此,整體 RAID 的容量幾乎少了 50%。由于兩顆硬盤內容一模一樣,好像鏡子映照出來一樣,所以我們也稱他為 mirror 模式、
3、RAID 1+0,RAID 0+1
- 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
4、RAID5:性能與數據備份的均衡考慮(重點)
- RAID-5 至少需要三顆以上的磁盤才能夠組成這種類型的磁盤陣列。
- 這種磁盤陣列的數據寫入有點類似 RAID-0 ,不過每個循環的寫入過程中(striping),在每顆磁盤還加入一個同位檢查數據(Parity),這個數據會記錄其他磁盤的備份數據,用于當有磁盤損毀時的救援。
RAID5 怎么工作:
- 每個循環寫入時,都會有部分的同位檢查碼(parity)被記錄起來,并且記錄的同位檢查碼每次都記錄在不同的磁盤,因此,任何一個磁盤損毀時都能夠借由其他磁盤的檢查碼來重建原本磁盤內的數據喔!不過需要注意的是,由于有同位檢查碼,因此 RAID 5 的總容量會是整體磁盤數量減一顆。
- 原本的 3 顆磁盤只會剩下(3-1)=2 顆磁盤的容量。
- 當損毀的磁盤數量大于等于兩顆時,這整組 RAID 5 的數據就損毀了。因為 RAID 5 默認僅能支持一顆磁盤的損毀情況。
RAID 6 可以支持兩顆磁盤損壞
SPare Disk(預留磁盤功能):
為了讓系統可以實時的在壞掉硬盤時主動的重建,因此就需要預備磁盤(spare disk)的輔助。所謂的 spare disk 就是一顆或多顆沒有包含在原本磁盤陣列等級中的磁盤,這顆磁盤平時并不會被磁盤陣列所使用,當磁盤陣列有任何磁盤損毀時,則這顆 spare disk 會被主動的拉進磁盤陣列中,并將壞掉的那顆硬盤移出磁盤陣列!然后立即重建數據系統。磁盤陣列的優點:
- 數據安全與可靠性:指的并非網絡信息安全,而是當硬件(指磁盤)損毀時,數據是否還能夠安全的救援或使用之意;
- 讀寫性能:例如 RAID 0 可以加強讀寫性能,讓你的系統 I/O 部分得以改善;
- 容量:可以讓多顆磁盤組合起來,故單一文件系統可以有相當大的容量。
二、Software,hardware RAID:
.
為何磁盤陣列又分為硬件與軟件呢?
所謂的硬件磁盤陣列(hardware RAID)是通過磁盤陣列卡來達成陣列的目的。磁盤陣列卡上面有一塊專門的芯片在處理 RAID 的任務,因此在性能方面會比較好。在很多任務(例如 RAID 5 的同位檢查碼計算)磁盤陣列并不會重復消耗原本系統的 I/O 總線,理論上性能會較佳。此外目前一般的中高階磁盤陣列卡都支持熱拔插,亦即在不關機的情況下抽換損壞的磁盤,對于系統的復原與數據的可靠性方面非常的好用。
而軟件磁盤陣列主要是通過軟件來仿真陣列的任務,因此會損耗較多的系統資源,比如說 CPU 的運算與 I/O 總線的資源等。不過目前我們的個人計算機實在已經非常快速了,因此以前的速度限制現在已經不存在!
我們的 CentOS 提供的軟件磁盤陣列為 mdadm 這套軟件,這套軟件會以 partition 或 disk 為磁盤的單位,也就是說,你不需要兩顆以上的磁盤,只要有兩個以上的分區(partition)就能夠設計你的磁盤陣列了。
此外, mdadm 支持剛剛我們前面提到的RAID0/RAID1/RAID5/spare disk 等!而且提供的管理機制還可以達到類似熱拔插的功能,可以線上(文件系統正常使用)進行分區的抽換!使用上也非常的方便!
三、軟件磁盤陣列的配置:
也嘮叨那么多了,下來我們就來配置一下軟件磁盤陣列:
大概步驟:
開始配置:
1、分區
[root@raid5 /]# gdisk /dev/sdb # 通過gdisk命令創建分區,也可使用fdisk
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): # GUID號
Changed type of partition to 'Linux filesystem'
#依照此上命令創建四個分區
Command (? for help): P # 查看創建好的分區
.......................// 省略部分
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
# 保存退出
[root@raid5 /]# lsblk # 查看磁盤列表
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─cl-root 253:0 0 50G 0 lvm /
├─cl-swap 253:1 0 2G 0 lvm [SWAP]
└─cl-home 253:2 0 47G 0 lvm /home
sdb 8:16 0 20G 0 disk # 看到我們sdb磁盤上已經分出了四個分區
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
├─sdb3 8:19 0 1G 0 part
└─sdb4 8:20 0 1G 0 part
└─sdb5 8:21 0 1G 0 part # 第五個是預留磁盤
sr0 11:0 1 1024M 0 rom
2、創建
[root@raid5 /]# mdadm --create /dev/md0 --auto=yes --level=5 --chunk=256K --raid-devices=4 --spare-devices=1 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4 /dev/sdb5
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
--create:為創建RAID的選項
--auto=yes:決定創建后面接的軟件磁盤陣列設備,即md [0-9]
--chunk=256K:決定這個設備的chunk大小,也可以當成 stripe 大小,一般是64K或512K
--raid-devices=4:使用幾個磁盤或分區作為磁盤陣列的設備
--spare-devices=1:使用幾個磁盤或分區作為備用設備
--level=5:設置這組磁盤陣列的等級,建議只用0、1、5即可
--detail:后面所接的那個磁盤陣列設備的詳細信息
[root@raid5 /]# mdadm --detail /dev/md0
/dev/md0: # RAID的設備文件名
Version : 1.2
Creation Time : Thu Nov 7 20:26:03 2019 # 創建時間
Raid Level : raid5 # RAID 的等級
Array Size : 3142656 (3.00 GiB 3.22 GB) # 整組RAID的可用容量
Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB) # 每顆磁盤的容量
Raid Devices : 4 # 組成RAID的磁盤數量
Total Devices : 5 # 包括spare的總磁盤數
Persistence : Superblock is persistent
Update Time : Thu Nov 7 20:26:08 2019
State : clean # 目前這個磁盤陣列的使用狀態
Active Devices : 4 # 啟動的設備數量
Working Devices : 5 # 目前使用于此陣列的設備數
Failed Devices : 0 # 損壞的設備數
Spare Devices : 1 # 預留磁盤的數量
Layout : left-symmetric
Chunk Size : 256K # 這就是chunk的小區塊容量
Name : raid5:0 (local to host raid5)
UUID : facfa60d:c92b4ced:3f519b65:d135fd98
Events : 18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
2 8 19 2 active sync /dev/sdb3
5 8 20 3 active sync /dev/sdb4
4 8 21 - spare /dev/sdb5 # 看到sdb5作為備用設備在候場區
# 最后五行就是這五個設備目前的狀況,RaidDevice 指的是此Raid內的磁盤順序
[root@raid5 /]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb4[5] sdb5[4](S) sdb3[2] sdb2[1] sdb1[0] # 第一行
3142656 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] # 第二行
unused devices: <none>
第一行部分:指出 md0 為 raid5 ,且使用了 sdb1,sdb2,sdb3,sdb4,等四顆磁盤設備。每個設備后面的中括號 [] 內的數字為此磁盤在 RAID 中的順序(RaidDevice);至于 sdb5 后面的 [S] 則代表 sdb5 為 spare 之意。
第二行部分:此磁盤陣列擁有 3142656 個block(每個 block 單位為 1K),所以總容量約為 3GB,使用 RAID 5 等級,寫入磁盤的小區塊(chunk)大小為 256K,使用 algorithm 2 磁盤陣列演算法。 [m/n] 代表此陣列需要 m 個設備,且 n 個設備正常運行。因此本 md0 需要 4 個設備且這 4 個設備均正常運行。后面的 [UUUU] 代表的是四個所需的設備(就是 [m/n] 里面的 m)的啟動情況,U 代表正常運行,若為 _ 則代表不正常。
3、格式化并掛載使用
[root@raid5 /]# mkfs.xfs -f -d su=256k,sw=3 -r extsize=768k /dev/md0 # 要注意,這塊格式化的是 md0
meta-data=/dev/md0 isize=512 agcount=8, agsize=98176 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=785408, imaxpct=25
= sunit=128 swidth=384 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=1572864 blocks=0, rtextents=0
[root@raid5 /]# mkdir /srv/raid
[root@raid5 /]# mount /dev/md0 /srv/raid/
[root@raid5 /]# df -TH /srv/raid/ # 看到我們已經掛載成功了
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 3.3G 34M 3.2G 2% /srv/raid
4、仿真RAID錯誤的救援
俗話說“天有不測風云,人有旦夕禍福”,誰也不知道你的磁盤陣列內的設備啥時候會出錯,因此了解一下軟件磁盤陣列的救援是必須的!下面我們就來模仿一下RAID錯誤并救援。
[root@raid5 /]# cp -a /var/log/ /srv/raid/ # 先復制一些數據到掛載點
[root@raid5 /]# df -TH /srv/raid/ ; du -sm /srv/raid/* # 看到里面已經有了數據
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 3.3G 39M 3.2G 2% /srv/raid
5 /srv/raid/log
[root@raid5 /]# mdadm --manage /dev/md0 --fail /dev/sdb3
mdadm: set /dev/sdb3 faulty in /dev/md0 # 顯示已經成為了錯誤的設備
.............................. // 省略部分內容
Update Time : Thu Nov 7 20:55:31 2019
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 1 # 出錯一個磁盤
Spare Devices : 0 # 這里預備已經變為0,說明已經頂替工作了,這里截得有點慢了,不然還是1
............................ // 省略部分內容
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
4 8 21 2 active sync /dev/sdb5 # 這里可以看到sdb5 已經頂替工作了
5 8 20 3 active sync /dev/sdb4
2 8 19 - faulty /dev/sdb3 # sdb3 死掉了
接下來就可以將壞磁盤拔掉,更換新的磁盤了
[root@raid5 /]# mdadm --manage /dev/md0 --remove /dev/sdb3 # 模擬拔掉舊磁盤
mdadm: hot removed /dev/sdb3 from /dev/md0
[root@raid5 /]# mdadm --manage /dev/md0 --add /dev/sdb3 # 插入新磁盤
mdadm: added /dev/sdb3
[root@raid5 /]# mdadm --detail /dev/md0 # 查看
........................... // 省略部分內容
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
4 8 21 2 active sync /dev/sdb5
5 8 20 3 active sync /dev/sdb4
6 8 19 - spare /dev/sdb3 # 我們會發現sdb3 已經作為預備磁盤在此等待了
5、設置開機自啟動RAID并自動掛載
[root@raid5 /]# mdadm --detail /dev/md0 | grep -i uuid
UUID : facfa60d:c92b4ced:3f519b65:d135fd98
[root@raid5 /]# vim /etc/mdadm.conf
ARRAY /dev/md0 UUID=facfa60d:c92b4ced:3f519b65:d135fd98
# RAID設備 識別碼內容
[root@raid5 /]# blkid /dev/md0
/dev/md0: UUID="bc2a589c-7df0-453c-b971-1c2c74c39075" TYPE="xfs"
[root@raid5 /]# vim /etc/fstab # 設置開機自動掛載
............................ // 省略部分內容
/dev/md0 /srv/raid xfs defaults 0 0
#開頭也可填寫為UUID
[root@raid5 /]# df -Th /srv/raid/ # 可以進行重啟測試
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 3.0G 37M 3.0G 2% /srv/raid
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。