在生產環境的服務器中,數據存儲的主要設備是磁盤,磁盤的故障率以及磁盤讀取數據的速度對服務器整體性能和可靠性有着非常重要的影響。特別是像web服務器、數據庫服務器,這些對數據的讀取和寫入速度要求很高的服務器,磁盤的性能往往會成爲其對外提供服務的性能瓶頸,特別是對數據庫中存儲了重要的線上業務數據的服務器,其數據存儲的安全性也往往會遠重要於其服務器自身的價值。
目前常見的有硬盤類型有SATA 、SCSI、SAS、SSD等幾種,其中SAS、SSD硬盤的壽命,速度都是很不錯的,但是其價格是同容量SATA硬盤的N倍,所以在個人PC上,有些人也會經常通過組合SATA硬盤組成RAID陣列,提高磁盤整體性能達到更好的速度。
RAID全稱是 “A Case for Redundant Arrays of Inexpensive Disks (RAID)”,稱爲“廉價磁盤冗餘陣列”,由加州大學伯克利大學在1987年發表的論文中而來。RAID的主要思想就是把若干小容量物理磁盤組成一個大容量虛擬存儲設備,以提高磁盤存儲的讀、寫效率,並提供冗餘以提高數據存儲的安全性。
根據應用方向的不同,RAID也分爲不同級別,常用的有RAID-0、RAID-1、RAID-5、RAID-10。
RAID-0也稱爲條帶模式(striping),即把連續的數據分散到多個磁盤上存取,最少需要磁盤數大於等於2。當系統有數據請求就可以被多個磁盤並行的執行,每個磁盤執行屬於它自己的那部分數據請求。這種數據上的並行操作可以充分利用總線的帶寬,顯著提高磁盤整體存取性能。因爲讀取和寫入是在設備上並行完成的,讀取和寫入性能將會增加,這也通常是使用RAID-0的主要原因。但RAID-0沒有數據冗餘,如果驅動器出現故障,那麼將無法恢復任何數據,所以一般主要用在對設備讀取要求高,但對數據安全性不做要求的業務中。
RAID-1又稱爲鏡像(Mirroring),RAID-1要求至少有2的整數倍塊硬盤,並使用0塊或更多的備用磁盤。每次寫數據時會同時寫入鏡像盤。這種陣列可靠性很高,但其有效容量減小到總容量的一半,同時這些磁盤的大小應該相等,否則總容量只具有最小磁盤的大小。這種方法完整備份了數據,對數據的寫入速度稍有降低,而且磁盤的利用率只有二分之一。但其優點是對數據的容錯很好,對數據的讀取有較大的提高。
RAID-5具有和RAID-0相近似的數據讀取速度,同時磁盤空間利用率也要比RAID1高。屬於是RAID-0和RAID-1的折中方案,是一種存儲性能、數據安全和存儲成本兼顧的存儲解決方案。由於存儲成本相對較低,是目前運用較多的一種解決方案。
RAID-5陣列中數據的分佈與RAID-0類似,數據也是分佈到每塊硬盤上,但Raid-5沒有獨立的奇偶校驗盤,他通過將校驗的數據循環存儲並分散放在所有磁盤上,其中任意N-1塊磁盤上都存儲完整的數據,也就是說有相當於一塊磁盤容量的空間用於存儲奇偶校驗信息。因此當RAID5能夠支持在一塊盤離線的情況下保證數據的正常訪問,不會影響數據的完整性,從而保證了數據安全。當損壞的磁盤被替換後,RAID還會自動利用剩下奇偶校驗信息去重建此磁盤上的數據,來保持RAID5的高可靠性。
RAID-5的組建,至少需要三塊或更多的磁盤,並可以使用0塊或更多的備用磁盤,其數據安全保障程度要比RAID1低,寫入數據的速度比對單個磁盤進行寫入速度稍慢。如果有兩塊或兩塊以上硬盤同時離線,或者RAID信息出錯等原因,陣列便會失效,這時就需要對數據進行重組。並且做raid 5陣列所有磁盤容量必須一樣大,當容量不同時,會以最小的容量爲準。 同時,最好硬盤轉速一樣,否則會影響性能。
RAID 1+0也被稱爲RAID-10標準,實際是將RAID-0和RAID-1標準結合的產物,是先對磁盤先進行RAID-1,然後RAID-0,這種方法即提供了冗餘,而且也提升了速度。
在連續地以位或字節爲單位分割數據並且並行讀/寫多個磁盤的同時,爲每一塊磁盤作磁盤鏡像進行冗餘。它的優點是同時擁有RAID-0的超凡速度和RAID-1的數據高可靠性,但是CPU佔用率同樣也更高,而且磁盤的利用率比較低。由於利用了RAID-0極高的讀寫效率和RAID-1較高的數據保護、恢復能力,使RAID-10成爲了一種性價比較高的等級,目前幾乎所有的RAID控制卡都支持這一等級。
但是,RAID-10對存儲容量的利用率和RAID-1一樣低,只有50%。因此,RAID10即高可靠性與高效磁盤結構它是一個帶區結構加一個鏡象結構,可以達到既高效又高速的目的,RAID 10能提供比RAID 5更好的性能,使用此方案比較昂貴。
由於RAID的使用性很高,而對硬盤的使用內核需要識別,在最新的內核中已經默認加載了對常見RAID卡的驅動。RAID設備在linux系統中會被識別成/dev/md[N] N是數字。使用mdadm命令能夠對RAID設備配置。
目前 RAID技術大致分爲兩種:基於硬件的RAID技術和基於軟件的RAID技術。其中在Linux下通過自帶的軟件就能實現RAID功能,由於是用軟件去實現的RAID功能,所以它配置靈活、管理方便。同時使用軟件RAID,還可以實現將幾個物理磁盤合併成一個更大的虛擬設備,從而達到性能改進和數據冗餘的目的。
Linux軟RAID是在linux操作系統層面進行的軟件RAID配置,雖然也能對數據進行保護,但是在實際生產環境中,還是建議使用存儲中磁盤陣列和硬RAID實現磁盤存儲冗餘。基於硬件的RAID解決方案比基於軟件RAID技術在使用性能和服務性能方面不僅更勝一籌,而且在檢測和修復多位錯誤的能力、錯誤磁盤自動檢測和陣列重建等方面更有安全保障。
Last login: Fri Dec 18 15:27:27 2015 from 172.16.54.1 [root@localhost ~]# fdisk -l Disk /dev/sda: 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: 0x0006280f Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 7859 62914560 8e Linux LVM /dev/sda3 9165 15665 52219282+ 83 Linux /dev/sda4 7859 9164 10489446 5 Extended /dev/sda5 7859 9164 10489414+ 83 Linux Partition table entries are not in disk order Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x00000000 Disk /dev/sdd: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x00000000 Disk /dev/sdc: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x00000000 Disk /dev/sde: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x00000000 Disk /dev/mapper/vg0-root: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x00000000 Disk /dev/mapper/vg0-swap: 2147 MB, 2147483648 bytes 255 heads, 63 sectors/track, 261 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: 0x00000000 Disk /dev/mapper/vg0-usr: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 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: 0x00000000 Disk /dev/mapper/vg0-var: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x00000000 [root@localhost ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x31eabbb3. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 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): l 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx 5 Extended 42 SFS 86 NTFS volume set da Non-FS data 6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility 8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt 9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b 11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor 12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor 14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary 16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS 17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT 1e Hidden W95 FAT1 Command (m for help): t No partition is defined yet! Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): Value out of range. Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): Using default value 2610 Command (m for help): t Selected partition 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# fdisk /dev/sdc Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x101206b7. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 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) 1 Invalid partition number for type `1' Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): Using default value 2610 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# fdisk /dev/sdc 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): t Selected partition 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# fdisk /dev/sdd Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x45a8f000. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 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 Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): Using default value 2610 Command (m for help): t Selected partition 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# fdisk /dev/sde Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x7205d563. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 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 Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): Using default value 2610 Command (m for help): t Selected partition 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# partx -a /dev/sdb BLKPG: Device or resource busy error adding partition 1 [root@localhost ~]# partx -a /dev/sdc BLKPG: Device or resource busy error adding partition 1 [root@localhost ~]# partx -a /dev/sdd BLKPG: Device or resource busy error adding partition 1 [root@localhost ~]# partx -a /dev/sde BLKPG: Device or resource busy error adding partition 1 [root@localhost ~]# cat /proc/mdstat Personalities : unused devices: <none> [root@localhost ~]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sd{b,c,d,e} mdadm: /dev/sdb appears to be part of a raid array: level=raid0 devices=0 ctime=Thu Jan 1 08:00:00 1970 mdadm: partition table exists on /dev/sdb but will be lost or meaningless after creating array mdadm: /dev/sdc appears to be part of a raid array: level=raid0 devices=0 ctime=Thu Jan 1 08:00:00 1970 mdadm: partition table exists on /dev/sdc but will be lost or meaningless after creating array mdadm: /dev/sdd appears to be part of a raid array: level=raid0 devices=0 ctime=Thu Jan 1 08:00:00 1970 mdadm: partition table exists on /dev/sdd but will be lost or meaningless after creating array mdadm: /dev/sde appears to be part of a raid array: level=raid0 devices=0 ctime=Thu Jan 1 08:00:00 1970 mdadm: partition table exists on /dev/sde but will be lost or meaningless after creating array Continue creating array? yes mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd[4] sde[3](S) sdc[1] sdb[0] 41910272 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_] [=========>...........] recovery = 49.2% (10325532/20955136) finish=0.8min speed=200524K/sec unused devices: <none> [root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdd[4] sde[3](S) sdc[1] sdb[0] 41910272 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> [root@localhost ~]# mke2fs -t ext4 /dev/md0 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=128 blocks, Stripe width=256 blocks 2621440 inodes, 10477568 blocks 523878 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 320 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, 7962624 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 36 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@localhost ~]# mkdir /data [root@localhost ~]# mount /dev/md0 /data [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg0-root 20G 302M 19G 2% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 36M 145M 20% /boot /dev/mapper/vg0-usr 9.8G 2.0G 7.4G 21% /usr /dev/mapper/vg0-var 20G 171M 19G 1% /var /dev/md0 40G 48M 38G 1% /data [root@localhost ~]# blkid /dev/md0 /dev/md0: UUID="b306bf28-9439-4719-902e-e71857f8d655" TYPE="ext4" [root@localhost ~]# vi /etc/fstab # # /etc/fstab # Created by anaconda on Sun Dec 6 09:20:03 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 # /dev/mapper/vg0-root / ext4 defaults 1 1 UUID=385b7608-567d-4a7a-8ac8-fa3abaa9cd2e /boot ext4 defaults 1 2 /dev/mapper/vg0-usr /usr ext4 defaults 1 2 /dev/mapper/vg0-var /var ext4 defaults 1 2 /dev/mapper/vg0-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 UUID=b306bf28-9439-4719-902e-e71857f8d655 /data/ ext4 defaults 0 0 [root@localhost ~]# blkid /dev/md0 /dev/md0: UUID="b306bf28-9439-4719-902e-e71857f8d655" TYPE="ext4" [root@localhost ~]# mount -a [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg0-root 20G 302M 19G 2% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 36M 145M 20% /boot /dev/mapper/vg0-usr 9.8G 2.0G 7.4G 21% /usr /dev/mapper/vg0-var 20G 171M 19G 1% /var /dev/md0 40G 48M 38G 1% /data [root@localhost ~]# mount /dev/mapper/vg0-root 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) /dev/sda1 on /boot type ext4 (rw) /dev/mapper/vg0-usr on /usr type ext4 (rw) /dev/mapper/vg0-var on /var type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/md0 on /data type ext4 (rw) [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Dec 18 15:51:28 2015 Raid Level : raid5 Array Size : 41910272 (39.97 GiB 42.92 GB) Used Dev Size : 20955136 (19.98 GiB 21.46 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Fri Dec 18 15:57:50 2015 State : clean Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : d0ca6d45:6aca276f:da0396f3:e487dc27 Events : 18 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 active sync /dev/sdd 3 8 64 - spare /dev/sde [root@localhost ~]# mdadm /dev/md0 -f /dev/sdd mdadm: set /dev/sdd faulty in /dev/md0 [root@localhost ~]# watch -n1 'cat /proc/mdstat' [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Dec 18 15:51:28 2015 Raid Level : raid5 Array Size : 41910272 (39.97 GiB 42.92 GB) Used Dev Size : 20955136 (19.98 GiB 21.46 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Fri Dec 18 16:10:56 2015 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : d0ca6d45:6aca276f:da0396f3:e487dc27 Events : 37 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 3 8 64 2 active sync /dev/sde 4 8 48 - faulty /dev/sdd [root@localhost ~]# mdadm /dev/md0 -f /dev/sde mdadm: set /dev/sde faulty in /dev/md0 [root@localhost ~]# watch -n1 'cat /proc/mdstat' [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Dec 18 15:51:28 2015 Raid Level : raid5 Array Size : 41910272 (39.97 GiB 42.92 GB) Used Dev Size : 20955136 (19.98 GiB 21.46 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Fri Dec 18 16:12:22 2015 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 2 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : d0ca6d45:6aca276f:da0396f3:e487dc27 Events : 39 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 4 0 0 4 removed 3 8 64 - faulty /dev/sde 4 8 48 - faulty /dev/sdd [root@localhost ~]# mdadm /dev/md0 -r /dev/sde mdadm: hot removed /dev/sde from /dev/md0 [root@localhost ~]# mdadm /dev/md0 -r /dev/sdd mdadm: hot removed /dev/sdd from /dev/md0 [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Dec 18 15:51:28 2015 Raid Level : raid5 Array Size : 41910272 (39.97 GiB 42.92 GB) Used Dev Size : 20955136 (19.98 GiB 21.46 GB) Raid Devices : 3 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Dec 18 16:13:56 2015 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : d0ca6d45:6aca276f:da0396f3:e487dc27 Events : 41 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 4 0 0 4 removed [root@localhost ~]# mdadm /dev/md0 -a /dev/sdd mdadm: added /dev/sdd [root@localhost ~]# mdadm /dev/md0 -a /dev/sde mdadm: added /dev/sde [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Dec 18 15:51:28 2015 Raid Level : raid5 Array Size : 41910272 (39.97 GiB 42.92 GB) Used Dev Size : 20955136 (19.98 GiB 21.46 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Fri Dec 18 16:14:24 2015 State : clean, degraded, recovering Active Devices : 2 Working Devices : 4 Failed Devices : 0 Spare Devices : 2 Layout : left-symmetric Chunk Size : 512K Rebuild Status : 5% complete Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : d0ca6d45:6aca276f:da0396f3:e487dc27 Events : 45 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 3 8 48 2 spare rebuilding /dev/sdd 4 8 64 - spare /dev/sde [root@localhost ~]# watch -n1 'cat /proc/mdstat'