RAID簡述和Linux軟RAID配置
PS:僅為課程練習,原理和配置可能有誤,僅供參考,謝謝;
1.RAID功能簡述
RAID,全稱(Redundant Arrays of Inexpensive Disk或Redundant Arrays of Independent Disk),現在一般多用于后面那個稱呼,獨立磁盤冗余陣列。RAID的基礎概念大致是將多個硬盤組合起來,成為一個硬盤陣列。該陣列給用戶的感知,跟之前單獨一個硬盤或邏輯分區一樣,但是卻能大大提高磁盤的冗余性及讀寫IO速度;
由于現在IT行業的快速發展,人們的工作和生活越來越離不開IT互聯網,與之對應產生的是海量的數據;家庭個人如何音頻、視頻,企業方面如何多年累積的業務數據等;特別是一些大中型的互聯網公司,他們經過過年發展積累了海量的數據,如果使用傳統的獨立硬盤進行數據存儲,不僅價格昂貴,而且其冗余性和讀寫速度都不能達到企業級應用的需求;而RAID根據其組合模式的不同,可以提供不同的冗余和數據處理速度加快等功能,給企業及個人提供了多樣化的選擇;
2.RAID的實現方式
RAID的實現方式大致分為三種:
- 軟件RAID,通過系統軟件的方式實現RAID,這種方式沒有硬件可靠,企業級應用不推薦使用;
- 內接式硬件RAID:主板集成RAID控制器,一般是家庭電腦上主板集成的RAID控制卡,用于個人或家庭使用,負載能力一般,不推薦用于企業環境;
- 外接式磁盤陣列控制卡:這是一塊獨立的板卡,由專業的生成廠商生產;將其插在主板的PCI接口;價格雖然較為昂貴,但是可靠性卻大大提升,一般用于企業環境;
硬件RAID需要通過磁盤陣列控制卡的控制實現,RAID(磁盤陣列)控制卡可以看作是一個智能的設備,它擁有自己獨立的CPU和內存,通過集成或借用主板上的SCSI控制器來管理硬盤;RAID控制卡的CPU還有緩存,這使得它在存取速度方面更快,但是斷電后有一定風險丟失數據,所以建議在采購RAID控制卡優先考慮有備用電源的產品型號;
3.RAID的分類
RAID經過多年的發展,已經有好幾種不同的檔次,如RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6。還有混合RAID如何:RAID-7,RAID-10,RAID-50,RAID-60。每種檔次有相應的優缺點,不同的檔次在兩個目標間獲取平衡,分別是增加數據可靠性及磁盤IO讀寫性能;在創建RAID的時候,建議選擇容量相同的磁盤,因為RAID默認會取每個磁盤中最低容量的磁盤為標準進行RAID創建;用戶可以根據自己的實際需求,選擇相應的RAID模式,下面我們來介紹幾種常用RAID之間的特點:
- RAID0:RAI0,又稱為條帶卷;由兩個或兩個以上的磁盤組成,寫入數據時將數據分割塊塊(chunk)分別存入到每個磁盤,因為讀寫都可以并行處理,所以IO速度是RAID中最快的,但是無容錯能力,一旦其中一塊磁盤數據損壞,所有磁盤的數據將會丟失;它的可用空間為N*min(S1,S2,…)。
- RAID1:RAID1,又稱為鏡像卷;由兩個或兩個以上的磁盤組成,如果是兩個磁盤組成RAID1,其中一個作為主盤,另一個作為鏡像盤;數據存入時,在拷貝到主盤的同時,拷貝相應的副本到鏡像盤,這樣當有一個磁盤故障時,由于另一個磁盤數據一模一樣,所以不會影響到數據的正常性;RAID1是各種RAID中容錯力最好的,但是相應的其寫入性能因為要拷貝副本到另外的磁盤可能會導致略有下降,讀取數據時能從多個磁盤進行取數,所以讀取速度會相應提高,磁盤的使用率卻很低,只有組成RAID的磁盤容量的一半;它的可用空間為:1*min(S1,S2,……)。
- RAID5:RAID是RAID0和RAID1的折中方案,它擁有比RAID0更好的容錯力和比RADID更好的讀寫速度和空間利用率;
RAID5最少需要三塊硬盤組成,有容錯能力,RAID5不是對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成RAID5的各個磁盤上,并且奇偶校驗信息和相對應的數據分別存儲于不同的磁盤上,當其中一個磁盤損壞時,可通過其它磁盤的數據和奇偶信息去恢復損壞的數據;RAID5可以理解成是在RAID0的基礎上加了奇偶檢驗功能,所以寫入速度比單獨寫入一塊硬盤的速度略慢;要注意的是,數據塊(chunks)和校驗位必須要按順序即默認為左對稱的方式排放;它的可用空間為:(N-1)*min(S1,S2,……)。
-RAID10:RA10最少由4塊硬盤組成,它的基本原理是,先4塊硬盤兩兩先做成2個RAID1,然后這兩個RAID1陣列再繼續做出RAID0模式;讀寫性能有提升,有容錯能力,前提是不要一組鏡像盤同時故障,如果兩組鏡像盤各壞一個,不會損壞數據;可用空間為:N*min(S1,S2,……)/2。
4.Linux上的軟RAID創建
準備:在linux系統上進行RAID創建時,得先用fdisk或其它分區命令分好相應的分區,并設置成RAID模式(rd);并用partx等其他命令重新掃描系統分區;
4.1 mdadm:這是一個模式化命令,該命令可用于RAID的創建,修改,刪除等功能,支持的RAID級別:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10;
命令格式:mdadm [mode] [option] <compoent-device>
-C:創建模式
-n #:使用#個塊設備來創建此RAID;
-l #:指明要創建的RAID的級別;
-a {yes|no}:自動創建目標RAID設備的設備文件;
-c CHUNK_SIZE:指明塊大小;
-x #:指明空閑盤的個數;
-D:顯示RAID詳細信息
mdadm -D /dev/md#
管理模式:
-f:標記指定磁盤為損壞;
-a:添加磁盤
-r:移除磁盤
-n#:使用#個塊設備來創建此RAID;
4.2 RAID5創建實例
4.2.1 使用mdadm命令,創建一個RAID5這列,要求有一塊空閑盤,塊(chunk)大小為1024KB;
[root@localhost ~]# mdadm /dev/md0 -C -n 3 -x 1 -a yes -c 1024 -l 5 /dev/sdb{8,9,10,11} mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
4.2.2 查看RAID創建進度
[root@localhost ~]# cat /proc/mdstat Personalities : [raid0] [raid6] [raid5] [raid4] md0 : active raid5 sdb10[4] sdb11[3](S) sdb9[1] sdb8[0] 20963328 blocks super 1.2 level 5, 1024k chunk, algorithm 2 [3/2] [UU_] [=====>...............] recovery = 25.3% (2654452/10481664) finish=10.6min speed=12210K/sec unused devices: <none>
4.2.3 查看RAID詳細信息,下面狀態顯示RAID正在建設中,建好后狀態為clean;
[root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Aug 28 22:47:07 2015 Raid Level : raid5 #RAID類型 Array Size : 20963328 (19.99 GiB 21.47 GB) #可用空間 Used Dev Size : 10481664 (10.00 GiB 10.73 GB) #已經使用空間,這是RAID的特性,默認會有(N分之1)的磁盤空間用于存放奇偶校驗數據 Raid Devices : 3 #正在使用的磁盤數量 Total Devices : 4 #全部磁盤數量,包括熱備盤(空閑盤) Persistence : Superblock is persistent Update Time : Fri Aug 28 22:52:34 2015 State : clean, degraded, recovering Active Devices : 2 Working Devices : 4 Failed Devices : 0 Spare Devices : 2 Layout : left-symmetric Chunk Size : 1024K Rebuild Status : 37% complete #陣列創建進度 Name : localhost:0 (local to host localhost) UUID : 7c8befd9:3e9304b6:574c2ee8:5cba5476 Events : 7 #下面信息是RAID里面每個磁盤的詳細信息 Number Major Minor RaidDevice State 0 8 24 0 active sync /dev/sdb8 1 8 25 1 active sync /dev/sdb9 4 8 26 2 spare rebuilding /dev/sdb10 3 8 27 - spare /dev/sdb11
4.2.5 將RAID中的/dev/sdb10人工設置為故障,查看/dev/sdb11空閑盤,是否會頂替上來并同步修復RAID;
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb10 mdadm: set /dev/sdb10 faulty in /dev/md0 [root@localhost ~]# [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Aug 28 22:47:07 2015 Raid Level : raid5 Array Size : 20963328 (19.99 GiB 21.47 GB) Used Dev Size : 10481664 (10.00 GiB 10.73 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Fri Aug 28 23:03:32 2015 State : clean, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 1 Spare Devices : 1 Layout : left-symmetric Chunk Size : 1024K Rebuild Status : 2% complete Name : localhost:0 (local to host localhost) UUID : 7c8befd9:3e9304b6:574c2ee8:5cba5476 Events : 20 Number Major Minor RaidDevice State 0 8 24 0 active sync /dev/sdb8 1 8 25 1 active sync /dev/sdb9 3 8 27 2 spare rebuilding /dev/sdb11 #空閑盤已經頂替故障盤 4 8 26 - faulty /dev/sdb10 #人工設置改磁盤為故障盤成功 [root@localhost ~]#
4.2.6 將故障磁盤從RAID5中移除
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb10 mdadm: hot removed /dev/sdb10 from /dev/md0 [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Aug 28 22:47:07 2015 Raid Level : raid5 Array Size : 20963328 (19.99 GiB 21.47 GB) Used Dev Size : 10481664 (10.00 GiB 10.73 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Fri Aug 28 23:10:43 2015 State : clean, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 1024K Rebuild Status : 49% complete Name : localhost:0 (local to host localhost) UUID : 7c8befd9:3e9304b6:574c2ee8:5cba5476 Events : 28 #sdb10已從RAID中移除 Number Major Minor RaidDevice State 0 8 24 0 active sync /dev/sdb8 1 8 25 1 active sync /dev/sdb9 3 8 27 2 spare rebuilding /dev/sdb11
4.2.7 使用watch命令以1秒為頻率,刷新查看RAID建設進度;
[root@localhost ~]# watch -n1 'cat /proc/mdstat' # -n:該參數可設置刷新頻率,我這里是每一秒刷新一次 Every 1.0s: cat /proc/mdstat Fri Aug 28 23:13:43 2015 Personalities : [raid0] [raid6] [raid5] [raid4] md0 : active raid5 sdb11[3] sdb9[1] sdb8[0] 20963328 blocks super 1.2 level 5, 1024k chunk, algorithm 2 [3/2] [UU_] [=============>.......] recovery = 69.8% (7325076/10481664) finish=4.2min speed=12276K/sec unused devices: <none> Every 1.0s: cat /proc/mdstat Fri Aug 28 23:13:54 2015 Personalities : [raid0] [raid6] [raid5] [raid4] md0 : active raid5 sdb11[3] sdb9[1] sdb8[0] 20963328 blocks super 1.2 level 5, 1024k chunk, algorithm 2 [3/2] [UU_] [==============>......] recovery = 71.1% (7457696/10481664) finish=4.1min speed=12246K/sec unused devices: <none> Every 1.0s: cat /proc/mdstat Fri Aug 28 23:14:02 2015 Personalities : [raid0] [raid6] [raid5] [raid4] md0 : active raid5 sdb11[3] sdb9[1] sdb8[0] 20963328 blocks super 1.2 level 5, 1024k chunk, algorithm 2 [3/2] [UU_] [==============>......] recovery = 71.9% (7540228/10481664) finish=4.0min speed=12071K/sec unused devices: <none>
4.2.8 將創建后的RAID5陣列格式化為ext4文件系統,標簽為backup,并將其開機掛載至/backup目錄;
[root@localhost ~]# mke2fs -t ext4 -L 'backup' /dev/md0 #格式為ext4,并設置標簽為backup mke2fs 1.41.12 (17-May-2010) 文件系統標簽=backup 操作系統:Linux 塊大小=4096 (log=2) 分塊大小=4096 (log=2) Stride=256 blocks, Stripe width=512 blocks 1310720 inodes, 5240832 blocks 262041 blocks (5.00%) reserved for the super user 第一個數據塊=0 Maximum filesystem blocks=0 160 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 正在寫入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 ~]# blkid /dev/md0 /dev/md0: LABEL="backup" UUID="659e5e0a-2c9f-4594-ab0d-79f2fa4bc21a" TYPE="ext4" [root@localhost ~]# mkdir /backup [root@localhost ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Sat Jun 6 17:46:53 2015 # # 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=d9a42d69-b340-4919-a77c-f1558e13df64 / ext4 defaults 1 1 UUID=a8e05a48-5d7c-46ad-bcd8-f7f4e1f7d108 /boot ext4 defaults 1 2 UUID=6951543d-8f16-421e-a71d-f309de85ebeb /home ext4 defaults 1 2 UUID=02a750c9-4a3c-4579-a2f0-4c4ce05806bc /myshare ext4 defaults 1 2 UUID=6835964f-44e4-4cdb-9a06-678484a11eeb 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 UUID=659e5e0a-2c9f-4594-ab0d-79f2fa4bc21a /backup ext4 defaults 0 0 ~ ~ :wq [root@localhost /]# mount -a [root@localhost /]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.5G 4.2G 4.9G 46% / tmpfs 250M 72K 250M 1% /dev/shm /dev/sda1 93M 26M 63M 29% /boot /dev/sda3 3.8G 8.6M 3.6G 1% /home /dev/sr0 3.8G 3.8G 0 100% /media/cdrom /dev/md0 20G 44M 19G 1% /backup #已經掛載上
4.2.9 刪除RAID
[root@localhost /]# umount /dev/md0 #1、首先取消掛載 [root@localhost /]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.5G 4.2G 4.9G 46% / tmpfs 250M 72K 250M 1% /dev/shm /dev/sda1 93M 26M 63M 29% /boot /dev/sda3 3.8G 8.6M 3.6G 1% /home /dev/sr0 3.8G 3.8G 0 100% /media/cdrom [root@localhost /]# mdadm -S /dev/md0 #2、停止RAID,可以發現已經沒有md0了 mdadm: stopped /dev/md0 [root@localhost /]# mdadm -D /dev/md0 mdadm: cannot open /dev/md0: No such file or directory [root@localhost /]# cat /proc/mdstat Personalities : [raid0] [raid6] [raid5] [raid4] unused devices: <none> [root@localhost /]# ls /dev | grep md md
原創文章,作者:Net21_仲樂,如若轉載,請注明出處:http://www.www58058.com/24534
寫的很好,排版也很漂亮,加油
@馬哥教育:3Q