LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1603|回复: 8

[原创] 在 gentoo linux 上构建软 raid5 系统 (完稿)

[复制链接]
发表于 2010-9-1 18:18:45 | 显示全部楼层 |阅读模式
tags: raid5 gentoo mdraid softraid ATI sb850

1. 前言

最近公司需要搭建一些测试环境给开发人员,为了保证每个项目的测试环境相对“干净”,所以考虑使用虚拟机。对KVM闻名已久就打算使用qemu-kvm来搭建测试虚拟机。说到这里,怎么貌似和本文没关系?别着急:考虑到可能会应用到多kvm虚拟机并行运行,所以购买了一台测试用设备,并打算构建 linux raid5 环境。

购买的配置如下:

处理器 Athlon II X4 635
内  存 Kingmax 2GB*4 (一共8G)
硬  盘 WD 500G*3(绿盘)
主  板 梅捷 A890G+

特别说明一下,选这个主板,主要是看重两个方面:利于散热的内存条布局;BIOS RAID5支持(后来证明是白搭)。

2. 安装准备

准备做系统了,下载了portage-latest、stage3-amd64,继续用我量产的usb-cdrom 版 mini install cd。

3. 开始折磨自己

首先呢,在 BIOS 里面启用 SATA RAID,然后 CTRL+F 配置一个新的 RAID5,用 install cd 引导系统,尝试启用 dmraid ……

失败!

见鬼,快到 2012年了,dmraid 还是不支持 ati raid ……

反复尝试几次,无效。看来,只能放弃 dmraid 了,决定正式采用 mdraid (soft raid)。

1) 在 BIOS 中去掉 RAID 设置,改为 SATA AHCI,继续用 install cd 启动。

2) 硬盘分区

记得么,我有三块一模一样的硬盘,所以分区方式也保持一致。
  1. livecd# cfdisk /dev/sda
复制代码

分配方式如下:
/dev/sda1 512MB /boot bootable
/dev/sda2 2GB swap
/dev/sda3 150GB /
/dev/sda5 50GB /bak
/dev/sda6 100GB /home
/dev/sda7 175GB(剩下的所有)/app

注意一下,所有的分区类型,记得按“T”,然后选择 “FD”,就是Linux Raid Autodetect

接下来把分区表直接复制到其他硬盘上(当然,你乐意在每个硬盘上都用一次 cfdisk 也无所谓):
  1. livecd# sfdisk -d /dev/sda | sfdisk /dev/sdb
  2. livecd# sfdisk -d /dev/sda | sfdisk /dev/sdc
复制代码

弄好之后,建议重启一下机器。

3) 制作 RAID

硬盘分区完成,mdraid出场。

首先,创建设备符:
  1. livecd# cd /dev
  2. livecd dev# MAKEDEV
复制代码

完成后,会在 /dev 下面看到一堆 md*

创建 raid 的时候,有几点需要注意:

首先,引导分区的 metadata 必须是 0.9 版本的,也就是说 /boot 所在分区在创建raid的时候必须加上 --metadata=0.9 或者 -e 0.9 的参数,否则引导会不正常;

其次,/boot 分区不可以用序列阵列,只能用镜像,也就是 raid1,否则 grub 无法识别(硬raid卡因为将raid识别为一个单一的硬盘设备,所以无此问题);

最后,/dev/sda2 /dev/sdb2 /dev/sdc2 我准备做个 raid5 的 swap,如果只想大点空间,可以用单硬盘的方式分别设置为 swap 分区,并启用,这样会多上2GB的swap,不过我觉得 4GB 够用了。

创建的命令如下(注意,md1 是三块硬盘做镜像):
  1. livecd# mdadm --create --verbose /dev/md1 --level=1 --raid-devices=3 -e 0.9 /dev/sda1 /dev/sdb1 /dev/sdc1
  2. livecd# mdadm --create --verbose /dev/md2 --level=5 --raid-devices=3 /dev/sda2 /dev/sdb2 /dev/sdc2
  3. livecd# mdadm --create --verbose /dev/md3 --level=5 --raid-devices=3 /dev/sda3 /dev/sdb3 /dev/sdc3
  4. livecd# mdadm --create --verbose /dev/md5 --level=5 --raid-devices=3 /dev/sda5 /dev/sdb5 /dev/sdc5
  5. livecd# mdadm --create --verbose /dev/md6 --level=5 --raid-devices=3 /dev/sda6 /dev/sdb6 /dev/sdc6
  6. livecd# mdadm --create --verbose /dev/md7 --level=5 --raid-devices=3 /dev/sda7 /dev/sdb7 /dev/sdc7
