Debian 组建软 RAID 1 磁盘阵列
现状:共有2块硬盘当做数据盘,一块 500G(sda), 另一块 2T(sdb)
要实现的:sda 和 sdb 其中的 500G 组成 raid1, sdb 剩下的当做普通数据盘,并且当 raid 出现问题的时候,发送邮件通知你
使用 sudo fdisk /dev/sdx
命令进行分区,按照提示操作就可以了
分区之后情况如下
Disk /dev/sda: 500.1 GB, 500107862016 bytes
45 heads, 63 sectors/track, 344540 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3184df24
Device Boot Start End Blocks Id System
/dev/sda1 2048 976773167 488385560 83 Linux
Disk /dev/sdb: 2000.4 GB, 2000365289472 bytes
255 heads, 63 sectors/track, 243197 cylinders, total 3906963456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe0894113
Device Boot Start End Blocks Id System
/dev/sdb1 2048 976773167 488385560 83 Linux
/dev/sdb2 976773168 3906963455 1465095144 83 Linux
下面开始将 sda1 和 sdb1 组建成 raid1
创建与配置
-
将 sda1 和 sdb1 的分区类型改为 Linux raid autodetect, 以 sda1 为例
$ sudo fdisk /dev/sda 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!
修改好之后分区情况如下
Disk /dev/sda: 500.1 GB, 500107862016 bytes 45 heads, 63 sectors/track, 344540 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x3184df24 Device Boot Start End Blocks Id System /dev/sda1 2048 976773167 488385560 fd Linux raid autodetect Disk /dev/sdb: 2000.4 GB, 2000365289472 bytes 255 heads, 63 sectors/track, 243197 cylinders, total 3906963456 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xe0894113 Device Boot Start End Blocks Id System /dev/sdb1 2048 976773167 488385560 fd Linux raid autodetect /dev/sdb2 976773168 3906963455 1465095144 83 Linux
-
安装 mdadm
sudo apt-get install mdadm
-
创建磁盘阵列,raid 设备名称 md0, 指定 raid 级别 1, raid 磁盘数 2 且分别为 /dev/sda1 和 /dev/sdb1
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
出现 “mdadm: array /dev/md0 started.”, 就算成功了
看似创建好了,实际上还没有,还在后台进行同步,同步完成之后才算彻底完工,但是现在就可以正常使用了
-
可用
cat /proc/mdstat
命令查看磁盘阵列状态,正在同步中,不过好漫长啊(这机子 IO 性能比较弱),不过对于 24 小时开机的设备来说也算不了什么Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0] 488254336 blocks super 1.2 [2/2] [UU] [>....................] resync = 0.1% (942528/488254336) finish=469.6min speed=17292K/sec unused devices: <none>
可用
sudo mdadm --detail /dev/md0
命令查看磁盘阵列 md0 的详细信息 -
保存配置文件,不保存配置文件也可以,但是可能会出问题
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
-
就像平常使用 sda1 那样使用 md0, 对 md0 进行格式化
sudo mkfs.ext4 /dev/md0
-
如果要开机自动挂载磁盘阵列,编辑
sudo vim /etc/fstab
, 例如加入如下内容/dev/md0 /media/data ext4 defaults 0 0
监控
磁盘阵列出现问题的时候,发送邮件通知你
好心发给你可别忽略了,要不然你会付出代价的
-
安装 ssmtp
sudo apt-get install ssmtp
-
配置 ssmtp,
sudo vim /etc/ssmtp/ssmtp.conf
, 以 gmail 邮箱为例# # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=postmaster # The place where the mail goes. The actual machine name is required no- # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=smtp.gmail.com:587 # Where will the mail seem to come from? #rewriteDomain= # The full hostname hostname=YourHostname # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address FromLineOverride=YES UseSTARTTLS=YES UseTLS=YES AuthUser=[email protected] AuthPass=YourPassword
-
因为密码是明文存储的,安全起见修改配置文件的权限
sudo chmod 660 /etc/ssmtp/ssmtp.conf
-
测试 ssmtp 是否配置正确,若 “[email protected]”(填写你自己的邮箱) 收到邮件,就算成功了
echo "ssmtp-test" | sudo ssmtp [email protected]
-
编辑 mdadm 配置文件,
sudo vim /etc/mdadm/mdadm.conf
, 加入以下内容,若原来存在如下配置,替换就行# 填写你自己的邮箱 MAILADDR [email protected] MAILFROM [email protected]
-
测试 mdadm 配置是否正确,若能收到测试邮件,那就成功了
sudo mdadm --monitor /dev/md0 --test
到这,你就可以安心睡觉了
彻底删除
删除需谨慎,都是满满的数据
-
首先停止正在运行的 raid 设备,如果挂载了,那么先卸载了
sudo mdadm --stop /dev/md0
-
清除磁盘中的 raid 信息,也就是清除 super block 中的信息。执行之后数据也就没有了,请谨慎操作
sudo mdadm --zero-superblock /dev/sda1 sudo mdadm --zero-superblock /dev/sdb1
-
清除添加到 /etc/mdadm/mdadm.conf 中的信息
如果设置了 fstab, 那么删除其中关于 raid 的信息
重新分区格式化来使用磁盘
故障处理
对一些情况进行处理
-
如果其中的一块磁盘损坏了,比如说 sda1
$ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0](F) 488254336 blocks super 1.2 [2/1] [_U] unused devices: <none>
-
从磁盘阵列 md0 中移除损坏的设备 sda1
sudo mdadm /dev/md0 --remove /dev/sda1
-
更换新磁盘,对其进行分区并标记分区类型为 Linux raid autodetect, 例如为 sda1, 也可能是其它的
-
添加 sda1 到磁盘阵列 md0 中,系统会自动重建数据的
sudo mdadm /dev/md0 --add /dev/sda1
-
-
想更换一个新磁盘,比如说把 sdb1 给替换掉
-
标记 sdb1 损坏
sudo mdadm /dev/md0 --fail /dev/sdb1
-
接下去的步骤和上一种情况一样,就不赘述了
-
-
如果不幸操作系统崩溃了或者主机坏了怎么办?不急,咱有的是办法
-
重装系统之后或者将两个磁盘接到其它的电脑上,在这个系统上装好 mdadm
-
使用
sudo fdisk -l
命令查看磁盘信息,原来的磁盘在新的系统上分别为 sdd1, sde1Disk /dev/sdd: 500.1 GB, 500107862016 bytes 45 heads, 63 sectors/track, 344540 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x3184df24 Device Boot Start End Blocks Id System /dev/sdd1 2048 976773167 488385560 fd Linux raid autodetect Disk /dev/md127: 500.0 GB, 499972440064 bytes 2 heads, 4 sectors/track, 122063584 cylinders, total 976508672 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/md127 doesn't contain a valid partition table Disk /dev/sde: 2000.4 GB, 2000365289472 bytes 255 heads, 63 sectors/track, 243197 cylinders, total 3906963456 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xe0894113 Device Boot Start End Blocks Id System /dev/sde1 2048 976773167 488385560 fd Linux raid autodetect /dev/sde2 976773168 3906963455 1465095144 83 Linux
-
测试的时候,我将两个磁盘插到新的电脑上,它自动重组成磁盘阵列 md127 了,但是是只读的
先停止其运行sudo mdadm --stop /dev/md127
然后执行这个命令,如果没有自动重组,那么直接执行这个命令即可
sudo mdadm --assemble /dev/md0 /dev/sdd1 /dev/sde1
-
保存配置文件,配置 fstab,上面都有就不讲了
-
-
如何使用其中的一块盘来读取数据?
-
强行用其中的一个磁盘来组成磁盘阵列 raid1, 例如使用磁盘 sde1
sudo mdadm --create --verbose /dev/md0 --level=1 --force --raid-devices=1 /dev/sde1
-
挂载 md0 并读取数据即可
sudo mount /dev/md0 /mnt
-
参考
https://raid.wiki.kernel.org/index.php/RAID_setup
http://en.wikipedia.org/wiki/Mdadm
man mdadm