




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux 软件磁盘阵列的实现 冯剑锋概述:磁盘的读写效率和磁盘的使用安全性是我们日常使用过程中密切关注的问题之一。笔者通过解决raid0 (分散读写模式)和raid1(镜像模式)的问题,达到limux中软件磁盘阵列实现的目的。关键词:Linux、磁盘阵列本文中我要解决在linux中用软件实现 raid0 和 raid1 的软件磁盘阵列中所遇到的问题。(raid0 - 是指将数据散布在不同的硬盘上操作, 无冗余数据, 读写都可以并行操作, 速度快, 英文简称为 striping, 以下译作分散读写; raid1 - 是指磁盘镜像, 英文为 mirroring)。 我想实现基于分散读写模式(striping)的镜像模式(mirroring),分散读写模式具备优异的读写性能, 而镜像模式带来备份和读的性能增强。我使用一个2.0.30 的内核, 实现了 raid0(striping). 然后我将内核升级到 2.0.35, 我开始处理 raid1,从打草稿开始! 因此一个简化工作的好方法是, 首先使 raid0 能用, 之后增加 raid1。 工作流程是这样的: 工作于内核 2.0.30 下的 Raid0 (striping) 从 2.x 版本开始, 内核已经实现了线性和 raid0(striping) 模式。 必须重新编译内核以带有多设备界面支持(multiple devices)。我强烈建议将它编译到内核中,尽量不要使用模块方式。检查是否多设备界面(multiple devices)已经安装, dmesg |more 然后检查是否 存在 md 驱动器(md driver)和 raid0 已经注册(raid0 registered)的信息,或敲入 cat /proc/mdstat 查看md 驱动器的状态。应该看到 /dev/md0 到 /dev/md3 处于非激活状态。内核工具 mdtools-0.35 通常并不随销售包提供. 那里面有建立, 运行和使 raid 停止的工具。 Slackware 的销售包中可以找到它( 大小为 23k ) /pub/Linux/distributions/slackware/slakware/ap1/md.tgz 下载到 /usr/local/src 然后: cd / tar -zxvf /usr/local/src/md.tgz 它将把文件放在正确的位置。sbin/mdadd sbin/mdcreate usr/etc/mdtab install/doinst.sh usr/man/man5/mdtab.5.gz usr/man/man8/mdadd.8.gz usr/man/man8/mdcreate.8.gz usr/doc/md/COPYING usr/doc/md/ChangeLog usr/doc/md/README usr/doc/md/md_FAQ 通读 README 文件,这份文档极适合于内核版本 2.0.30 和 线性(linear)/raid0 模式。 Linux 日报(Linux Journal)(1998年六月或七月刊)中有一篇精采的介绍怎样实现 raid0(striping) 的文章。 Linux 公报(LG) 中有另一篇文章, 也有所帮助: /lg/issue17/raid.html 在 fsck -a 之前开始启动 raid 阵列, 在 Slackware 中它(fsck)通常位于 /etc/rc.d/rc.s 文件中, 而在 /etc/rc.d/rc.0 和 rc.6 中停止 raid 阵列. (我想: 既然在 slackware 中这两个文件相同, 我们能不能做一个软联结, 然后只需修改一个?) 为了检查它是否工作, 敲入 cat /proc/mdstat, 它(输出的信息)将指示 md 设备的情况. (/dev/md0 raid0 using /dev/sda1 and /dev/sdb1)。测试raid. 关机, 上电, 看看它是否如正常工作。 我曾做过有趣的拷贝, 使用 cp -rap 开关将全部目录结构拷入 raid 阵列中. (测试完成)然后修改 /etc/fstab 以包括新的驱动器(指 raid)。交换分区不需要分块操作. 当一个优先级启用时, 他们将自动这样做。现在使用 UPS! 如果(运行中)掉电了,将失去raid 和上面的所有数据!应该使用一个 UPS 后备电源. UPS 的作用是让系统在灯火管制或电源失败时能够保持运行一小段时间。UPS 能够在电源失败时通过一个串口通知系统。 在后台, 有一个精灵程序在运行监控这个串口。 当它被通知电源失败时, 它将在发出关机命令前等待一段预定时间 (通常是 5 分钟)。 如此的工作原理是如果 5 分钟内还是无电, 那么将持续很长时间。 大多数 Linux 销售包带有基本的 UPS 电源精灵程序。使用 man powerd 可以得到更多信息,这是一个简单的精灵程序, 它在 /etc/inittab 中. 从根本上来说, 一个 哑 UPS, 只是在串口保持一个接力联结。powerd 检测这个联结是否已经断掉. 一旦 联结断掉, 它将在预定时间后将 PC 关闭. 警告用户, 并且向 root 发一封邮件。 我使用一台 APC 智能 UPS, 它通过串口通讯. 有一个称作 apcupsd 的精灵软件安装文档也十分不错(如下)/server/apcupsd/ RAID0 基于 2.0.31 to 2.0.34 没有尝试过. 因为我直接从 2.0.30 升级到 2.0.35, 一个最新的稳定版本。 RAID0 基于核心版本 2.0.35 mdtools 在我家中的机器上编译地很顺利(运行 2.0.30), 但在我的工作机上不能编译 (已经升级到 2.0.35). 我不断地得到一个关于 MD_Version (记不住确切的名称)没有定义的错误。 经过大量挠头的搜索, 我发现在 /usr/src/include/md.h 中有 md 驱动器 的版本号。 在版本 2.0.30 中, 它是 0.35; 而在 2.0.35 中它是 0.36. 如果使用 mdadd -V 它将指示 mdadd 可以工作的 md 的版本号。 所以我取得了错误的 mdtools 版本。 这里是正确版本的位置: /pub/linux/daemons/raid/raidtools-0.41.tar.gz 下载到 /usr/local/src 然后 tar -zxvf raidtools-0.41.tar.gz 将生成一个新目录 /usr/local/src/raidtools-0.41 进入新目录, 阅读 INSTALL 文件, 然后 ./configure 必须做make和make install,应该有一个新的 mkraid 和 mdadd 的运行文件(binary)。 敲入 mdadd -V 以 检查是否运行码已经更新了. 它应该显示一些像 mdadd 0.3d compiled for raidtools-0.41的信息。 然后阅读 QuickStart.RAID 获得最新信息。对于 raid0, 比以前版本没有多少改变。RAID1 基于内核 2.0.35 若想使用 raid1, 4 或 5,必须为内核打一个补丁, 它位于 /pub/linux/daemons/raid/alpha/raic-2.0.35.tz 拷贝到 /usr/src directory, 将补丁解压缩: tar -zxvf raic-2.0.35.tz 注意补丁将搜索 /usr/src/linux-2.0.35 目录. 如果将 2.0.35 的源码安装在目录 /usr/src/linux 下,需要mv /usr/src/linux /usr/src/linux-2.0.35, 然后做一个符号联结 ln -s /usr/src/linux-2.0.35 /usr/src/linux 为了使用这个补丁, 进入目录 /usr/src: patch p现在可以去重新编译内核,选择多设备(选项)时,将看到有选择 raid1,4和5. 依次步骤是 make menuconfig (or config or xconfig) make clean make dep make zImage make modules (如果使用了模块) make modules_install 将新内核拷到系统中适当的地方(/ 或 /boot)。同时拥有一个无 raid 的内核和一个有 raid 的内核。能够通过修改 lilo.conf 来确定使用那一个内核启动。 这根本不困难, 查看 /usr/lib/lilo 的例子和文档。查看 dmesg | more 的输出内容确定 md 驱动器已经装载, raid0 & 1 已经注册. 敲入 cat /proc/mdstat 看是否有了新的 md 驱动器,应该看到 16个 md 驱动器而不是 4 个。 必须升级raidtools. mdadd, /etc/mdtab 和 mdcreate 是旧的, 新工具应该是 raidstart, /etc/raidtab 和 mkraid. 从这一点上来说, (当前的)文档的确是过时了。 /pub/linux/daemons/raid/alpha/raidtools-19981005-B-0.90.tar.gz 下载到/usr/local/src 然后 tar -zxvf raidtools-19981005-B-0.90.tar.gz 这将产生一个新目录 /usr/local/src/raidtools-0.90. 进入这个目录作 ./configure 接着做 make 和 make install。一个较简单的方式完成内核 2.0.35 下的 RAID0 使用两个 scsi 设备 /dev/sda1 和 /dev/sdb1 完成一个 raid0 阵列的步骤: 将 /dev/sda1 和 /dev/sdb1 分区, 让他们有相同的块大小。 将分区的类型设为 0xfd. 这是用来让新内核在启动时自动识别 raid. 按下面例子修改 /etc/raidtab 文件# Striping example # /dev/md0 using /dev/sda1 and /dev/sdb1 raiddev /dev/md0 raid-level 0 nr-raid-disks 2 persistent-superblocks 1 nr-spare-disks 0 chunk-size 32 device /dev/sda1 raid-disk 0 device /dev/sdb1 raid-disk 1 cat /proc/mdstat 检查输出信息, 确定 md 设备是否正确地做好。 使用 mke2fs -c /dev/md0 格式化新 raid 设备。 产生一个安装目录(例如 /raidtest)以测试它是否工作。 mount /dev/md0 /raidtest 是否能将一个文件拷贝到 /raidtest. 如果硬盘设备有各自独立的 LED 灯 ,能够看到两个设备都在工作。重启动, 检查内核是否自动将 raid 设备 md0 关闭. 会有一些信息滚过屏幕。检查重启动过程中计算机是否自动识别 raid 设备和 /dev/md0 是否作为一个 raid0 阵列。 如果不是, 检查前几个步骤, 特别是步骤2和步骤4。基于内核 2.0.35 RAID1 的新方式 使用两个 raid0(striping)设备构造一个 raid1 阵列 /dev/md2 的步骤如下, 两个 raid0 设备为 /dev/md0 (/dev/sda1 + /dev/sdb1) 和 /dev/md1 (/dev/sdc1 + /dev/sdd1): 按照上面(建立 raid0 的)步骤建立 /dev/md0 和 /dv/md1。 重要信息:不能安装或者在 /dev/md0 和 /dev/md1 上建立文件系统. 这只是测试 raid0 是否工作!按照下面例子修改 /etc/raidtab 文件:# Striping example # /dev/md0 using /dev/sda1 and /dev/sdb1 raiddev /dev/md0 raid-level 0 nr-raid-disks 2 persistent-superblocks 1 nr-spare-disks 0 chunk-size 32 device /dev/sda1 raid-disk 0 device /dev/sdb1 raid-disk 1 # /dev/md1 using /dev/sdc1 and /dev/sdd1 raiddev /dev/md1 raid-level 0 nr-raid-disks 2 persistent-superblocks 1 nr-spare-disks 0 chunk-size 32 device /dev/sdc1 raid-disk 0 device /dev/sdd1 raid-disk 1 # Mirror example # /dev/md2 using /dev/md0 and /dev/md1 raiddev /dev/md2 raid-level 1 nr-raid-disks 2 persistent-superblocks 1 nr-spare-disks 0 chunk-size 32 device /dev/md0 raid-disk 0 device /dev/md1 raid-disk 1 敲入 mkraid -f /dev/md2 重要信息,这一步要化一段时间, 因为磁盘要进行同步cat /proc/mdstat 查看是否 md 设备正确地完成. 使用 mke2fs -c /dev/md2 格式化新 raid 设备 产生安装目录(例如 /raidtest_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级英语上册新教材解读课件(人教版2024)
- 急性腹痛问诊要点2025
- 河南省周口市扶沟县2023-2024学年七年级下学期7月期末考试英语试题(含答案无听力音频及原文)
- 甘肃省酒泉市敦煌中学2024-2025学年高一上学期期中考试数学(B)试卷(含答案)
- 2025年云南中考数学第一次模拟试卷(无答案)
- 2025年广东省广州市花都区中考二模道德与法治试卷(含答案)
- 2025室内墙面涂料供货合同样本范文
- Tiagabine-d6-NO050328-d-sub-6-sub-生命科学试剂-MCE
- Glycidyl-caprylate-d15-2-3-Epoxypropyl-octanoate-d-sub-15-sub-生命科学试剂-MCE
- 2025年中国视觉人工智能行业市场前景预测及投资价值评估分析报告
- 2008年武汉单位劳动合同范本
- 2024年官方兽医牧运通考试题库(含答案)
- 气压传动课件 项目五任务二 压印设备压力顺序阀控制回路
- 河砂、碎石生产质量保证措施方案
- 工程款支付审批表
- 河北省唐山市2025届高考物理二模试卷含解析
- 施耐德PLC-标准指令库
- 小学体育与健康 水平三 第五章 低单杠 教案(PDF版 )
- 封阳台换窗户免责协议书
- 煤矿融资计划书
- 陈述句与反问句互改(课件)-2022-2023学年三年级语文公开课
评论
0/150
提交评论