Raid & LVM 之一 Raid
Raid
Raid介紹
- RAID,全稱Redundant Arrays of Inexpensive(Independent)Disks。簡單翻譯叫磁盤陣列。
- 通俗一點講就是多個磁盤合成一個“陣列”來提供更好的性能、冗餘,或者兩者都提供。
- 目的有兩個:一個是提高磁盤的IO能力,提高耐用性。
- 實現方式有三種,如下:
- 外接式磁盤陣列:通過raid卡提供適配能力
- 內接式RAID:主板集成RAID控制器,在安裝OS之前需要在BIOS進行設置
- 軟件RAID:通過OS軟件實現
常見的Raid級別
管理工具介紹
- mdadm
[root@centos6-node3 ~]# rpm -qa | grep mdadm
mdadm-3.3.4-8.el6.x86_64
[root@centos6-node3 ~]# cat /proc/mdstat #查看mdstat狀態
Personalities :
unused devices: <none>
----------------------------------------
mdadm -h
-C:創建模式
-n:定義創建RAID設備個數
-l:指明要創建的RAID的級別
-c CHUNK_SIZE: 指明塊大小
-x : 指明空閒盤的個數
-A:裝配
-D:顯示RAID的詳細信息
-F:監控
-f:標記指定磁盤爲損壞
-r:移除磁盤
-a:添加磁盤
- 準備條件:
- centos6x
- 6塊磁盤
Raid0實操
特點:
- raid0性能比較高
- 空間0浪費
- 0容錯
- 讀寫性能佳
準備兩塊盤
- 確認準備的兩塊盤,能被系統讀到
[root@centos6-node3 ~]# ls -l /dev/ |grep sd brw-rw---- 1 root disk 8, 0 Dec 8 21:51 sda brw-rw---- 1 root disk 8, 1 Dec 8 21:51 sda1 brw-rw---- 1 root disk 8, 2 Dec 8 21:51 sda2 brw-rw---- 1 root disk 8, 16 Dec 8 21:51 sdb brw-rw---- 1 root disk 8, 32 Dec 8 21:51 sdc brw-rw---- 1 root disk 8, 48 Dec 8 21:51 sdd brw-rw---- 1 root disk 8, 64 Dec 8 21:51 sde brw-rw---- 1 root disk 8, 80 Dec 8 21:51 sdf brw-rw---- 1 root disk 8, 96 Dec 8 21:51 sdg [root@centos6-node3 ~]# lsblk -l #或者用這個命令也行,推薦用這個
- 檢查準備的兩塊盤有沒有raid信息
[root@centos6-node3 ~]# mdadm --examine /dev/sd[b-c] mdadm: No md superblock detected on /dev/sdb. mdadm: No md superblock detected on /dev/sdc.
- 創建raid分區
[root@centos6-node3 ~]# fdisk /dev/sdb #創建分區 Command (m for help): n #新建分區 p #選擇主分區 Partition number (1-4): 1 #區號選擇 First cylinder (1-261, default 1): #默認回車 Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261): #使用全部分區 Command (m for help): p #插看創建的分區 Device Boot Start End Blocks Id System /dev/sdb1 1 261 2096451 83 Linux Command (m for help): L #列出可選的類型 Command (m for help): t #修改分區類型 Selected partition 1 Hex code (type L to list codes): fd #根據L出來的狀態選擇raid對應的fd Command (m for help): p #查看 我們所做的修改 Device Boot Start End Blocks Id System /dev/sdb1 1 261 2096451 fd Linux raid autodetect Command (m for help): w #保存配置,自動退出 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
- sdc也需要同樣的操作去創建raid類型的分區
[root@centos6-node3 ~]# fdisk /dev/sdc n p 1 //回車 //回車 t fd w
- 檢查磁盤是否正確定義Raid:
[root@centos6-node3 ~]# mdadm --examine /dev/sd[b-c] #看全盤 /dev/sdb: MBR Magic : aa55 Partition[0] : 4192902 sectors at 63 (type fd) /dev/sdc: MBR Magic : aa55 Partition[0] : 4192902 sectors at 63 (type fd) [root@centos6-node3 ~]# mdadm --examine /dev/sd[b-c]1 #看分區 mdadm: No md superblock detected on /dev/sdb1. mdadm: No md superblock detected on /dev/sdc1.
- 創建Raid設備
[root@centos6-node3 ~]# mdadm -C /dev/md0 -l raid0 -n 2 /dev/sd[b-c]1 #創建raid0 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@centos6-node3 ~]# cat /proc/mdstat #查看raid狀態 Personalities : [raid0] md0 : active raid0 sdc1[1] sdb1[0] 4190208 blocks super 1.2 512k chunks
unused devices: <none>
其他查看狀態的方法:
``` bash
[root@centos6-node3 ~]# mdadm -E /dev/sd[b-c]1
[root@centos6-node3 ~]# mdadm -D /dev/md0
- 給raid創建文件系統,並掛在/mnt/raid0下:
[root@centos6-node3 ~]# mkdir /mnt/raid0 [root@centos6-node3 ~]# mkfs.ext4 /dev/md0 [root@centos6-node3 ~]# mount /dev/md0 /mnt/raid0/ [root@centos6-node3 ~]# df -Th #測試 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg_centos6node3-lv_root ext4 37G 1000M 35G 3% / tmpfs tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 ext4 477M 52M 400M 12% /boot /dev/md0 ext4 3.9G 8.0M 3.7G 1% /mnt/raid0 [root@centos6-node3 ~]# cp /tmp/* /mnt/raid0/ -r #寫文件 cp: overwrite `/mnt/raid0/yum.log'? y [root@centos6-node3 ~]# ll /mnt/raid0/ #查看 total 24 drwx------ 2 root root 16384 Dec 9 01:16 lost+found drwxr-xr-x 3 root root 4096 Dec 9 01:18 opt drwxr-xr-x 2 root root 4096 Dec 9 01:18 script -rw------- 1 root root 0 Dec 9 01:18 yum.log [root@centos6-node3 ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_centos6node3-lv_root 38645208 1023300 35652144 3% / tmpfs 502056 0 502056 0% /dev/shm /dev/sda1 487652 52916 409136 12% /boot /dev/md0 4058816 8212 3841096 1% /mnt/raid0
- 寫入fstab
[root@centos6-node3 ~]# echo "/dev/md0 /mnt/raid0 ext4 deaults 0 0" >> /etc/fstab [root@centos6-node3 ~]# mount -av #掛載點檢查 mount: UUID=5783f034-6989-4b6d-a187-3475e1a63eb8 already mounted on /boot mount: tmpfs already mounted on /dev/shm mount: devpts already mounted on /dev/pts mount: sysfs already mounted on /sys mount: proc already mounted on /proc mount: /dev/md0 already mounted on /mnt/raid0 nothing was mounted
- 保存Raid信息
[root@centos6-node3 ~]# mdadm -E -s -v >> /etc/mdadm.conf [root@centos6-node3 ~]# cat /etc/mdadm.conf ARRAY /dev/md/0 level=raid0 metadata=1.2 num-devices=2 UUID=e285a4e4:6f3f4984:853672cb:d24dfc1a name=centos6-node3:0 devices=/dev/sdc1,/dev/sdb1
至此:raid0搞完了
Raid1實操
- 將原先的raid0幹掉:
- 卸載
- 刪除
- 清fstab,/etc/mdadm.conf
[root@centos6 ~]#umount /mnt/raid0 <==取消掛載 [root@centos6 ~]#mdadm -S /dev/md0 <==停止設備 mdadm: stopped /dev/md0 [root@centos6 ~]#mdadm --zero-superblock /dev/sdb1 <==刪除raid信息 [root@centos6 ~]#mdadm --zero-superblock /dev/sdc1
- 創建/dev/sd[b-c]1 並完成格式化
參考raid0即可[root@centos6-node3 ~]# fdisk /dev/sdb [root@centos6-node3 ~]# fdisk /dev/sdc [root@centos6-node3 ~]# mdadm -E /dev/sd[b-c] [root@centos6-node3 ~]# mdadm -E /dev/sd[b-c]1
- 創建raid設備
[root@centos6-node3 ~]# mdadm -C /dev/md1 -l raid1 -n 2 /dev/sd[b-c]1 ###查狀態的兩種姿勢 [root@centos6-node3 ~]# mdadm -D /dev/md1 [root@centos6-node3 ~]# mdadm -E /dev/sd[b-c]1 [root@centos6-node3 ~]# mkfs.ext4 /dev/md1 #格式化
- 掛載並測試
[root@centos6-node3 ~]# mkdir /mnt/raid1 [root@centos6-node3 ~]# mount /dev/md1 /mnt/raid1/ [root@centos6-node3 ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_centos6node3-lv_root 38645208 1021344 35654100 3% / tmpfs 502056 0 502056 0% /dev/shm /dev/sda1 487652 52916 409136 12% /boot /dev/md1 2029712 3072 1921872 1% /mnt/raid1 [root@centos6-node3 ~]# dd if=/dev/zero of=/mnt/raid1/f1 bs=1M count=200 #文件寫入測試 [root@centos6-node3 ~]# ll /mnt/raid1/ -h #查看寫入的文件 total 201M -rw-r--r-- 1 root root 200M Dec 9 02:15 f1 drwx------ 2 root root 16K Dec 9 02:13 lost+found
Raid5
- 清掉上述的raid1信息
[root@centos6 ~]#umount /mnt/raid1 <==取消掛載 [root@centos6 ~]#mdadm -S /dev/md1 <==停止設備 mdadm: stopped /dev/md1 [root@centos6 ~]#mdadm --zero-superblock /dev/sdb1 <==刪除raid信息 [root@centos6 ~]#mdadm --zero-superblock /dev/sdc1
- 創建raid5,4塊盤,一塊備用
[root@centos6-node3 ~]# mdadm -C /dev/md5 -l raid5 -n 3 -x 1 /dev/sd[b-e]1
- 掛盤&測試
[root@centos6-node3 ~]# mkfs.ext4 /dev/md5 [root@centos6-node3 ~]# mkdir /mnt/raid5 [root@centos6-node3 ~]# mount /dev/md5 /mnt/raid5 [root@centos6-node3 ~]# dd if=/dev/zero of=/mnt/raid5/f1 bs=1M count=200 200+0 records in 200+0 records out 209715200 bytes (210 MB) copied, 0.443447 s, 473 MB/s [root@centos6-node3 ~]# ll /mnt/raid5/ total 204816 -rw-r--r-- 1 root root 209715200 Dec 9 02:29 f1 drwx------ 2 root root 16384 Dec 9 02:28 lost+found
Raid10實操
有三步操作:
- 清掉上述的raid1信息
- 清空上述的raid5信息
- 創建raid0,raid1,兩個md
- 合併raid0,raid1,就好
- 清空raid5信息
[root@centos6-node3 ~]# umount /mnt/raid5/ [root@centos6-node3 ~]# mdadm -S /dev/md5 mdadm: stopped /dev/md5 [root@centos6-node3 ~]# mdadm --zero-superblock /dev/sd[b-e]1 [root@centos6-node3 ~]# mdadm -E /dev/sd[b-e]1 #測試成功 mdadm: No md superblock detected on /dev/sdb1. mdadm: No md superblock detected on /dev/sdc1. mdadm: No md superblock detected on /dev/sdd1. mdadm: No md superblock detected on /dev/sde1.
- 搞一對個raid1
[root@centos6-node3 ~]# mdadm -C /dev/md1 -l raid1 -n 2 /dev/sd[b-c]1 [root@centos6-node3 ~]# mdadm -C /dev/md2 -l raid1 -n 2 /dev/sd[e-f]1
- 將兩個raid1合併成raid0(這樣就高出了raid10)
[root@centos6-node3 ~]# mdadm -C /dev/md10 -l raid0 -n 2 /dev/md1 /dev/md2 1 9 2 1 active sync /dev/md2 [root@centos6-node3 ~]# cat /proc/mdstat #查看狀態 Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] md10 : active raid0 md2[1] md1[0] 4188160 blocks super 1.2 512k chunks
- 清空raid5信息
md2 : active raid1 sdf1[1] sde1[0]
2095424 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sdc1[1] sdb1[0]
2095424 blocks super 1.2 [2/2] [UU]
- 掛載&測試
``` bash
[root@centos6-node3 ~]# mkdir /mnt/raid10
[root@centos6-node3 ~]# mkfs.ext4 /dev/md10
[root@centos6-node3 ~]# mount /dev/md10 /mnt/raid10/
[root@centos6-node3 ~]# dd if=/dev/zero of=/mnt/raid10/f1 bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.312253 s, 672 MB/s
- 所有的raid操作搞完之後就需要保存配置
[root@centos6-node3 ~]# mdadm -D -s -v >> /etc/mdadm.conf
超級簡單的Raid10製作方法
- 清除上述老版本的raid10信息
[root@centos6-node3 ~]# umount /mnt/raid10/ [root@centos6-node3 ~]# mdadm -S /dev/md10 mdadm: stopped /dev/md10 [root@centos6-node3 ~]# mdadm -S /dev/md1 mdadm: stopped /dev/md1 [root@centos6-node3 ~]# mdadm -S /dev/md2 mdadm: stopped /dev/md2 [root@centos6-node3 ~]# mdadm --zero-superblock /dev/sd[b-c]1 mdadm: Unrecognised md component device - /dev/sdb1 mdadm: Unrecognised md component device - /dev/sdc1 [root@centos6-node3 ~]# mdadm --zero-superblock /dev/sd[d-e]1 #查看狀態 mdadm: Unrecognised md component device - /dev/sdd1 mdadm: Unrecognised md component device - /dev/sde1 [root@centos6-node3 ~]# mdadm -E /dev/sd[b-e]1 mdadm: No md superblock detected on /dev/sdb1. mdadm: No md superblock detected on /dev/sdc1. mdadm: No md superblock detected on /dev/sdd1. mdadm: No md superblock detected on /dev/sde1. [root@centos6-node3 ~]# rm -fr /dev/md1 [root@centos6-node3 ~]# rm -fr /dev/md2 [root@centos6-node3 ~]# rm -fr /dev/md0 [root@centos6-node3 ~]# rm -fr /dev/md10 [root@centos6-node3 ~]# rm -fr /dev/md5
- 一步到位做法:
[root@centos6-node3 ~]# mdadm -C /dev/md10 -l raid10 -n 4 /dev/sd[b-e]1 #直接搞 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md10 started. [root@centos6-node3 ~]# mkfs.ext4 /dev/md10 #格式化
- 掛載&測試
[root@centos6-node3 ~]# mkdir /mnt/raid10/ [root@centos6-node3 ~]# mount /dev/md10 /mnt/raid10/ [root@centos6-node3 ~]# dd if=/dev/zero of=/mnt/raid10/f2 bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 2.70463 s, 397 MB/s
最後小結
所有操作完成之後,一定要有兩個操作:
- 將raid信息寫入fstab,以防斷電重啓掉盤
- 所有的raid操作搞完之後就需要保存配置
[root@centos6-node3 ~]# mdadm -D -s -v >> /etc/mdadm.conf
Raid故障解決
Raid測試方案
演示一下raid1的測試,需要兩塊工作盤和一塊備用盤;完成好相關的分區就行,先別掛載。
- 工具:mdadm --manage
[root@centos6-node3 ~]# mdadm --manage --help Usage: mdadm arraydevice options component devices... This usage is for managing the component devices within an array. The --manage option is not needed and is assumed if the first argument is a device name or a management option. The first device listed will be taken to be an md array device, any subsequent devices are (potential) components of that array. Options that are valid with management mode are: --add -a : hotadd subsequent devices to the array --re-add : subsequent devices are re-added if there were : recent members of the array --remove -r : remove subsequent devices, which must not be active --fail -f : mark subsequent devices a faulty --set-faulty : same as --fail --replace : mark device(s) to be replaced by spares. Once : replacement completes, device will be marked faulty --with : Indicate which spare a previous '--replace' should : prefer to use --run -R : start a partially built array --stop -S : deactivate array, releasing all resources --readonly -o : mark array as readonly --readwrite -w : mark array as readwrite
- 功能:
- 重新將設備加入到磁盤陣列
- 將設備標記爲故障
- 從陣列中刪除設備
- 使用備用設備更換故障設備
- 先停止部分陣列
- 停止陣列
- 標記陣列爲ro或者rw
爲raid陣列添加設備
- 先創建一個raid1
- 清空上述的raid10
[root@centos6-node3 ~]# mdadm -S /dev/md10 mdadm: stopped /dev/md10 [root@centos6-node3 ~]# mdadm --zero-superblock /dev/sd[b-e]1 [root@centos6-node3 ~]# mdadm -E /dev/sd[b-e]1
- 清空上述的raid10
- 新建raid1
[root@centos6-node3 ~]# mdadm -C /dev/md1 -l raid1 -n 2 /dev/sd[b-c]1 [root@centos6-node3 ~]# mkfs.ext4 /dev/md1 [root@centos6-node3 ~]# mount /dev/md1 /mnt/raid1
- 添加raid設備
[root@centos6-node3 ~]# mdadm --manage /dev/md1 --add /dev/sdd1 [root@centos6-node3 ~]# mdadm --manage /dev/md1 --add /dev/sde1
將一塊磁盤標記爲故障並清理出陣列
標記故障:
[root@centos6-node3 ~]# mdadm --manage /dev/md1 --fail /dev/sdd1 mdadm: set /dev/sdd1 faulty in /dev/md1 [root@centos6-node3 ~]# mdadm -D /dev/md1 [root@centos6-node3 ~]# mdadm --manage /dev/md1 --fail /dev/sde1
徹底清除:因爲標記故障的時候還沒清理
[root@centos6-node3 ~]# mdadm --manage /dev/md1 --remove /dev/sdd1 [root@centos6-node3 ~]# mdadm -D /dev/md1 #查看結果
重新添加設備,來替代已經移除的設備
剛纔移除了一塊/dev/sdd1
- 現在我們把丫給掛上去:
[root@centos6-node3 ~]# mdadm --manage /dev/md1 --re-add /dev/sdd1 mdadm: --re-add for /dev/sdd1 to /dev/md1 is not possible
傻了吧,報錯啦!
因爲陣列中的磁盤已經達到了最大的數量。因此,我們有兩個選擇:a)將 /dev/sdb1 添加爲備用的,如例1;或 b)從陣列中刪除 /dev/sdd1 然後重新添加 /dev/sdb1。
我們選擇選項 b),先停止陣列然後重新啓動:
[root@centos6-node3 ~]# umount /mnt/raid1
[root@centos6-node3 ~]# mdadm --stop /dev/md1
[root@centos6-node3 ~]# mdadm --assemble /dev/md1 /dev/sdd1 /dev/sde1
mdadm: /dev/md1 assembled from 0 drives and 2 spares - not enough to start the array. #完犢子了
[root@centos6-node3 ~]# mdadm -C /dev/md1 -l raid1 -n 2 /dev/sd[b-c]1 #重啓raid1
[root@centos6-node3 ~]# mdadm -D /dev/md1
[root@centos6-node3 ~]# mdadm --manage /dev/md1 --add /dev/sdd1
[root@centos6-node3 ~]# mount /dev/md1 /mnt/raid1
[root@centos6-node3 ~]# ll /mnt/raid1 #原來的數據還在
total 1048596
-rw-r--r-- 1 root root 1073741824 Dec 9 03:31 f2
drwx------ 2 root root 16384 Dec 9 03:27 lost+found
使用特定磁盤更換raid設備
[root@centos6-node3 ~]# mdadm --manage /dev/md1 --replace /dev/sdd1 --with /dev/sdc1
-----END