王朝网络
分享
 
 
 

在 FreeBSD 上使用软 RAID-1

王朝system·作者佚名  2006-03-06
宽屏版  字体: |||超大  

有没有想过为低端服务器做软 RAID?你或许想过在不购置硬 RAID 控制卡的前提下,通过磁盘镜像为你的工作站带来冗余保护。你是否有过痛苦的配置经历,使你对 Unix 系统上的软 RAID 却步?

FreeBSD 5.3 及更高的版本加入了 gmirror(8);它让你轻易地配置使用软 RAID 1。尽管 gmirror 已有不少教程,但我发现它们不是要求用 bsdlabel 来手动计算分区的大小就是要用到一张用以修正现有系统的软盘。

我以为在安装操作系统的过程中配置 RAID 更为合理。我也希望配置步骤能做到易于理解并且不造成诸如计算出错的人为错误。通过拼凑现有的说明文字,自己进行多方配置实验后,我找到了在数个不同系统上都适用的配置步骤。我也从 gmirror 的编写者 Pawel Jakub Dawidek 那里得到了很有价值的回馈;他透露了 gmirror 一些尚未公开的特性。

GEOM 背景知识

在介绍配置步骤之前,先了解一下 GEOM 是很有用的。GEOM 是 FreeBSD 5.0 引入的模块磁盘构架。该模块构架允许通过编写程序来操控磁盘。FreeBSD 5.3 引入的软 RAID 程序就是最好的例子。

gstripe(8) 可做 RAID 0

gmirror(8) 可做 RAID 1

graid3(8) 可做 RAID 3

以上的首字符 g 表示这些程序都利用到了 GEOM。

注:若你不知道 RAID 为何物,则可参阅 Webopedia 有关定义不同 RAID 的链接 http://www.webopedia.com/TERM/R/RAID.html

man 4 geom 述说了 geom 所用到的磁盘术语;在设置 gmirror 的过程中,我们将会看到一些。它们包括:

provider -- 该 GEOM 实体在 /dev 下出现。本文将介绍如何创建 /dev/mirror/gm0 这个 provider,它代表磁盘镜像或双工。

consumer -- 该实体接收 I/O 请求。在镜像/双工的例子中,这指的就是两块硬盘。我用两根数据线分别连接两块 IDE 硬盘,得到 /dev/ad0 和 /dev/ad2。

metadata (元数据) -- 在不同的 RAID 中,它包括阵列成员及其尺寸、位置,逻辑磁盘及分区的描述和磁盘阵列的当前状态。

镜像/双工 -- RAID 1 保持两块硬盘的数据一致。换句话说,它将一块硬盘的数据镜射到另一块硬盘。若两块硬盘同接在一根 IDE 数据线上,则称为镜像;若两块硬盘接在不同的数据线上,则称为双工。因为单一数据线易造成单点故障,所以采用双工的占大多数。

在安装操作系统的过程中配置镜像/双工

若你打算用 RAID 1,为避免节外生枝,购置两块一模一样的硬盘(相同的型号和尺寸)。若型号或尺寸不一致,事情将会变得很复杂;就算经过艰辛的配置成事了,到头来,你只能以浪费较大硬盘多出来的空间收场。将一个作为第一主盘,另一个作为第二主盘,接好两块一样的硬盘。在安装操作系统之前,再次检查 CMOS 是否已认出两块硬盘。

按自己喜欢的安装方式开始安装 FreeBSD 任一版本(5.3 或以上)。到了 Select Drives (选定硬盘)菜单时,将会显示 ad0 和 ad2。选 ad0,因为你将把操作系统安装于该主盘上。

进入 fdisk 界面后,删除所有现存的分区,然后选 Use entire disk (使用整个磁盘)。当提示启动菜单时,选 Standard MBR (标准 MBR)。

来到 disklabel 界面时,根据自己的需要将 ad0 分区。若不知道该怎么做,选 a 让系统自动分区。然后选择预设的安装套件和安装媒体源,让操作系统如常安装。

安装完毕后,浏览到 postinstall configurations (后安装配置)设置你的时区,创建用户帐号,设定 root 的密码等。