复制代码

这个时候 cat /proc/mdstat 可以看到硬盘阵列开始同步。

同步的时间根据硬盘分区的容量不同而不同,长得可能个把小时一个分区。不过大家不用傻等,同步的同时一样可以对硬盘做分区和安装操作。

如果想知道什么时候同步完成,输入下面的命令(建议开多个tty):
  1. livecd# watch -n 1 'cat /proc/mdstat'
复制代码

4) 文件系统和安装

/boot 我打算用ext2,主要是兼容性最好,而且有mirror了,不怕出问题。

/ 我打算用ext3,为了以后升级到 ext4 玩,别的分区用 reiserfs,当然,你有不同的想法,我完全支持,只是记得,grub在raid下面对ext系列的识别是最好的就行了。

swap 很简单:
  1. livecd# mkswap /dev/md2
  2. livecd# swapon /dev/md2
复制代码

这个时候 top 一下就可以看到 4GB 的 swap 在跑了。三个 2GB 的分区做RAID5,得到 4GB 的 SWAP,刚刚好。

5) 安装 gentoo 系统

这个部分的工作和安装别的 gentoo 系统并无不同。

6) chroot 之后需要做的事情

首先,别忘记你的 mdraid 是需要支持的,所以下面的命令是必须的:
  1. # emerge mdadm
  2. # rc-update add mdadm boot
复制代码

然后呢,你要把 mdraid 的内容放置到 mdadm 的配置文件里面:
  1. # mdadm --detail --scan >> /etc/mdadm.conf
  2. 或者
  3. livecd# mdadm --detail --scan >> /mnt/gentoo/etc/mdadm.conf
复制代码

根据 druggo 同学的补充,如果分区使用 Linux Raid Autodetect,并且内核配置中选中了 Devices driver --> Multiple devices driver support --> RAID support -> Autodetect RAID arrays during boot,则可不执行 rc-update add mdadm boot。

编译内核的时候,记得把 mdraid / raid 相关的东西都选上,如果是对自己编译内核比较陌生的朋友,还是 genkernel 吧。而且用 initrd 也有个好处,就是可以区分出 real_root 来,系统装好之后关机的时候不会出现因为 / 分区已挂载无法释放的情况。

* grub 的设置
修改 /boot/grub/devices.map 文件,我的类似于

(hd0) /dev/sda
(hd1) /dev/sdb
(hd2) /dev/sdc

运行 grub 命令:
  1. grub> root (hd0,0)
  2. grub> setup (hd0)
  3. grub> root (hd1,0)
  4. grub> setup (hd1)
  5. grub> root (hd2,0)
  6. grub> setup (hd2)
复制代码

修改 grub.conf 的时候,只要 root (hd0,0) 就可以了。

OK,一切做好了,重启。

收工!

ps: raid5 主要提升数据安全性和硬盘读写性能中的读取性能,经过对 /dev/sda3 /dev/md3 的测试(命令 hdparm -tT)
读取性能从 97MB/s 提升到 174MB/s
发表于 2010-9-1 21:56:53 | 显示全部楼层
一次两个好贴子,阿乐是不是给弄个精华啊?
回复 支持 反对

使用道具 举报

发表于 2010-9-2 00:24:57 | 显示全部楼层
提个意见,如果分区设置为Linux Raid Autodetect,内核也配置了autodect的话,就不用 rc-update add mdadm boot 了
回复 支持 反对

使用道具 举报

发表于 2010-9-2 13:36:17 | 显示全部楼层
我觉得主板上的raid就应该去掉,

主板上就不应该做这个东西,很少有人用吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-2 13:52:02 | 显示全部楼层
Post by druggo;2110691
提个意见,如果分区设置为Linux Raid Autodetect,内核也配置了autodect的话,就不用 rc-update add mdadm boot 了


多谢多谢,我已经将你提及的内容补充到主贴中。
回复 支持 反对

使用道具 举报

发表于 2010-9-2 18:15:40 | 显示全部楼层
支持一下~ :)
回复 支持 反对

使用道具 举报

发表于 2010-9-6 10:46:52 | 显示全部楼层
谢谢LZ的好文,我在用raid-1。
回复 支持 反对

使用道具 举报

发表于 2010-9-8 21:43:09 | 显示全部楼层
LZ最近写了不少好文,支持!
回复 支持 反对

使用道具 举报

发表于 2010-9-9 00:23:10 | 显示全部楼层
刚刚买的刀片机做了个raid5,不过是硬raid,软raid老实说不敢做
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表