在過(guò)去,我們能使用的硬盤容量不大,特別是個(gè)人電腦里。但在某些情況下會(huì)用到很大的儲(chǔ)存空間,例如公司中存儲(chǔ)著大量的客戶信息,而這些磁盤想必就不夠用了。其實(shí)有一中存儲(chǔ)機(jī)制,稱為磁盤陣列(RAID)。那么什么是RAID?
RAID:
RAID:『Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容錯(cuò)式廉價(jià)磁盤陣列。RAID 可以透過(guò)一個(gè)技術(shù)(軟件或硬件),將多個(gè)較小的磁盤整合成為一個(gè)較大的磁盤裝置;而這個(gè)較大的磁盤功能可不止是儲(chǔ)存而已,他還具有數(shù)據(jù)保護(hù)的功能呢。整個(gè) RAID 由于選擇的等級(jí)(level) 不同,而使得整合后的磁盤具有不同的功能,基本常見的level 有這幾種
RAID-0:
RAID -0:等量模式
這種模式如果使用相同型號(hào)與容量的磁盤來(lái)組成時(shí),效果較佳。即至少兩塊磁盤。
當(dāng)有數(shù)據(jù)要寫入 RAID 時(shí),資料會(huì)先被切割成符合小區(qū)塊的大小,然后再依序一個(gè)一個(gè)的放置到不同的磁盤去。由于數(shù)據(jù)已經(jīng)先被切割并且依序放置到不同的磁盤上面,因此每顆磁盤所負(fù)責(zé)的數(shù)據(jù)量都降低了!
它的優(yōu)勢(shì)是讀寫性能的提升,利用率達(dá)到了100%缺點(diǎn)是沒(méi)有容錯(cuò)能力,有一個(gè)磁盤損壞,那么這個(gè)陣列失效了,文件就會(huì)都損壞。
RAID-1:
RAID-1 (鏡像模式,):完整備份兩塊磁盤始終同步。
這種模式也是需要相同的磁盤容量的,最好是一模一樣的磁盤如果是不同容量的磁盤組成RAID-1 時(shí),那么總?cè)萘繉⒁宰钚〉哪且活w磁盤為主!
當(dāng)一份數(shù)據(jù)傳送到RAID-1 之后會(huì)被分為兩股,并分別寫入到各個(gè)磁盤里頭去。讀性能提升,但寫性能略有下降,有冗余能力,防止物理?yè)p壞。
RAID-5:
RAID-5:效能與數(shù)據(jù)備份的均衡考慮
RAID-5 至少需要三塊以上的磁盤才能夠組成這種類型的磁盤陣列。這種磁盤陣列的數(shù)據(jù)寫入有點(diǎn)類似RAID-0 ,不過(guò)每個(gè)循環(huán)的寫入過(guò)程中(striping),在每顆磁盤還加入一個(gè)同位檢查數(shù)據(jù)這個(gè)數(shù)據(jù)會(huì)記錄其他磁盤的備份數(shù)據(jù), 用于當(dāng)有磁盤損毀時(shí)的救援。
它的優(yōu)勢(shì)是讀寫性能的提升,有容錯(cuò)能力,允許最多一塊磁盤的損壞。
另外,由于RAID 5 僅能支持一顆磁盤的損毀,所以還發(fā)展出另外一種等級(jí),就是RAID 6 ,這個(gè)RAID 6 則使用兩顆磁盤的容量作為parity 的儲(chǔ)存,因此整體的磁盤容量就會(huì)少兩顆,但是允許出錯(cuò)的磁盤數(shù)量就可以達(dá)到兩顆了! 也就是在 RAID 6 的情況下,同時(shí)兩顆磁盤損毀時(shí),數(shù)據(jù)還是可以救回來(lái)!
RAID-10和RAID-01:
RAID-10和RAID-01:都是由RAID-0與RAID-1的組合,那么最少需要用到四塊硬盤。優(yōu)點(diǎn)就是RAID-0與RAID-1的組合。讀寫的性能提升。
區(qū)別于RAID-10是先由兩兩組合成RAID1,再由兩個(gè)RAID1組合成RAID-0,
而RAID-01是先由兩兩組合成RAID0,再由兩個(gè)RAID0組合成RAID-1
但是由于是不同的組合,稍微還是有點(diǎn)差別的,像RAID-01,如果disk a損壞那么左邊的RAID0就用不了,就只剩下右邊RAID0在工作,相當(dāng)于一下就損失了兩塊硬盤。而RAID-10,如果是disk a損壞,那么就只有disk a不能使用,disk b還能繼續(xù)使用,不影響。所以在實(shí)際中如果選擇RAID-0和RAID-1的組合大部分會(huì)選擇RAID-10這種。
對(duì)于RAID陣列的優(yōu)點(diǎn)其實(shí)重點(diǎn)在于:
- 數(shù)據(jù)安全與可靠性:指的并非網(wǎng)絡(luò)信息安全,而是當(dāng)硬件(指磁盤) 損毀時(shí),數(shù)據(jù)是否還能夠安全的救援或使用之意;
- 讀寫效能:例如RAID 0 可以加強(qiáng)讀寫效能,讓你的系統(tǒng)I/O 部分得以改善;
-
容量:可以讓多顆磁盤組合起來(lái),故單一文件系統(tǒng)可以有相當(dāng)大的容量。
下面我們?cè)谔摂M中設(shè)定磁盤陣列RAID-10,
1.假設(shè)我們?cè)谔摂M機(jī)中添加了如下硬盤:
剛開始系統(tǒng)沒(méi)經(jīng)過(guò)重啟是不識(shí)別的,這里有兩種方式可以讓系統(tǒng)識(shí)別新增加的磁盤。
1.重啟虛擬機(jī)(在實(shí)際機(jī)器中重啟機(jī)器)
2.用命令:這樣在不重啟的情況下就可識(shí)別磁盤。
這里我們可以看到已經(jīng)識(shí)別了,多出了sdb.sdc,sdd,sde這四塊盤下面我們就可以設(shè)置了。
2.設(shè)定前我們需先了解下mdadm這個(gè)命令,這個(gè)命令可實(shí)現(xiàn)軟件RAID的實(shí)現(xiàn)。
mdadm:
命令語(yǔ)法格式:mdadm[mode] <raiddevice> [options] <component-devices>
常見模式:
創(chuàng)建: -C 裝配 : -A 管理:-f , -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意塊設(shè)備
-C: 創(chuàng)建模式
-n #: 使用#個(gè)塊設(shè)備來(lái)創(chuàng)建此RAID
-l #:指明要?jiǎng)?chuàng)建的RAID的級(jí)別
-a {yes|no}:自動(dòng)創(chuàng)建目標(biāo)RAID設(shè)備的設(shè)備文件
-c CHUNK_SIZE: 指明塊大小
-x #: 指明空閑盤的個(gè)數(shù)
-D:顯示raid的詳細(xì)信息;
mdadm -D /dev/md#
管理模式:
-f: 標(biāo)記指定磁盤為損壞
-a: 添加磁盤
-r: 移除磁盤
觀察md的狀態(tài):
cat /proc/mdstat
2.用mdadm創(chuàng)建并定義RAID的設(shè)備
[root@centos7 ~]#mdadm -C /dev/md0 -a yes -l 10 -n 4 /dev/sd{b,c,d,e} 注:這里創(chuàng)建的RAID名為md0
mdadm: largest drive (/dev/sde) exceeds size (20955136K) by more than 1%
Continue creating array? y 注:輸入y就自動(dòng)創(chuàng)建了
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@centos7 ~]#cat /proc/mdstat 注:我們通過(guò)觀察md的狀態(tài)可得知進(jìn)度,同時(shí)也可以通過(guò)mdadm -D /dev/md0詳細(xì)的信息
Personalities : [raid10]
md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
41910272 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
[===========>.........] resync = 59.3% (24873216/41910272) finish=1.3min speed=207256K/sec
unused devices: <none>
[root@centos7 ~]#mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jun 22 21:11:48 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jun 22 21:15:17 2017
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : centos7.3.zj.com:0 (local to host centos7.3.zj.com)
UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
Events : 17
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
通過(guò)上面的命令,創(chuàng)建RAID可以說(shuō)已經(jīng)成功一大半了。下面就是對(duì)文件系統(tǒng)的格式化。
3.生成RAID的配置文件
[root@centos7 ~]#ll /etc/mdadm.conf 注:默認(rèn)開始不存在
ls: cannot access /etc/mdadm.conf: No such file or directory
[root@centos7 ~]#mdadm -Ds /dev/md0 >/etc/mdadm.conf 注:導(dǎo)入生成
[root@centos7 ~]#ll /etc/mdadm.conf
-rw-r--r--. 1 root root 93 Jun 22 21:43 /etc/mdadm.conf
4.用文件系統(tǒng)對(duì)每個(gè)RAID設(shè)備進(jìn)行格式化。
[root@centos7 ~]#mkfs.xfs /dev/md0 注:文件系統(tǒng)格式化默認(rèn)生成下面信息,如需特別要求可加選項(xiàng)來(lái)指定對(duì)文件系統(tǒng)的要求。
meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=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 log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
5.用blkid命令查看生成好的md0等磁盤的文件系統(tǒng)格式及UUID,到這里基本就成功了,接下來(lái)就是掛載。
[root@centos7 ~]#blkid
/dev/sdb: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="659aba42-0617-295d-c9a4-aa49bc59624d" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member"
/dev/sdc: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="79c73d4a-0e1b-070e-849d-38416cbf91fe" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member"
/dev/sda1: UUID="637077c6-3003-40e0-8689-1556bb4fa00e" TYPE="xfs"
/dev/sda2: UUID="e8d7cbe2-0fd0-4355-b535-a7b54c3febd9" TYPE="xfs"
/dev/sda3: UUID="4ca027ad-66c8-4132-809f-9ef47aa068b8" TYPE="xfs"
/dev/sda5: UUID="52ceaf06-70a8-4ce2-9bea-e4be30b6af18" TYPE="swap"
/dev/sda6: UUID="3fb7ca42-0efc-4412-a8cc-40d98d83870b" TYPE="xfs"
/dev/sr0: UUID="2016-12-05-13-52-39-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sde: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="81532d29-9dbe-5769-0e87-07f293de4d96" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member"
/dev/md0: UUID="afdbce67-6209-4393-ab48-3f7881f0465c" TYPE="xfs"
/dev/sdd: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="d9ae2865-8631-085d-bd34-a7cdb3a188d7" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member"
6.掛載RAID10,并進(jìn)行文件測(cè)試。
[root@centos7 ~]#mkdir /mnt/raid10 注:在mnt下創(chuàng)建一個(gè)raid10的掛載點(diǎn)
[root@centos7 ~]#mount /dev/md0 /mnt/raid10 注:掛載
[root@centos7 ~]#df -h 注:用df查看是否掛載成功
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 5.0G 95G 5% /
devtmpfs 474M 0 474M 0% /dev
tmpfs 489M 88K 489M 1% /dev/shm
tmpfs 489M 14M 476M 3% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda6 10G 37M 10G 1% /home
/dev/sda1 1014M 169M 846M 17% /boot
/dev/sda3 50G 63M 50G 1% /app
tmpfs 98M 24K 98M 1% /run/user/0
/dev/sr0 7.8G 7.8G 0 100% /run/media/root/CentOS 7 x86_64
/dev/md0 40G 33M 40G 1% /mnt/raid10
[root@centos7 ~]#cd /mnt/raid10 注:進(jìn)入raid10進(jìn)行文件的測(cè)試
[root@centos7 raid10]#dd if=dev/zero of=bigfile bs=1M count=1024
dd: failed to open ‘dev/zero’: No such file or directory
[root@centos7 raid10]#dd if=/dev/zero of=bigfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.82217 s, 589 MB/s
[root@centos7 raid10]#ll -h
total 1.0G
-rw-r--r--. 1 root root 1.0G Jun 22 22:03 bigfile
[root@centos7 raid10]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 5.0G 95G 5% /
devtmpfs 474M 0 474M 0% /dev
tmpfs 489M 88K 489M 1% /dev/shm
tmpfs 489M 14M 476M 3% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda6 10G 37M 10G 1% /home
/dev/sda1 1014M 169M 846M 17% /boot
/dev/sda3 50G 63M 50G 1% /app
tmpfs 98M 24K 98M 1% /run/user/0
/dev/sr0 7.8G 7.8G 0 100% /run/media/root/CentOS 7 x86_64
/dev/md0 40G 1.1G 39G 3% /mnt/raid10 注:這里空間增加,說(shuō)明raid10創(chuàng)建成功,可以使用了。
接下來(lái)要進(jìn)行最后一步,就是寫進(jìn)fstab。
7.對(duì)md0的UUID寫進(jìn)etc下的fstab,為什么要寫進(jìn)fstab呢?因?yàn)?etc/fstab 文件負(fù)責(zé)配置Linux開機(jī)時(shí)自動(dòng)掛載的分區(qū)。 磁盤被手動(dòng)掛載之后都必須把掛載信息寫入/etc/fstab這個(gè)文件中,否則下次開機(jī)啟動(dòng)時(shí)仍然需要重新手動(dòng)掛載。
UUID=e8d7cbe2-0fd0-4355-b535-a7b54c3febd9 / xfs defaults 0 0
UUID=4ca027ad-66c8-4132-809f-9ef47aa068b8 /app xfs defaults 0 0
UUID=637077c6-3003-40e0-8689-1556bb4fa00e /boot xfs defaults 0 0
UUID=52ceaf06-70a8-4ce2-9bea-e4be30b6af18 swap swap defaults 0 0
UUID=3fb7ca42-0efc-4412-a8cc-40d98d83870b /home xfs defaults 0 0
UUID=afdbce67-6209-4393-ab48-3f7881f0465c /mnt/md0 xfs defaults 0 0
注:按原有格式填寫好。
到這里創(chuàng)建raid10就完成了。
拓展:對(duì)raid10增加一個(gè)備用磁盤防止意外某塊磁盤損壞,備用磁盤自動(dòng)替換。
1.在虛擬機(jī)下模擬增加一個(gè)磁盤
2.使用命令讓系統(tǒng)識(shí)別
[root@centos7 ~]#echo '- - -' > /sys/class/scsi_host/host2/scan
[root@centos7 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /app
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 2G 0 part [SWAP]
└─sda6 8:6 0 10G 0 part /home
sdb 8:16 0 20G 0 disk
└─md0 9:0 0 40G 0 raid10 /mnt/raid10
sdc 8:32 0 30G 0 disk
└─md0 9:0 0 40G 0 raid10 /mnt/raid10
sdd 8:48 0 40G 0 disk
└─md0 9:0 0 40G 0 raid10 /mnt/raid10
sde 8:64 0 50G 0 disk
└─md0 9:0 0 40G 0 raid10 /mnt/raid10
sdf 8:80 0 20G 0 disk 注:這里以成功識(shí)別到
sr0 11:0 1 7.7G 0 rom /run/media/root/CentOS 7 x86_64
3.對(duì)raid10增加備用磁盤。
[root@centos7 ~]#mdadm /dev/md0 -a /dev/sdf
mdadm: added /dev/sdf
[root@centos7 ~]#mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jun 22 21:11:48 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Thu Jun 22 22:22:14 2017
State : clean
Active Devices : 4
Working Devices : 5
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Name : centos7.3.zj.com:0 (local to host centos7.3.zj.com)
UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
Events : 18
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
4 8 80 - spare /dev/sdf 注:已成功加入稱為備用磁盤
4.模擬磁盤的損壞
[root@centos7 ~]#mdadm /dev/md0 -f /dev/sdb 注:用-f命令模擬sdb盤損壞
mdadm: set /dev/sdb faulty in /dev/md0
[root@centos7 ~]#mdadm -D /dev/md0 注:查看信息
/dev/md0:
Version : 1.2
Creation Time : Thu Jun 22 21:11:48 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Thu Jun 22 22:27:07 2017
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 1
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Rebuild Status : 22% complete 注:重建狀態(tài):完成22%
Name : centos7.3.zj.com:0 (local to host centos7.3.zj.com)
UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
Events : 23
Number Major Minor RaidDevice State
4 8 80 0 spare rebuilding /dev/sdf 注:這里自動(dòng)把sdf盤替換為損壞的sdb盤
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
0 8 16 - faulty /dev/sdb 注:損壞的sdb以替換下來(lái),接下來(lái)我們就可以移除它了。
5.移除損壞的磁盤
[root@centos7 ~]#mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
[root@centos7 ~]#mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jun 22 21:11:48 2017
Raid Level : raid10
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jun 22 22:36:56 2017
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : centos7.3.zj.com:0 (local to host centos7.3.zj.com)
UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
Events : 38
Number Major Minor RaidDevice State
4 8 80 0 active sync set-A /dev/sdf
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
注:這里損壞的磁盤就移除了
6.進(jìn)入raid10觀察文件是否還在。
[root@centos7 ~]#cd /mnt/raid10
[root@centos7 raid10]#ll -h
total 1.0G
-rw-r--r--. 1 root root 1.0G Jun 22 22:03 bigfile 注:文件還在
現(xiàn)在我們就可以再加一塊備用磁盤,以防意外。
到這里RAID以構(gòu)建完成。
如有不足請(qǐng)多多指教。