《LINUX學(xué)習(xí):Linux基礎(chǔ)教程:獨(dú)立硬盤冗余陣列-RAID》要點(diǎn):
本文介紹了LINUX學(xué)習(xí):Linux基礎(chǔ)教程:獨(dú)立硬盤冗余陣列-RAID,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
獨(dú)立硬盤冗余陣列(RAID,Redundant Array of Independant Disks),舊稱為便宜磁盤冗余陣列(Redundant Array of Inexpensive Disks).1987年美國(guó)加州伯克利分校的一篇名為《A Case for Redundant Arrays of Inexpensive Disk(RAID)》論文誕生,這標(biāo)志著RAID技術(shù)的開(kāi)始.
Software RAID:
軟件磁盤陣列,由CPU處置和協(xié)調(diào)一個(gè)RAID里面各個(gè)硬盤的作業(yè),這樣就會(huì)給CPU帶來(lái)較多的運(yùn)算壓力,分為3種:
1)基于主板的的磁盤陣列:通常上是由主板上的芯片組提供RAID功效.
2)硬件輔助磁盤陣列:必要RAID卡和相關(guān)廠商提供的驅(qū)動(dòng)程序,RAID功能是由驅(qū)動(dòng)程序和CPU運(yùn)算來(lái)提供
3)操作系統(tǒng)的RAID功效:Linux、windows Server等操作系統(tǒng)內(nèi)置的RAID功效
雖然軟RAID實(shí)現(xiàn)的有多種,然則在生產(chǎn)環(huán)境還是不建議使用的.
Hardware RAID:
硬件磁盤陣列,在RAID卡上內(nèi)置了CPU處理器,這樣就不占用服務(wù)器的CPU了.一般硬件磁盤陣列都會(huì)有備份的電源模塊和NVRAM(非易失性內(nèi)存),當(dāng)系統(tǒng)斷掉后,備份電源開(kāi)始供電,將硬盤讀寫的日志保留在內(nèi)存中,當(dāng)系統(tǒng)恢復(fù),備份電源關(guān)閉供電,再在NVRAM讀取日志數(shù)據(jù),繼續(xù)完成上次斷電前沒(méi)有完成的作業(yè).
?
常用的RAID有:RAID0,RAID-1,RAID-5,RAID6,RAID-10,RAID50.
?
RAID0,也稱條帶卷(striping).在RAID0中,數(shù)據(jù)會(huì)被切成片,按必定順序會(huì)被寫到所有的磁盤里面,如下圖:
若一片數(shù)據(jù)被切割成了A1-A8,將存儲(chǔ)在一個(gè)由2塊Disk構(gòu)成的RAID0,那么第一段數(shù)據(jù)塊A1會(huì)被存儲(chǔ)在Disk0中,第二段數(shù)據(jù)塊A2會(huì)被存儲(chǔ)在Disk1中,第三段數(shù)據(jù)塊會(huì)被存儲(chǔ)在Disk0中,以此類推,這一片數(shù)據(jù)會(huì)被均分到2塊磁盤上.
RAID0的優(yōu)毛病:
1)速度快,寫和讀的才能得到了提高;
2)RAID0沒(méi)有冗余的才能,一旦一塊磁盤出現(xiàn)了故障,則所有的數(shù)據(jù)都將不會(huì)恢復(fù);
3)RAID0必要N塊磁盤才能實(shí)現(xiàn)(N>=2);
4)能夠存儲(chǔ)數(shù)據(jù)的年夜小為N*min(S1,S2,S3,S4....)
在RAID0中有兩個(gè)緊張的參數(shù):
條帶寬度:stripe width,它指的是可以被并行寫入的數(shù)據(jù)塊的個(gè)數(shù),也便是實(shí)現(xiàn)RAID0中磁盤的個(gè)數(shù);
條帶大小:stripe size,它指的是每次寫入磁盤的數(shù)據(jù)塊的大小,大小一般為2KB或者512KB甚至更大,size越小,數(shù)據(jù)被分割的次數(shù)就越多.stripe size對(duì)性能是有必定的影響的,在生產(chǎn)環(huán)境中,需要調(diào)整好.
?
RAID1,鏡像化,在RAID1中,數(shù)據(jù)會(huì)被復(fù)制成多份,存儲(chǔ)在多個(gè)磁盤上,如下圖:
若一片數(shù)據(jù)將要被存儲(chǔ),數(shù)據(jù)會(huì)被復(fù)制成多份(取決RAID1的磁盤個(gè)數(shù)),然后存儲(chǔ)到每一個(gè)磁盤上.
?RAID1的優(yōu)毛病:
1)冗余性和數(shù)據(jù)的可靠性最高,只要不是磁盤同時(shí)損壞了,一般都不會(huì)帶來(lái)數(shù)據(jù)喪失的問(wèn)題;
2)RAID1的容量取決容量最小的那個(gè)磁盤,寫入速度也是取決于最小的那個(gè)磁盤,較年夜的磁盤的剩余空間可 ? ? ? 以分區(qū)使用,不會(huì)造成浪費(fèi);
3)RAID1的讀取速率理論上來(lái)說(shuō)是磁盤個(gè)數(shù)的倍數(shù);
4)RAID1必要N塊磁盤才能實(shí)現(xiàn)(N>=2)
5)能夠存儲(chǔ)數(shù)據(jù)的年夜小為min(S1,S2,S3...)
?
RAID3,數(shù)據(jù)類似于RAID0,被條帶化的存儲(chǔ)在多個(gè)磁盤中,數(shù)據(jù)以字節(jié)為單位,與RAID0分歧的是,RAID3單獨(dú)使用了一塊獨(dú)立的磁盤用來(lái)存儲(chǔ)數(shù)據(jù)的奇偶校驗(yàn)值,如下圖所示:
數(shù)據(jù)被切片存儲(chǔ)在Disk0-2上,同時(shí)計(jì)算處奇偶校驗(yàn)值存儲(chǔ)在Disk3上,這樣即使Disk0-2中損壞一塊磁盤,也能根據(jù)奇偶校驗(yàn)值獲得損壞磁盤的數(shù)據(jù).
RAID3的優(yōu)缺點(diǎn):
1.較高的容錯(cuò)才能;
2.不適合寫入操作較多的情景,會(huì)給校驗(yàn)盤帶來(lái)必定的負(fù)載,適合讀取操作較多的應(yīng)用環(huán)境;
3.RAID3必要N塊磁盤(N>=3);
4.能夠存儲(chǔ)數(shù)據(jù)的年夜小為(N-1)*min(S1,S2,S3,S4....).
和RAID3類似,RAID4不是以字節(jié)為存取單元,RAID4的數(shù)據(jù)以塊(一般為512字節(jié))為單元,如下圖:
以塊為單位帶來(lái)的好處就是,減少了奇偶檢驗(yàn)的次數(shù),好比,如果一段數(shù)據(jù)的大小為10個(gè)字節(jié),在RAID3上可能需要計(jì)算2次奇偶檢驗(yàn)值了,但是在RAID4上,10個(gè)字節(jié)都會(huì)被放在第一個(gè)磁盤上,并不需要計(jì)算.
?RAID4的優(yōu)毛病:
1.較高的容錯(cuò)才能;
2.提高了小量數(shù)據(jù)的I/O才能;
3.RAID4必要N塊磁盤(N>=3);
4.能夠存儲(chǔ)數(shù)據(jù)的年夜小為(N-1)*min(S1,S2,S3,S4....).
RAID5可以理解成是RAID0和RAID1的折中方案,把數(shù)據(jù)條帶化后存儲(chǔ),而且將數(shù)據(jù)奇偶檢驗(yàn)值存儲(chǔ)在所有的硬盤上,如下圖:
數(shù)據(jù)被條帶化存儲(chǔ)到了磁盤上,并且每個(gè)磁盤上都能夠存儲(chǔ)奇偶檢驗(yàn)值,其讀寫速度和RAID0差不多,可能寫的時(shí)候要慢一點(diǎn),比擬要計(jì)算奇偶檢驗(yàn),這樣,即使壞掉一塊磁盤,只需要更換上好的磁盤,RAID會(huì)利用剩下奇偶檢驗(yàn)去重建磁盤上的數(shù)據(jù).
?RAID5的優(yōu)毛病:
1)較高的容錯(cuò)才能;
2)讀寫速率快;
3)RAID4必要N塊磁盤(N>=3);
4)能夠存儲(chǔ)數(shù)據(jù)的年夜小為(N-1)*min(S1,S2,S3,S4....).
?
與RAID5類似,只是增加了第二個(gè)獨(dú)立的奇偶檢驗(yàn)信息塊,使用了兩種分歧的奇偶檢驗(yàn)算法,如下圖所示:
數(shù)據(jù)仍然是被條帶化得存儲(chǔ)在磁盤上,但是會(huì)計(jì)算出兩個(gè)獨(dú)立的奇偶查驗(yàn)值,相對(duì)于RAID5來(lái)說(shuō)有更多的I/O操作和計(jì)算量,所以RAID6通常不會(huì)以軟件來(lái)實(shí)現(xiàn),一般會(huì)使用硬件實(shí)現(xiàn),RAID6也是最常見(jiàn)的磁盤陣列.
?RAID6的優(yōu)毛病:
1)較高的容錯(cuò)才能
2)同一RAID6中最多運(yùn)行同時(shí)損壞2塊磁盤,調(diào)換磁盤后,數(shù)據(jù)將被重新計(jì)算寫入;
3)RAID6必要N個(gè)磁盤(N>=4);
4)RAID容量為(N-2)*min(s1,s2,s3,...)
RAID 01是一種混合的磁盤陣列,等于RAID0和RAID1的混合,先做條帶,再做鏡像:
RAID01中,同組RAID0只要出現(xiàn)一個(gè)磁盤損壞,那么這個(gè)RAID 0就不克不及你使用了,值剩下其他組的磁盤運(yùn)作,可靠性較低.
?RAID01的優(yōu)毛病:
1)數(shù)據(jù)靠得住性低
2)RAID01必要N個(gè)磁盤(N>=4)
更多詳情見(jiàn)請(qǐng)繼續(xù)閱讀下一頁(yè)的出色內(nèi)容:
和RAID 01相反,RAID10是先做RAID1,再做RAID0,如下圖所示:
RAID10和RAID01在讀寫速度上沒(méi)有什么太大的差別,但是RAID10的數(shù)據(jù)平安性比較高,若下圖左邊那組RAID1中磁盤損壞了一個(gè),另外一個(gè)也能用,右邊那組RAID1再損壞一個(gè)數(shù)據(jù)也是恢復(fù)的,除非一組RAID1中的磁盤都?jí)牡袅?
?RAID 10的優(yōu)毛病:
1)較高的容錯(cuò)才能
2)RAID10必要N個(gè)磁盤(N>=4)
RAID 50是RAID5和RAID0的組合,先做RAID5,再做RAID0,RAID 5至少必要3顆硬盤,因此要以多組RAID 5構(gòu)成RAID 50,至少必要6顆硬盤,如下圖.
在底層的任意一組或者多組的RAID5中呈現(xiàn)了一個(gè)磁盤的損壞是可以接受的,但是若呈現(xiàn)了2個(gè)或者以上的磁盤損壞,整個(gè)RAID50就會(huì)損壞.
?
RAID50的優(yōu)毛病:
1)較高的容錯(cuò)才能
2)RAID10必要N個(gè)磁盤(N>=6)
Just a Bunch of Disks,能夠?qū)⒍鄩K磁盤的空間合并起來(lái)的一個(gè)持續(xù)的空間,可靠性較低.
?在CentOS中,使用模塊化得對(duì)象mdadm,如果沒(méi)有可以使用:
yum -y install mdadm
命令的語(yǔ)法格式:mdadm [mode] <raiddevice> [options] <component-devices> -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設(shè)備: mdadm -S /dev/md#
舉例:創(chuàng)建一個(gè)可用空間為10G的RAID1設(shè)備,文件系統(tǒng)為ext4,有一個(gè)空閑盤,開(kāi)機(jī)可自動(dòng)掛載至/backup目錄.
先來(lái)分析一下:RAID1為鏡像磁盤陣列,最少必要2個(gè)磁盤,可用空間為10G,即磁盤最小大小為10G即可,我們這里就使用1塊硬盤的不同分區(qū)來(lái)模擬各個(gè)磁盤,每個(gè)10G:
[root@localhost ~]# fdisk -l /dev/sdb Disk /dev/sdb: 128.8 GB, 128849018880 bytes 255 heads, 63 sectors/track, 15665 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xf9b59c0f Device Boot Start End Blocks Id System /dev/sdb1 1 1306 10490413+ 83 Linux /dev/sdb2 1307 2612 10490445 83 Linux /dev/sdb3 2613 3918 10490445 83 Linux
?使用以下命令創(chuàng)立RAID1系統(tǒng),-C為創(chuàng)立模式,/dev/md0設(shè)備文件名,-n 2:使用2個(gè)塊設(shè)備創(chuàng)立此RAID,-x 1:指定1個(gè)空閑盤的,-l:指定硬盤RAID等級(jí),-a yes:自動(dòng)創(chuàng)立RAID的設(shè)備文件,/dev/adb{1,2,3}:指定磁盤位置
[root@localhost ~]# mdadm -C /dev/md0 -n 2 -x 1 -l 1 -c 128 -a yes /dev/sdb{1,2,3} mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
?使用?cat /proc/mdstat 查看RAID構(gòu)建的進(jìn)度和預(yù)期完成的光陰:
unused devices: <none> [root@localhost ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb3[2](S) sdb2[1] sdb1[0] 10482176 blocks super 1.2 [2/2] [UU] [=============>.......] resync = 68.6% (7200128/10482176) finish=0.2min speed=200001K/sec unused devices: <none> [root@localhost ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb3[2](S) sdb2[1] sdb1[0] 10482176 blocks super 1.2 [2/2] [UU] unused devices: <none>
[root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Jul 30 05:16:32 2017 Raid Level : raid1 Array Size : 10482176 (10.00 GiB 10.73 GB) Used Dev Size : 10482176 (10.00 GiB 10.73 GB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Sun Jul 30 05:17:25 2017 State : clean Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : a46c7642:a46e274a:05923aeb:4c1ae0e9 Events : 17 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 18 1 active sync /dev/sdb2 2 8 19 - spare /dev/sdb3
?格局化RAID1為ext4文件系統(tǒng):
[root@localhost ~]# mkfs.ext4 /dev/md0 mke2fs 1.41.12 (17-May-2010) 文件系統(tǒng)標(biāo)簽= 操作系統(tǒng):Linux 塊大小=4096 (log=2) 分塊大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2620544 blocks 131027 blocks (5.00%) reserved for the super user 第一個(gè)數(shù)據(jù)塊=0 Maximum filesystem blocks=2684354560 80 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 正在寫入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 35 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mount /dev/md0 /backup/ [root@localhost ~]# [root@localhost ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/VolGroup-lv_root 51606140 1122252 47862448 3% / tmpfs 953276 0 953276 0% /dev/shm /dev/sda1 495844 33466 436778 8% /boot /dev/mapper/VolGroup-lv_home 67708512 184084 64085020 1% /home /dev/md0 10317624 154100 9639416 2% /backup
?可以使用 -f 將此中的某個(gè)磁盤模擬為壞的故障硬盤
[root@localhost backup]# mdadm /dev/md0 -f /dev/sdb1 mdadm: set /dev/sdb1 faulty in /dev/md0
[root@localhost backup]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Jul 30 05:16:32 2017 Raid Level : raid1 Array Size : 10482176 (10.00 GiB 10.73 GB) Used Dev Size : 10482176 (10.00 GiB 10.73 GB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Sun Jul 30 05:37:02 2017 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : a46c7642:a46e274a:05923aeb:4c1ae0e9 Events : 38 Number Major Minor RaidDevice State 2 8 19 0 active sync /dev/sdb3 1 8 18 1 active sync /dev/sdb2 0 8 17 - faulty /dev/sdb1
?使用 -r 選項(xiàng)可以或許移除壞的硬盤
[root@localhost backup]# mdadm /dev/md0 -r /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0
[root@localhost backup]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Selected partition 4 First cylinder (3919-15665, default 3919): Using default value 3919 Last cylinder, +cylinders or +size{K,M,G} (3919-15665, default 15665): +10G Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: 設(shè)備或資源忙. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)
?咦,有告警!因?yàn)楫?dāng)前的磁盤已經(jīng)有分區(qū)被掛載當(dāng)根文件系統(tǒng)的目錄上了,內(nèi)核沒(méi)有辨認(rèn),我們來(lái)查看/proc/parttions,果真沒(méi)有辨認(rèn)
[root@localhost backup]# cat /proc/partitions major minor #blocks name 8 16 125829120 sdb 8 17 10490413 sdb1 8 18 10490445 sdb2 8 19 10490445 sdb3 8 0 125829120 sda 8 1 512000 sda1 8 2 125316096 sda2 253 0 52428800 dm-0 253 1 4096000 dm-1 253 2 68788224 dm-2 9 0 10482176 md0
[root@localhost backup]# partx -a /dev/sdb
?添加/dev/sdb4到RAID1
[root@localhost backup]# mdadm /dev/md0 -a /dev/sdb4
mdadm: added /dev/sdb4
[root@localhost backup]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Jul 30 05:16:32 2017 Raid Level : raid1 Array Size : 10482176 (10.00 GiB 10.73 GB) Used Dev Size : 10482176 (10.00 GiB 10.73 GB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Sun Jul 30 05:51:52 2017 State : clean Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : a46c7642:a46e274a:05923aeb:4c1ae0e9 Events : 40 Number Major Minor RaidDevice State 2 8 19 0 active sync /dev/sdb3 1 8 18 1 active sync /dev/sdb2 3 8 20 - spare /dev/sdb4
?設(shè)置開(kāi)機(jī)可以自動(dòng)掛載只/backup目錄下,修改配置文件/etc/fstab即可
# # /etc/fstab # Created by anaconda on Fri Jul 28 06:34:35 2017 # # 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 # /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1 UUID=bc67ad74-46b3-4abc-b8a7-c4fb7cd6552a /boot ext4 defaults 1 2 /dev/mapper/VolGroup-lv_home /home ext4 defaults 1 2 /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/md0 /backup ext4 defaults 0 0?
watch -n1 'cat /proc/mdstat'
?
本文永遠(yuǎn)更新鏈接地址:
更多LINUX教程,盡在維易PHP學(xué)院專欄。歡迎交流《LINUX學(xué)習(xí):Linux基礎(chǔ)教程:獨(dú)立硬盤冗余陣列-RAID》!
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/7044.html