測試機centos6.7 x86_64
一、RAID是什么
簡單描述:RAID(Redundant Array of indenpensive Disk)獨立磁盤冗余陣列:磁盤陣列是把多個磁盤組成一個陣列,當作單一磁盤使用,它將數據以分段或條帶(striping)的方式儲存在不同的磁盤中,存取數據時,陣列中的相關磁盤一起動作,大幅減低數據的存取時間,同時有更佳的空間利用率。磁盤陣列利用不同的技術,稱為RAID level,不同的level針對不同的系統及應用,以解決數據安全的問題。簡單來說,RAID把多個磁盤組成一個邏輯扇區,因此,操作系統只會把他當作一個硬盤。
二、RAID優缺點
優點:
1、提高傳輸速率。RAID通過多個磁盤上同時存儲和讀取數據來大幅提高存儲系統的數據吞吐量(Throughput)。在RAID中,可以讓很多磁盤驅動器同時傳輸數據,而這些磁盤驅動器在邏輯上又是一個磁盤驅動器,所以使用RAID可以單個磁盤驅動器的幾倍、幾十倍甚至上百倍的速率。這也是RAID最初想要解決的問題。因為當時CPU的速度增長很快,而磁盤驅動器的數據傳輸速率無法大幅提高,所以需要有一種方案解決兩者之間的矛盾。RAID最后成功了。
2、通過數據校驗提供容錯功能。普通磁盤驅動器無法提供容錯功能,如果不包括寫在磁盤上的CRC(循環冗余校驗)碼的話。RAID容錯是建立在每個磁盤驅動器的硬件容錯功能之上的,所以它提供更高的安全性。在很多RAID中都有較為完備的相互校驗/恢復的措施,甚至是直接相互的鏡像備份,從而大大提高了RAID系統的容錯度,提高了系統的穩定冗余性。
缺點:
1、做不同的RAID,有RAID模式磁盤利用率低,價格昂貴。
2、RAID0沒有冗余功能,如果有一個磁盤(物理)損壞,則所有的數據都無法使用。
3、RAID1磁盤利用率只有50%,是所有RAID級別中最低的。
4、RAID5可以理解為是RAID0和RAID1的折中方案。RAID5可以為系統提供數據安全保障,但保障程度要比RAID1低而磁盤空間利用率要比RAID1高。
三、RAID樣式
外接式磁盤陣列柜:最常被使用大型服務器上,具有熱抽換(Hot Swap)的特性,不過價格都很貴。
內接式磁盤陣列卡:因為價格便宜,但需要較高的安裝技術,適合技術人員操作。
利用軟件來仿真:由于會拖累機器的速度,不適合大數據流量的服務器。
四、RAID分類
1、RAID 0 被稱為條帶盤 — 需要2塊以上的磁盤,成本低,可以提高整個磁盤的性能和吞吐量。我們通過名字來想象:RAID 0 通過把文件切割之后把數據像一條帶子一樣平鋪在每個磁盤之上。由于文件的數據分布在每個磁盤上,所以其中一個磁盤出現問題的時候,文件就會由于缺失了某部分而損壞。并且RAID 0 不提供冗余所以不需要額外使用空間來存儲校驗碼,所以磁盤空間都可以用作存儲文件。并且磁盤的實際容量體現為木桶理論(最小的水平決定整體的水平)。假如有4個磁盤,分別為320G,500G,1T,2T。則實際容量為(最小容量的磁盤乘以硬盤數量),即320G*4。讀寫性能由于磁頭數電費增加,所以讀寫的時候磁頭之間可以實現分工合作。所以讀寫性能提升。
2、RAID 1 磁盤鏡像盤 — 數據在寫入一塊磁盤的同時,會在另外一塊閑置的磁盤上生成鏡像文件mirroring(鏡像卷),至少需要兩塊磁盤,RAID大小等于兩個RAID分區中最小的容量(最好兩個磁盤的容量一樣),可增加熱備盤提供一定的備份能力;數據有冗余,在存儲時同時寫入兩塊磁盤,實現了數據備份;但相對降低了寫入性能,但是讀取數據時可以并發,幾乎類似于raid-0的讀取效率;
3、RAID 3 奇偶校驗碼的并行傳送 — 只能查錯不能糾錯;
4、RAID 4 帶奇偶校驗碼的獨立磁盤結構 — 對數據的訪問是按數據塊進行的,也就是按磁盤進行的,RAID 3 是一次一橫條,而RAID 4 一次一豎條;
5、RAID 5 分布式奇偶校驗的獨立磁盤結構:需要至少三塊或以上磁盤,可以提供熱備盤實現故障的恢復;采用奇偶校驗,可靠性強,且只有同時損壞兩塊磁盤時數據才會完全損壞,至損壞一塊硬盤時,系統會根據存儲的奇偶校驗位重建數據,臨時提供服務;此時如果有熱備盤,系統還會自動在熱備盤上重建故障磁盤上的數據;
6、RAID 6 帶有兩種分布式存儲的奇偶校驗碼的獨立磁盤結構,在RAID 5 的基礎上進行改進,通過加入增加校驗塊,而有更好的容錯能力。由于整體的磁盤數量增加,所以讀取速率提升;但是由于寫入數據時不僅要寫入文件數據,還要計算并寫入兩個校驗塊,所以寫入速率性能下降;并且由于增加了一位校驗塊,RAID控制器要求更加復雜,所以在數據安全和磁盤性能中進行取舍,RAID 5 更受歡迎。實際的磁盤空間為:最小的磁盤容量*(磁盤數量-2)
7、RAID 7 優化的高速數據傳送磁盤結構 — 高速緩沖存儲器:這是一種新的RAID標準,其本身帶有智能化實時操作系統和用于存儲管理的軟件工具,可完全獨立于主機運行,不占用主機CPU資源,RAID 7 可以看作是一種存儲計算機(Strage Computer),它與其他RAID標準有明顯區別。
8、RAID 1+0 高可靠性于高效磁盤結構
9、RAID 0+1 高效率與高性能磁盤結構、
RAID 1+0 與 RAID 0+1 的區別:RAID 1+0 是先鏡像在分區數據,再將所有硬盤分為兩組,視為RAID 0 的最低組合,然后將這兩組各自視為RAID 1 運作。RAID 0+1 則是跟RAID 1+0 的程序相反,是先分區再將數據鏡射到兩組磁盤。它將所有磁盤分為兩組,變成RAID 1 的最低組合,而將兩組磁盤各自視為RAID 0 運作。性能上,RAID 0+1比RAID 1+0 有著更快的讀寫速度??煽啃陨希擱AID 1+0 有一個磁盤受損,其余三個硬盤會繼續運作。RAID 0+1 只要有一個硬盤受損,同組RAID 0的另一只磁盤亦會停止運作,只剩下兩個硬盤運作,可靠性較低。因此,RAID 10 遠較RAID 01常用,零售主板絕大部分支持RAID 0/1/5/10,但不支持RAID 01。
五、常見RAID總結
RAID Level | 性能提升 | 冗余能力 | 空間利用率 | 磁盤數量(塊) |
RAID 0 | 讀、寫提升 | 無 | 100% | 至少2 |
RAID 1 | 讀性能提升,寫性能下降 | 有 | 50% | 至少2 |
RAID 5 | 讀、寫提升 | 有 | (n-1)/n% | 至少3 |
RAID 1+0 | 讀、寫提升 | 有 | 50% | 至少4 |
RAID 0+1 | 讀、寫提升 | 有 | 50% | 至少4 |
RAID 5+0 | 讀、寫提升 | 有 | (n-2)/n% | 至少6 |
六、mdadm工具介紹
簡介:mdadm (multiple devices admin)是linux下標準的軟raid管理工具,是一個模式化工具(在不同的模式下);程序工作再內存用戶程序區,為用戶提供RAID接口來操作內核的模塊,實現各種功能。
###查看: [root@mail ~]# uname -r 2.6.32-573.el6.x86_64 [root@mail ~]# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch Distributor ID: CentOS Description: CentOS release 6.7 (Final) Release: 6.7 Codename: Final [root@mail ~]# rpm -qa mdadm mdadm-3.3.2-5.el6.x86_64 ###mdadm命令基本語法 mdadm [mode] <raiddevice> [options] <component-devices>
目前支持的模式
LINEAR(線性模式)、RAID0(striping條帶模式)、RAID1(mirroring)、 RAID-4、RAID-5、 RAID-6、 RAID-10、 MULTIPATH和FAULTY
LINEAR:線性模式,該模式不是raid的標準模式,其主要作用是可以實現將幾塊小的硬盤組合為一塊大硬盤來使用,數組存儲時一次存滿一個硬盤在使用下一個硬盤,對上層來說操作的是一個大硬盤。
主要模式(7種)
-
Assemble:裝配模式:加入一個以前定義的陣列,可以正在使用陣列或從其他主機移出的陣列
-
Build: 創建:創建一個沒有超級塊的陣列
-
Create: 創建一個新的陣列,每個設備具有超級塊
-
Follow or Monitor: 監控RAID的狀態,一般只對RAID-1/4/5/6/10等有冗余功能的模式來使用
-
Grow:(Grow or shrink) 改變RAID的容量或陣列中的設備數目;收縮一般指的是數據收縮或重建
-
Manage: 管理陣列(如添加spare盤和刪除故障盤)
-
Incremental Assembly:添加一個設備到一個適當的陣列
-
Misc: 允許單獨對陣列中的某個設備進行操作(如抹去superblocks 或停止陣列)
-
Auto-detect: 此模式不作用于特定的設備或陣列,而是要求在Linux內核啟動任何自動檢測到的陣列
#主要選項:(Options for selecting a mode) -A, --assemble:加入并開啟一個以前定義的陣列 -B, --build:創建一個沒有超級塊的陣列(Build a legacy array without superblocks) -C, --create:創建一個新的陣列 -F, --follow,--monitor:選擇監控(Monitor)模式 -G, --grow:改變激活陣列的大小或形態 -I, --incremental:添加一個單獨的設備到合適的陣列,并可能啟動陣列 --auto-detect:請求內核啟動任何自動檢測到的陣列 #創建模式 -C --create:創建一個新的陣列 專用選項: -l:級別 -n #:設備個數 -a {yes|no}:是否自動為其創建設備文件 -c:CHUNK大小,2^n,默認為64K -x #:指定空閑盤個數 #管理模式 -a --add:添加列出的設備到一個工作的陣列中;當陣列出于降級狀態(故障狀態),你添加一個設備,該設備將作為備用設備并且再該備用設備上開始數據重建 -f --fail:將列出的設備標記為faulty狀態,標記后就可以移除設備:(可以作為故障恢復的測試手段) -r --remove:從陣列中移除列出的設備,并且該設備不能出于活動狀態(是冗余盤或故障盤) #監控模式 -F --follow,--monitor:選擇監控(Monitor)模式 -m --mail:設置一個mail地址,在報警時給該mail發信;該地址可寫入conf文件,在啟動陣列時生效 -p --program,--alert:當檢測到一個事件時運行一個指定的程序 -y --syslog:設置所有的事件記錄于syslog中 -t --test:給啟動時發現的每個陣列生成test警告信息;該信息傳遞給mail或報警程序;(以此來測試報警信息是否能正確接收) #增長模式 -G --grow:改變激活陣列的大小或形態 -n --raid-devices=:指定陣列中活動的device數目,不包括spare磁盤,這個數目只能由--grow修改 -x --spare-devices=:指定初始陣列的冗余device數目即spare device數目 -c --chunk:Specify chunk size of kibibytes.缺省為64.chunk-size是一個重要的參數,決定了一次向陣列中每個磁盤寫入數據的量 (Chunk :,可以理解為raid分儲數據時每個數據段的大?。ㄍǔ?2/64/128等這類數字大?。?;合理的選擇chunk大小非常重要,若chunk過大可能一塊磁盤上的帶區空間就可以滿足大部分的I/O操作,使得數據的讀寫只局限于一塊硬盤上,這便不能充分發揮RAID并發的優勢;如果chunk設置過小,任何很小的I/O指令都 可能引發大量的讀寫操作,不能良好發揮并發性能,占用過多的控制器總線帶寬,也影響了陣列的整體性能。所以,在創建帶區時,我們應該根據實際應用的需要,合理的選擇帶區大小。) -z --size=:組建RAID1/4/5/6后從每個device獲取的空間總數;但是大小必須為chunk的倍數,還需要在每個設備最后給RAID的superblock留至少128KB的大小。 --rounding=: Specify rounding factor for linear array (==chunk size) -l --level=: 設定 raid level.raid的幾倍 --create: 可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp. --build: 可用:linear, raid0, 0, stripe. -p --layout=:設定raid5 和raid10的奇偶校驗規則;并且控制故障的故障模式;其中RAID-5的奇偶校驗可以在設置為::eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省為left-symmetric --parity: 類似于--layout= --assume-clean:目前僅用于 --build 選項 -R --run: 陣列中的某一部分出現在其他陣列或文件系統中時,mdadm會確認該陣列。此選項將不作確認。 -f --force: 通常mdadm不允許只用一個device 創建陣列,而且此時創建raid5時會使用一個device作為missing drive。此選項正相反 -N --name=: 設定陣列的名稱 #裝配模式 -A, --assemble: 加入并開啟一個以前定義的陣列 #MISC模式選項 -Q, --query: 查看一個device,判斷它為一個 md device 或是 一個 md 陣列的一部分 -D, --detail: 打印一個或多個md device 的詳細信息 -E, --examine:打印 device 上的 md superblock 的內容 #查看RAID陣列的詳細信息 mdadm -D /dev/md# --detail 停止陣列 #停止RAID陣列 mdadm -S /dev/md# --stop #開啟RAID陣列 mdadm -A /dev/md# --start #其他選項 -c, --config=: 指定配置文件,缺省為 /etc/mdadm.conf -s, --scan: 掃描配置文件或 /proc/mdstat以搜尋丟失的信息。默認配置文件:/etc/mdadm.conf -h, --help: 幫助信息,用在以上選項后,則顯示該選項信息 -v, --verbose: 顯示細節,一般只能跟 --detile 或 --examine一起使用,顯示中級的信息 -b, --brief: 較少的細節。用于 --detail 和 --examine 選項 --help-options: 顯示更詳細的幫助 -V, --version: 版本信息 -q,--quit: 安靜模式;加上該選項能使mdadm不顯示純消息性的信息,除非那是一個重要的報告
七、創建RAID
1、直接使用硬盤硬件設備,不需要分區。 創建一個RAID 0設備: mdadm --create /dev/md0 --level=0 --chunk=32 --raid-devices=3 /dev/sd[b-d] 創建一個RAID 1設備: mdadm -C /dev/md0 -l1 -c128 -n2 -x1 /dev/sd[b-d] 創建一個RAID 5設備: mdadm -C /dev/md0 -l5 -n5 /dev/sd[c-g] -x1 /dev/sdb 創建一個RAID 6設備: mdadm -C /dev/md0 -l6 -n5 /dev/sd[c-g] -x2 /dev/sdb /dev/sdh 創建一個RAID 10設備: mdadm -C /dev/md0 -l10 -n6 /dev/sd[b-g] -x /dev/sdh 創建一個RAID1+0設備(雙層架構): mdadm -C /dev/md0 -l1 -n2 /dev/sdb /dev/sdc mdadm -C /dev/md1 -l1 -n2 /dev/sdd /dev/sde mdadm -C /dev/md2 -l1 -n2 /dev/sdf /dev/sdg mdadm -C /dev/md3 -l0 -n3 /dev/md0 /dev/md1 /dev/md2 2、如果要具體使用那個硬盤的分區來做RAID,才需要fdisk特定的分區,并給他指定分區類型:fd 具體過程如下: 1)、分區 # fdisk /dev/sda 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) e Selected partition 4 First cylinder (1632-26108, default 1632): Using default value 1632 Last cylinder, +cylinders or +size{K,M,G} (1632-26108, default 26108): Using default value 26108 Command (m for help): n First cylinder (1632-26108, default 1632): Using default value 1632 Last cylinder, +cylinders or +size{K,M,G} (1632-26108, default 26108): +5G Command (m for help): n First cylinder (2286-26108, default 2286): Using default value 2286 Last cylinder, +cylinders or +size{K,M,G} (2286-26108, default 26108): +5G Command (m for help): n First cylinder (2940-26108, default 2940): Using default value 2940 Last cylinder, +cylinders or +size{K,M,G} (2940-26108, default 26108): +5G Command (m for help): n First cylinder (3594-26108, default 3594): Using default value 3594 Last cylinder, +cylinders or +size{K,M,G} (3594-26108, default 26108): +5G Command (m for help): t Partition number (1-7): 5 Hex code (type L to list codes): fd Changed system type of partition 5 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-7): 6 Hex code (type L to list codes): fd Changed system type of partition 6 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-7): 7 Hex code (type L to list codes): fd Changed system type of partition 7 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-8): 8 Hex code (type L to list codes): fd Changed system type of partition 8 to fd (Linux raid autodetect) ##這里只是舉個例子,其它類似!特別說明:再fdisk分區后需要將分區標志改為Linux raid auto類型。 # fdisk -l| grep sd (最終效果) Disk /dev/sda: 214.7 GB, 214748364800 bytes /dev/sda1 * 1 103 819200 83 Linux /dev/sda2 103 1377 10240000 83 Linux /dev/sda3 1377 1632 2048000 82 Linux swap / Solaris /dev/sda4 1632 26108 196604286 5 Extended /dev/sda5 1632 2285 5246007 fd Linux raid autodetect /dev/sda6 2286 2939 5253223+ fd Linux raid autodetect /dev/sda7 2940 3593 5253223+ fd Linux raid autodetect /dev/sda8 3594 4247 5253223+ fd Linux raid autodetect # kpartx -af /dev/sda # partx -a /dev/sda 2)、建立磁盤陣列 [root@mail soft]# mdadm -C /dev/md0 -a yes -l 5 -n 3 /dev/sda{5,6,7} mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. #-C:創建一個陣列,后跟陣列名稱 #-a:表示自動創建 #-l:指定陣列級別 #-n:指定陣列中活動devices的數目 3)、查看RAID5陣列 #watch cat /proc/mdstat ##查看磁盤同步情況 # cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sda7[3] sda6[1] sda5[0] #第一行 10483712 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] #第二行 unused devices: <none> #第一行是MD設備名稱md0,active和inactive選項表示陣列是否能讀/寫,接著是陣列的RAID級別RAID 5,后面是屬于陣列的塊設備,方括號[]里的數字表示設備再陣列中的序號,(S)表示其是熱備盤,(F)表示這個磁盤是faulty狀態。 #第二行是陣列的大小,用塊數來表示;后面有chunk-size的大小,然后是layout類型,不同RAID級別的layout類型不同,[3/3] [UUU]表示陣列有3個磁盤并且3個磁盤都是正常運行的,若是[2/3]和[UU]表示陣列有3個磁盤中2個是正常運行的,下劃線對應的那個位置的磁盤是faulty(錯誤)狀態的。 4)、查看RAID 5的詳細信息 # mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Feb 1 13:58:13 2016 Raid Level : raid5 Array Size : 10483712 (10.00 GiB 10.74 GB) Used Dev Size : 5241856 (5.00 GiB 5.37 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Mon Feb 1 14:01:52 2016 State : clean Active Devices : 3 ?;顒拥脑O備 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K ?。祿K大小 Name : mail.bjwf.com:0 (local to host mail.bjwf.com) UUID : bec67e95:105bc368:092dafe4:d0ad43bc Events : 18 Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 3 8 7 2 active sync /dev/sda7 5)、格式化 # mke2fs -t ext4 -b 4096 -L myraid5 /dev/md0 mke2fs 1.41.12 (17-May-2010) Filesystem label=myraid5 OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=128 blocks, Stripe width=256 blocks 655360 inodes, 2620928 blocks 131046 blocks (5.00%) reserved for the super user First data block=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 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 29 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. #-t:指定文件系統類型 #-b:表示塊大小有三種類型分別為 1024/2048/4096 6)、掛載并查看 # mkdir /myraid5 # mount /dev/md0 /myraid5 # cd /myraid5 # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.5G 6.6G 2.5G 73% / tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/sda1 772M 39M 693M 6% /boot /dev/md0 9.8G 23M 9.2G 1% /myraid5吧 #新分區 7)、開機自動掛載 # # /etc/fstab # Created by anaconda on Sat Dec 5 05:19:21 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=67de25d3-6b6c-469e-b25f-63f6640a162e / ext4 defaults 1 1 UUID=c984f67e-5ac8-4278-9b8a-fd3541df0599 /boot ext4 defaults 1 2 UUID=4fa33c13-d828-42ac-80ed-66577ae37ca8 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 /myraid5 ext4 defaults 0 0 # mount -a # mount /dev/sda2 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/md0 on /myraid5 type ext4 (rw) #已經掛載上了 8)、生成mdadm的配置文件 /etc/mdadm.conf作為默認的配置文件,主要作用是為了方便的跟蹤軟RAID的配置,尤其是可以配置監控和事件上報選項。Assemble命令也可以使用--config(或者其縮寫)來指定配置文件。我們通常可以如下命令來建立配置文件。 # echo DEVICE /dev/sd[b-h] /dev/sd[i-k]1 > /etc/mdadm.conf # mdadm -Ds >>/etc/mdadm.conf # cat /etc/mdadm.conf DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi1 /dev/sdj1 /dev/sdk1 ARRAY /dev/md1 level=raid0 num-devices=3 UUID=dcff6ec9:53c4c668:58b81af9:ef71989d ARRAY /dev/md0 level=raid10 num-devices=6 spares=1 UUID=0cabc5e5:842d4baa:e3f6261b:a17a477a #使用配置文件啟動陣列時,mdadm會查詢配置文件中的設備和陣列內容,然后啟動運行所有能運行RAID陣列。如果指定陣列的設備名字,則只啟動對應的陣列。
八、RAID的管理
1、給raid-5新增一個space(空)盤,添加磁盤到陣列中做備用盤(space) # mdadm -a /dev/md0 /dev/sda8 mdadm: added /dev/sda8 [root@mail myraid5]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sda8[4](S) sda7[3] sda6[1] sda5[0] 10483712 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> # mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Feb 1 13:58:13 2016 Raid Level : raid5 Array Size : 10483712 (10.00 GiB 10.74 GB) Used Dev Size : 5241856 (5.00 GiB 5.37 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Mon Feb 1 14:48:10 2016 State : clean Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Name : mail.bjwf.com:0 (local to host mail.bjwf.com) UUID : bec67e95:105bc368:092dafe4:d0ad43bc Events : 19 Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 3 8 7 2 active sync /dev/sda7 4 8 8 - spare /dev/sda8 #備用盤 2、模擬硬盤故障 # mdadm -f /dev/md0 /dev/sda5 mdadm: set /dev/sda5 faulty in /dev/md0 # cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sda8[4] sda7[3] sda6[1] sda5[0](F) 10483712 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU] [>....................] recovery = 3.5% (185844/5241856) finish=4.0min speed=20649K/sec ##正在同步 unused devices: <none> # mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Feb 1 13:58:13 2016 Raid Level : raid5 Array Size : 10483712 (10.00 GiB 10.74 GB) Used Dev Size : 5241856 (5.00 GiB 5.37 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Mon Feb 1 14:52:34 2016 State : clean, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 1 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Rebuild Status : 19% complete #同步到19% Name : mail.bjwf.com:0 (local to host mail.bjwf.com) UUID : bec67e95:105bc368:092dafe4:d0ad43bc Events : 24 Number Major Minor RaidDevice State 4 8 8 0 spare rebuilding /dev/sda8 #重建RAID 5 1 8 6 1 active sync /dev/sda6 3 8 7 2 active sync /dev/sda7 0 8 5 - faulty /dev/sda5 # mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Feb 1 13:58:13 2016 Raid Level : raid5 Array Size : 10483712 (10.00 GiB 10.74 GB) Used Dev Size : 5241856 (5.00 GiB 5.37 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Mon Feb 1 14:55:55 2016 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : mail.bjwf.com:0 (local to host mail.bjwf.com) UUID : bec67e95:105bc368:092dafe4:d0ad43bc Events : 38 Number Major Minor RaidDevice State 4 8 8 0 active sync /dev/sda8 #已經同步完成 1 8 6 1 active sync /dev/sda6 3 8 7 2 active sync /dev/sda7 0 8 5 - faulty /dev/sda5 ?。9收媳P 3、熱移除故障的硬盤 # mdadm -r /dev/md0 /dev/sda5 mdadm: hot removed /dev/sda5 from /dev/md0 #移除sda5 # mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Feb 1 13:58:13 2016 Raid Level : raid5 Array Size : 10483712 (10.00 GiB 10.74 GB) Used Dev Size : 5241856 (5.00 GiB 5.37 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Mon Feb 1 14:57:33 2016 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : mail.bjwf.com:0 (local to host mail.bjwf.com) UUID : bec67e95:105bc368:092dafe4:d0ad43bc Events : 39 Number Major Minor RaidDevice State 4 8 8 0 active sync /dev/sda8 1 8 6 1 active sync /dev/sda6 3 8 7 2 active sync /dev/sda7 4、停止RAID # mdadm -S /dev/md0 #停止RAID mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group? #上面的錯誤告訴我們磁盤陣列正在使用中不能停止,我們得先寫在RAID再停止 # umount /dev/md0 umount: /myraid5: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) #在/myraid5文件目錄中,所以也不行 # cd # umount /dev/md0 #卸載md0 # mdadm -S /dev/md0 #停止RAID mdadm: stopped /dev/md0 #停止完成 # mount #可以看到md0已經不在 /dev/sda2 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) 5、開啟RAID并掛載 # mdadm -A /dev/md0 /dev/sda[6-8] #開啟RAID mdadm: /dev/md0 has been started with 3 drives. # mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Feb 1 13:58:13 2016 Raid Level : raid5 Array Size : 10483712 (10.00 GiB 10.74 GB) Used Dev Size : 5241856 (5.00 GiB 5.37 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Mon Feb 1 15:00:03 2016 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : mail.bjwf.com:0 (local to host mail.bjwf.com) UUID : bec67e95:105bc368:092dafe4:d0ad43bc Events : 39 Number Major Minor RaidDevice State 4 8 8 0 active sync /dev/sda8 1 8 6 1 active sync /dev/sda6 3 8 7 2 active sync /dev/sda7 # cat /proc/mdstat #查看RAID Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sda8[4] sda7[3] sda6[1] 10483712 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> # mount /dev/md0 /myraid5/ #掛載 # ls /myraid5/ #查看 lost+found 6、刪除RAID # umount /dev/md0 #卸載md0 # mount | grep myraid5 #查看卸載成功與否 # mdadm -Ss /dev/md0 #停止raid mdadm: stopped /dev/md0 # mdadm --zero-superblock /dev/sda[5-8] # --zero-superblock 加上該選項時,會判斷如果該陣列是否包含一個有效的陣列超級塊,若有則將該超級塊中陣列信息抹除 # rm -rf /etc/mdadm.conf #刪除RAID配置文件
九、RAID優化
設定良好的stripe值,可以再后期使用時,減少寫入數據時對數據塊計算的負擔,從而提高RAID性能;
# mk2fs -j -b 4096 -E stripe=16 /dev/md0 # 設置時,需要用-E選項進行擴展
十、RAID監控
配置每300秒mdadm監控進程查詢MD設備一次,當陣列出現錯誤,會發送郵件給指定的用戶,執行事件處理程序并且記錄上報的事件到系統的日志文件。使用–daemonise參數,使程序持續再后臺運行。如果要發送郵件需要postfix程序運行,當郵件地址被配置為外網地址應先測試是否能發送出去。
# mdadm --monitor --mail=root@localhost --program=/root/md.sh --syslog --delay=300 /dev/md0 --daemonise 3305 # mdadm -f /dev/md0 /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 # mdadm -f /dev/md0 /dev/sd sda sda1 sda2 sda3 sda4 sda5 sdb sdc sdd sde sdf sdg sdh sdi # mdadm -f /dev/md0 /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 # mdadm -D /dev/md0 /dev/md0: Version : 0.90 Creation Time : Thu Jun 27 21:54:21 2013 Raid Level : raid5 Array Size : 41942912 (40.00 GiB 42.95 GB) Used Dev Size : 20971456 (20.00 GiB 21.47 GB) Raid Devices : 3 Total Devices : 4 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Thu Jun 27 22:03:48 2013 State : clean, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 1 Spare Devices : 1 Layout : left-symmetric Chunk Size : 64K Rebuild Status : 27% complete UUID : c7b98767:dbe2c944:442069fc:23ae34d9 Events : 0.4 Number Major Minor RaidDevice State 3 8 64 0 spare rebuilding /dev/sde 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 4 8 16 - faulty spare /dev/sdb # tail –f /var/log/messages Jun 27 22:03:48 localhost kernel: --- rd:3 wd:2 fd:1 Jun 27 22:03:48 localhost kernel: disk 0, o:1, dev:sde Jun 27 22:03:48 localhost kernel: disk 1, o:1, dev:sdc Jun 27 22:03:48 localhost kernel: disk 2, o:1, dev:sdd Jun 27 22:03:48 localhost kernel: md: syncing RAID array md0 Jun 27 22:03:48 localhost kernel: md: minimum _guaranteed_ reconstruction speed: 1000 KB/sec/disc. Jun 27 22:03:48 localhost kernel: md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for reconstruction. Jun 27 22:03:49 localhost kernel: md: using 128k window, over a total of 20971456 blocks. Jun 27 22:03:48 localhost mdadm[3305]: RebuildStarted event detected on md device /dev/md0 Jun 27 22:03:49 localhost mdadm[3305]: Fail event detected on md device /dev/md0, component device /dev/sdb # mail Mail version 8.1 6/6/93. Type ? for help. "/var/spool/mail/root": 4 messages 4 new >N 1 logwatch@localhost.l Wed Jun 12 03:37 43/1629 "Logwatch for localhost.localdomain (Linux)" N 2 logwatch@localhost.l Wed Jun 12 04:02 43/1629 "Logwatch for localhost.localdomain (Linux)" N 3 logwatch@localhost.l Thu Jun 27 17:58 43/1629 "Logwatch for localhost.localdomain (Linux)" N 4 root@localhost.local Thu Jun 27 22:03 32/1255 "Fail event on /dev/md0:localhost.localdomain" & 4 Message 4: From root@localhost.localdomain Thu Jun 27 22:03:49 2013 Date: Thu, 27 Jun 2013 22:03:49 +0800 From: mdadm monitoring <root@localhost.localdomain> To: root@localhost.localdomain Subject: Fail event on /dev/md0:localhost.localdomain This is an automatically generated mail message from mdadm running on localhost.localdomain A Fail event had been detected on md device /dev/md0. It could be related to component device /dev/sdb. Faithfully yours, etc. P.S. The /proc/mdstat file currently contains the following: Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd[2] sde[3] sdc[1] sdb[4](F) 41942912 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU] [>....................] recovery = 0.9% (200064/20971456) finish=1.7min speed=200064K/sec unused devices: <none>
十一、RAID擴展
如果在創建陣列時不想使用整個塊設備,可以指定用于創建RAID陣列每個塊設備使用的設備大小。然后在陣列需要擴展大小時,使用模式–grow(或者其縮寫-Q)以及–size參數(或者其縮寫-z) 在加上合適的大小數值就能分別擴展陣列所使用每個塊設備的大小。
# mdadm -C /dev/md0 -l5 -n3 /dev/sd[b-d] -x1 /dev/sde --size=1024000 # -- size單位為KB # mdadm -C /dev/md0 -l5 -n3 /dev/sd[b-d] -x1 /dev/sde --size=1024000 mdadm: array /dev/md0 started. # mdadm -D /dev/md0 /dev/md0: Version : 0.90 Creation Time : Thu Jun 27 22:24:51 2013 Raid Level : raid5 Array Size : 2048000 (2000.34 MiB 2097.15 MB) Used Dev Size : 1024000 (1000.17 MiB 1048.58 MB) Raid Devices : 3 Total Devices : 4 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Thu Jun 27 22:24:51 2013 State : clean, degraded, recovering Active Devices : 2 Working Devices : 4 Failed Devices : 0 Spare Devices : 2 Layout : left-symmetric Chunk Size : 64K Rebuild Status : 73% complete UUID : 78e766fb:776d62ee:d22de2dc:d5cf5bb9 Events : 0.1 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 4 8 48 2 spare rebuilding /dev/sdd 3 8 64 - spare /dev/sde # mdadm --grow /dev/md0 --size=2048000 #擴展大小 # mdadm -D /dev/md0 /dev/md0: Version : 0.90 Creation Time : Thu Jun 27 22:24:51 2013 Raid Level : raid5 Array Size : 4096000 (3.91 GiB 4.19 GB) Used Dev Size : 2048000 (2000.34 MiB 2097.15 MB) Raid Devices : 3 Total Devices : 4 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Thu Jun 27 22:28:34 2013 State : clean, resyncing Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 64K Rebuild Status : 90% complete UUID : 78e766fb:776d62ee:d22de2dc:d5cf5bb9 Events : 0.3 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 3 8 64 - spare /dev/sde
到此所有RAID內容基本顯示完畢!如有錯漏,大神勿噴。
原創文章,作者:oranix,如若轉載,請注明出處:http://www.www58058.com/11450
難得有好好寫文章的同學了