不过,当回到 sysinstall 主菜单时,不要急于重启系统。按下 Alt-F4,进入命令提示行。我们首先键入 csh 命令,这样就得到一个带历史记录的 shell (默认的 shell 是 Bourne)。

创建镜像/双工很简单,只要键入:

# gmirror label -v -b round-robin gm0 /dev/ad0

其中,gmirror label 创建镜像;-v 开启冗长模式;-b round-robin 选用平衡算法(目前 round-robin 算法性能最佳);gm0 即镜像/双工的名称(该名称代表第一个 GEOM 镜像);/dev/ad0 代表用以镜射的源盘。

然而,若现在便键入命令会使你失望。

# gmirror label -v -b round-robin gm0 /dev/ad0

Can't store metadata on /dev/ad0: Operation not permitted

(无法将元数据保存于 /dev/ad0 上:禁止操作)

这是一种安全特性,表示磁盘已被加载以便写入;因此不可用。不过,你可通过 sysctl MIB,暂时让 gmirror 绕过这个特性,从而创建镜像/双工。

# sysctl kern.geom.debugflags=16

kern.geom.debugflags: 0 -> 16

不用担心,系统重启后(数分钟后的事),该 MIB 将复位为 0。再来一次:

# gmirror label -v -b round-robin gm0 /dev/ad0

Metadata value stored on /dev/ad0

就这样,RAID 1 配置告成。

我们有必要让操作系统每次重启时自动装载 RAID。这需要修改两个文件。第一个文件当前是空的,用 echo 创建即可:

# echo geom_mirror_load="YES" > /boot/loader.conf

第二个文件 /etc/fstab 不是空的,所以我建议在修改前做个备份:

# cp /etc/fstab /etc/fstab.orig

# vi /etc/fstab

将所有 ad 改为 gm,在 /dev 后插入 mirror。比如将 /dev/ad0s1a 改为 /dev/mirror/gm0s1a。如果没有创建别的分区,你会看到以 a, b, d, e 和 f 结尾的五个 ad0s1 分区;你需要逐一修改。

修改完毕后,再仔细检查对 /etc/fstab 及 /boot/loader.conf 作出的更改。虽说事后可以修正,但是因敲错一个字而不能启动新的系统是很烦的事。

注:有些教程说过需要在 /etc/rc.conf 中加入 swapoff 选项。现已没必要。同样地,没必要将 shutdown -r now 当成 reboot 来用。

确定没有错误之后,取出安装盘后,按下 Alt+F1 退出安装菜单。

启用镜像/双工

若你注意看启动信息,在系统读出磁盘信息后,你应看到以白色粗体字显示的信息:

GEOM_MIRROR: Device gm0 created (id=2125638583).

GEOM_MIRROR: Device gm0: provider ad0 detected.

GEOM_MIRROR: Device gm0: provider ad0 activated.

GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.

GEOM_MIRROR: Device gm0 already configured.

Mounting root from ufs:/dev/mirror/gm0s1a

系统启动还在继续。不过,若在 /etc/fstab 敲错了一个字,启动过程将就此停止并等待你输入正确的信息。在下面例子中,我在修改 /etc/fstab 时忘了插入 mirror 一词,即将本应为 /dev/mirror/gm0s1a 的误作 /dev/gm0s1a,这样,FreeBSD 便不能找到我的根文件系统。

Mounting root from ufs:/dev/gm0s1a

setrootbyname failed

ffs_mountroot: can't find rootvp

Root mount failed: 6

Manual root filesystem specification:

<fstype>:<device> Mount <device> using filesystem <fstype>

e.g. ufs:da0s1a

? List valid disk boot devices

<empty line> Abort manual input

mountroot>

所幸的是,它并不是看起来那么可怕。可以从列出有效的启动分区入手处理故障:

mountroot> ?

List of GEOM managed disk devices:

mirror/gm0s1f mirror/gm0s1e mirror/gm0s1d mirror/gm0s1c mirror/gm0s1b

mirror/gm0s1a mirror/gm0s1 ad2s1 mirror/gm0 ad0s1 ad2 acd0 ad0 fd0

若你正确输入 / 文件系统的位置,它将继续启动(boot,原文误作 reboot)下去。

