LinuxSir.cn,穿越时空的Linuxsir!

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

[PHP][/PHP]的新bug...

[复制链接]
发表于 2003-5-2 14:58:46 | 显示全部楼层 |阅读模式
[PHP]


什麽是 MD ?
  MD 就是指 Multiple Devices,意思是把一些不在同一颗 HD 上的 partitions 集合在一起,变成一个大的合体,原理很像我们常听说的 RAID,但这个 (md) 是由 kernel 去做 (一般常见而言,RAID 是由 Controller 自行处理,如 DPT SmartRAID 系列,或 IFT-3000 等高阶 Controller),所以在效能上自然输了不少。但它的好处是,用 linear 或 RAID 0 时,可以混用 IDE 及 SCSI HD 上的 partitions。

如何使用 MD ?
Step 1: 准备工作
把你的 kernel 改为大於 1.3.69 的版本, compile 支援 MD 吧.
去抓 md035.tar.gz, 这是做 md volumn group 的程式.
把上面讲的东西 compile 好并 install 完成; 在 make install 时会同时 帮你把 /dev/md0 ~ /dev/md3 做好, 这点不必麻烦自己手动跑 mknod 了.
在 /etc/rc.d/rc.S 的开头中加入一行:
/sbin/mdadd -ar

它要比 swapon 等和 filesystem 有关者更早执行的, 因为也许你的 swap 或 /usr 就是建在某个 md device 上. 但它必需在 kerneld 之後执行 ( 如果你有用到 kerneld + modules 的话)

Step 2: 开始了
考虑一下你要把哪些 partitions 兜在一起,而且要了解一件事: 把同一颗 HD 上的 partitions 搞在一起,反而会变慢而且又操硬碟!
好, 例如我打算把 /dev/sda1, /dev/sdb1, /dev/sdc1 做成一个 /dev/md0, 参数我们选 RAID0,chuck size 是 8Kbytes, 那就执行:
mdcreate -c8k raid0 /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1

如此就完成了 /etc/mdtab 中的设定 (并计算出一个 crc32 的检查码).
注意! 那个 /dev/sda1 /dev/sdb1..... 的顺序很重要,将来可以照此顺序重建 (如果你的 HD 顺序变了,例如中间多加了一颗 HD......) /etc/mdtab 而不必 重建其内容。至於那个 -c8k 的参数 (chuck size=8kbytes) 请参考 md 内附的说明文件。这个参数是 pagesize (在 x86 上应都是 4k) 乘 上 2 的 N 次方 (例如 0,1,2,4,8),所以应为 4k、8k、16k、32k...... 等值中选一个来用,我不多讲了,请自己用功一点......

再来我们 cat 一下 /proc/mdstat 看看,如果还没跑 mdadd -ar 的话,应该 看到这样: Personalities : [1 linear] [2 raid0]
read_ahead not set
md0 : inactive
md1 : inactive
md2 : inactive
md3 : inactive



因为你尚未 reboot 过,所以 mdcreate 完後, 也尚未跑 /etc/rc.d/rc.S 去 执行那个 mdadd -ar。 OK,那就手动执行一下 mdadd -ar 吧,然後再 cat 一次 /proc/mdstat 看看,应该是像这样的:

Personalities : [1 linear] [2 raid0]
read_ahead xxx sectors
md0 : active raid0 sda1 sdb1 sdc1 xxxxxx blocks 8k chunks
md1 : inactive
md2 : inactive
md3 : inactive



其中那些 xxxxx 是我这儿的数字,也许您的就不同了 (那个 read_ahead 不一定 有值,也许还是 not set 而已)

至此,您已经可以使用 /dev/md0 来玩了。例如要准备当 swap,那就执行 mkswap /dev/md0。或许您要当 ext2 fs,那就执行 mke2fs /dev/md0。 再来就看您的用途罗......
尚有 mdstop、mdrun 那些程式,请自行研究好吗?
Step 3: 测试报告
我已经在两颗很烂又很旧的 IBM 330MB 老 HD 上 (它的速度只有 3600rpm, internal transfer rate 约 1.x MB/s,而且 SCSI bus 的速度会变成 5MB/s) ,做了一个 100MB 的 swap 在 /dev/md0 上,及一个 512MB 的 ext2 fs 在 /dev/md1 上,准备要 mount 在 /usr 上使用 (很冒险吧?)。 於是, 我先 mount -t ext2 /dev/md1 /mnt 後, 把所有的 /usr/* 拷贝到 /mnt 下,再清空 /usr/* (或是 先 mv /usr /usr1 再 mkdir 一个空的 /usr 子目录)。然後改一下 /etc/fstab 加入: /dev/md0        swap    swap    default 1 1
/dev/md1        /usr    ext2    default 1 1



然後 reboot 我的机器 (因为很多 daemon 都用了旧的 /usr/sbin/ 中的东西)

嗯,在 reboot 中,我看到它真的在 e2fsck /dev/md1 唷,而且成功地 mount 在 /usr 下,而且 swap 也加入了。这时我看了看 /proc/mdstat: Personalities : [1 linear] [2 raid0]
read_ahead 120 sectors
md0 : active raid0 sdb1 sdc1 100320 blocks 4k chunks
md1 : active raid0 sdb2 sdc2 524288 blocks 8k chunks
md2 : inactive
md3 : inactive



看起来不错的样子,也没问题。

再来就是玩 compile kernel 看看罗。在 /usr/src/linux 我花了一些 时间 make xxxxx, 觉得这个速度不输给比它快了两倍多的 Quantum Lightning 系列耶。
开 X-window 也跑得很顺。
swap 我也在观察, 也很顺。
再来,我搞了一招狠招: # cd /usr
# find -type f -name "*" -exec cat {} > /dev/null \;



意思是把所有的 /usr 下的档案都 cat 到 /dev/null 去,狠狠地 操这个 /dev/md1。 结果很不错, 220MB 的资料在 14 分钟内就解决了。
不过,我碰到了个问题。因为其中有一颗 HD 不太稳,在尔後我一直跑这个 操死硬碟的指令时,就一直卡在某个有问题的 (读不出来) 的档案上。於是 在砍掉那些档案後,就十分顺利了。我会再验证这个问题的。

好,最後我发现一件事;就是如果是把东西拷入 md 的 volumn 的话,是没 有问题,而且也读得很正常。一但在其上开始工作 (例如 compile something) 的话,之後就无法把一些新增的档案拷至其他 filesystem,cp 指令 (或是 cat,或是其他读它的指令都会) 将『死得很难看』变成 dead process。 这是我後来使用『完全正常』的两颗 540MB 的硬碟测试之後的结论。 而且,如果使用 (例) mke2fs -c /dev/md1 的话,在 test 完後会出现一个 'Unknown md_iotcl 11' 的讯息。显然这个 md-0.34 版有待改进。
  无论如何,这个 md 的美意,大家都很欣赏吧?所以我花了功夫写下使用过程、心得及建议。当然,我现在不鼓励大家使用它,原因 (或说现象吧) 你也看得很清楚了 (如果我写得不算乱的话),总之就是大家再观察一阵子,相信好的东西及概念将会早日带给大家更便利的功能的。




[/PHP]

会出现两份的内容

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

本版积分规则

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