mountroot> ufs:/dev/mirror/gm0s1a

Mounting root from /dev/mirror/gm0s1a

登入之后,先更正 /etc/fstab 的误处并重新启动。正常启动且成功登入后,键入以下命令确定镜像的每个分区已被成功加载。

% df -h

Filesystem Size Used Avail Capacity Mounted on

/dev/mirror/gm0s1a 248M 35M 193M 15% /

devfs 1.0K 1.0K 0B 100% /dev

/dev/mirror/gm0s1e 248M 12K 228M 0% /tmp

/dev/mirror/gm0s1f 7.3G 99M 6.7G 1% /usr

/dev/mirror/gm0s1d 248M 196K 228M 0% /var

df 不显示交换分区的信息,可以用以下命令核实:

% swapinfo

Device 1K-blocks Used Avail Capacity

/dev/mirror/gm0s1b 629544 0 629544 0%

同步镜像/双工

剩下的事就是同步两块硬盘的数据了。只要键入向镜像插入第二块硬盘的命令,数据同步将自动进行。

# gmirror insert gm0 /dev/ad2

GEOM_MIRROR: Device gm0: provider ad2 detected.

GEOM_MIRROR: Device gm0: rebuilding provider ad2.

看看进展如何:

# gmirror list | more

Geom name: gm0

State: DEGRADED

Components: 2

Balance: round-robin

Slice: 4096

Flags: NONE

GenID: 0

SyncID: 1

ID: 2125638583

Providers:

1. Name: mirror/gm0

Mediasize: 10262568448 (9.6G)

Sectorsize: 512

Mode: r6w5e2

Consumers:

1. Name: ad0

Mediasize: 10262568448 (9.6G)

Sectorsize: 512

Mode: r1w1e1

State: ACTIVE

Priority: 0

Flags: DIRTY

GenID: 0

SyncID: 1

ID: 3986018406

2. Name: ad2

Mediasize: 10262568448 (9.6G)

Sectorsize: 512

Mode: r1w1e1

State: SYNCHRONIZING

Priority: 0

Flags: DIRTY, SYNCHRONIZING

GenID: 0

SyncID: 1

Synchronized: 1%

ID: 1946262342

注意看 Flags 行上的 SYNCHRONIZING 字眼。这两块硬盘的数据要同步需要一些时间,如当前所示才一个百分点。据我所知,10GB 的硬盘大约需时 30 分钟,75GB 的约需两个半小时。若你觉得好奇,查查进度:

# gmirror status

Name Status Components

mirror/gm0 DEGRADED ad0

ad2 (2%)

数据同步完毕后,你将看到以白色粗体字显示的系统信息:

GEOM_MIRROR: Device gm0: rebuilding provider ad2 finished.

GEOM_MIRROR: Device gm0: provider ad2 activated.

若再次输入 gmirror list,你会看到 State (状态) 已从 DEGRADED (已降级) 变成 COMPLETE (完毕),Synchronized (已同步) 一行已不见了。若在 Flags 行上看到 DIRTY (不干净) 字眼,不用担心;那仅表示系统已写入新的数据但尚未完成镜射。若你在磁盘平静下来后等数秒钟,则你将会看到 Flags 行变成了 NONE (无)。

重启系统,最后检查一下。

这回启动信息应包含以下这些:

GEOM_MIRROR: Device gm0 created (id=2125638583).

GEOM_MIRROR: Device gm0: provider ad0 detected.

GEOM_MIRROR: Device gm0: provider ad2 detected.

GEOM_MIRROR: Device gm0: provider ad0 activated.

GEOM_MIRROR: Device gm0: provider ad2 activated.

GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.

Mounting root from ufs:/dev/mirror/gm0s1a

结语

GEOM 实用程序在日益进步,它的开发者不断地将新特性及更新上传到网页去。利用 cvsup 更新你手上的 FreeBSD 版本或在决定安装 FreeBSD 时选用最新的版本是很重要的。

若你想取得镜像/双工的性能数据,用 gstat(8)。通读 gmirror(8) 的说明文字也是值得倡议的,特别是在你想了解如何更换一块坏硬盘的情况下。

来源:freebsdchina

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有