在W500上安装MacOS Snow Leopard 10.6.2记录

win7 qijianban
参考:http://bbs.pcbeta.com/thread-592288-1-1.html

1. 安装了,bootthink 2.4.6
解压到并安装到C:\Darwin\目录下,以Administrator身份运行了install.bat。

2. 安装HFS-explorer和jre运行环境。
使用这个软件打开SL.dmg 的时候出了问题,UDIF file unsupported or damaged
搜索ggc到使用ultraiso先转换o为ISO,再转换为DMG。试试再说。
(用ULTRAISO先将下载的DMG转化为ISO,然后用HFSEXPLRER转换为DMG,再用硬盘助手就可以写入了)
这么一转换,文件变大了,从原来的5.6G变成了6.6G了。
现在可以使用HFS-explore打开了,这一步完成了,接下来下一步了。
3. 安装硬盘安装助手0.3,以administrator身份运行ddmac, 向空白分区k中写入这个新转换过来r的镜像文件。
(另,这个macdd可不可以用linux系统的dd来做呢?)
执行结果:
Image file:C:\SL10.6.2\2Mac OSX SonwLeopard 10.6.2_10C2234_Retail.dmg
Type: dmg.
File size:7192113152 Bytes
Image size:7192113152 Bytes
To driver:z
Driver size:104861794304 Bytes
Dump image file to driver,please wait...
Change partition type to AF: Success
All done, have fun!

4. 修改写入镜像中的文件,以便能安装在PC中。
使用的软件为,macdriver
macdriver 7.x 只能用在winxp, windows vista系统。
macdriver 8.x 可用在win7系统,因此下载了最新的8.0.5试用版本。
安装,重启电脑。
现在已经能看到写入的安装盘镜像分区了,打开替换文件,OSInstall。
(这儿有一点,安装指南中指定的目录是隐藏的,要手工在路径栏中输入p这个路径即可找到)

5. 进入bootthink菜单后,找到安装分区,风火轮了10秒后来了所谓的“五国”问题。
http://i791.photobucket.com/albums/yy193/samsonwtsui/mac010.jpg
回来安装指南,确定错误在哪?
这个错误是因为ATI显示卡的问题,在BIOS中设置集成的显示卡,安装能够继续了。
不过安装完后重新启动的时候依旧需要使用bootthink,否则无法启动。原来的可以启动Leopard 10.5.7的grub2菜单已经不能再启动Snow Leopard 10.6.2了。这个问题还需要解决。

6。进入系统设置账号信息后,系统就可以使用了。
这里有两个问题,默认启动分辩率只有1024x768 .(这时使用的显示卡为intel集成显示卡)。
解决办法,在启动到bootthink系统选择菜单时,按F8进入其命令模式,输入"Graphics Mode"="1600x1200x32",系统才能正常进入到这个分辩率下,显示的效果也比较好。
还有一个声卡的问题,播放大概10来分钟时间的itunes之后,声音就爆了,无法停止,需要重启动系统才能恢复,应该再找一个驱动试试。

7。安装ATI显示卡驱动,
系统自带的ATIRadeonx2000.kext会导致系统启动过程“五国”问题,详细信息显示内核panic。
解决办法为,把这个删除,安装RadeonHD.kext包。

sudo mv /System/Library/Extensions/ATIRadeonX2000.kext /System/Library/Extensions/ATIRadeonX2000.back

then reboot with -x

boot in and run

sudo nano /System/Library/Extensions/RadeonHD.kext/Contents/Info.plist


enableHWCursor

改为:
enableHWCursor

这个驱动包下载也比较好找,这里不提供了。
然后在BIOS中开启ATI显示卡后,系统起动起来了,
这个驱动能支持的比较好的分辩率为,1400x1050。如果非要再高的话,可以上到1600x1200,不过这时候显示有点重影了,而且在屏幕右侧还有一块没有显示出来,也就是桌面大到屏幕外面去了,这个不知道能怎么解决。

在网上说这种方法能开启QE效果,但我这里不行,不知道还需要怎么改改。
显示卡信息只显示为了,
稿
显示器:

类型: GPU
总线: PCIe
PCIe Lane 宽度: x16
VRAM(总和): 256 MB
厂商: ATI (0x1002)
设备 ID: 0x9591
修正版 ID: 0x0000
内核扩展信息: 无载入内核的文本
显示器:
显示器:
分辨率: 1400 x 1050
像素深度: 32 位彩色 (ARGB8888)
主显示器: 是
镜像: 关
联机: 是

8。 安装xcode开发环境,
xcode在这张10.6.2的安装光盘上有,把这个盘挂上后,这个目录下有安装包,
/Volumes/Mac OS X Install DVD/Optional Installs.localized/Xcode.mpkg

直接双点这个包即可安装上所有的苹果系统开发工具,大概用到2.6G的磁盘空间。

现在用于SL系统的最新Xcode版本为,3。2。1, 如果希望使用最新的Xcode包,则在系统更新中可以直接升级上去。

9. 安装开发工具及常用命令行工具,wget, subversion, fink
fink最新版本为,0.29.10,目前还没有苹果Snow Leopard 10.6的二进制版本,需要下载源代码自己编译。
编译过程参照:http://www.finkproject.org/download/srcdist.php

fink --help

fink selfupdate 同步包信息
fink list xxx 按包名查询一个包
fink install xxx 安装一个包, 能处理简单的依赖,但有时候处理不好。
fink remove xxx 删除一个包。

VC2005编译Qt实现静态链接C运行库的方法

本站的nullfxp项目需要发布Windows版本,因而需要使用VC编译Qt,并用此Qt编译nullfxp。

默认情况下,Qt源代码编译的时候使用动态链接C运行库的方法,在发布使用VC2005编译的程序时,需要想办法发布C运行库,否则可能用户机器上运行出错。

因此,在使用过程摸索出一种方法,能让Qt程序静态链接C运行库,并且不使用VC2005的manifest方法。这样编译出来的程序可以在任意版本的Windows平台运行了。当然缺点就是编译出来的程序稍微大一些。

下面说明一下我使用的静态化方法,这需要修改Qt源代码树中的配置文件:.

下面的说明基于VC2005和Qt-4.6.2,其他版本也可以用此思路相应调整实际修改的代码。

  • 修改Qt-src-path/mkspec/win32-msvc2005/qmake.conf,把其中的CONFIG变量中的embed_manifest_dll和embed_manifest_exe去掉。这样告诉VC2005在编译Qt及Qt程序的时候不产生manifest文件。
  • 修改Qt-src-path/mkspec/win32-msvc2005/qmake.conf,把其中的
    QMAKE_CFLAGS_RELEASE = -O2 -MD
    QMAKE_CFLAGS_DEBUG = -Zi -MDd
    修改为
    QMAKE_CFLAGS_RELEASE = -O2 -MT
    QMAKE_CFLAGS_DEBUG = -Zi -MTd
    。这告诉VC2005在编译Qt及Qt程序的时候,静态链接C语言运行库。

通过这两处修改,使用这个版本的Qt编译出来的程序不需要附带C语言运行库安装包,程序也能良好运行于所有Windows平台。

PHP实现的二分查找法

今天做题的时候这个二分算法都没写出来,真惨。
再记下来看一遍。

<?php 
$a=range(0,9546); 
$high=count($a) - 1; 
$mid=0; 
$low=0; 
$found=0; 
$m=456; 
while( ($low<=$high) && ($found==0)) 
{ 
    $mid=floor( ($low+$high) / 2 ); 
    if($m<$a[$mid])    $high=$mid-1; 
    elseif($m>$a[$mid])    $low=$mid+1; 
    else     
    { 
        $found=1; 
        $key=$mid; 
    } 
    $i++; 
} 
echo "共进行了{$i}次查找\n<br />\n"; 
echo "找到的下标是{$mid}\n<br />\n"; 
echo "找到标志位{$found}\n<br />\n"; 
?>

grub2最新版本1.98发布及新功能试用手记

系统引导加载程序 GNU GRUB 已发布 1.98 版本。该版本主要包含以下改进:

  • Yeeloong 支持
  • 基于 Widget 的菜单
  • 针对 EFI 的多重引导支持
  • 支持保存默认的菜单条目(利用新的 grub-reboot 和 grub-set-default 工具)
  • 单元测试框架
  • 支持 Multiple 终端
  • 通过新工具 grub-mkpasswd-pbkdf2 支持加密密码
  • 已移除 grub-mkfloppy,利用 grub-mkrescue 可制作软驱映像
  • 为 GNU/Hurd 添加了 grub-probe 支持
  • 增添了 gettext 支持

参阅 GRUB 1.98 发布公告可了解详细情况。

GRUB 1.98 的源代码可从这里下载

试用系统环境为gentoo linux x86_64。
下面的试用grub.cfg中,添加试用新功能,中文字体,分辨率设置,背景图片。
其中wqy-zenhei.pf2是使用 grub-mkfont命令从文泉驿字体转来的。
转换命令:
grub-mkfont -v —output=wqy-zenhei.pf2 /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc

试用结果,已经能正确使用上面三个新功能了,回来把效果图拍下来。

虽然grub2的功能强大,但其配置文件的语法也变的复杂,特别是这些涉及到特殊功能的地方。

如果不使用这些高级功能,其实只需要几个必须用的指令即可,与 grub1.x差别并不太大。

而且该新版本提供一些相应的工具,可自动生成grub.cfg配置文件,如grub-mkconfig等。
使用这个工具生成基本的配置文件后,在些基础做些修改即可实现这些复杂功能了。

### BEGIN /etc/grub.d/00_header ###
set default=0
set timeout=10
### END /etc/grub.d/00_header ###
 
# splash for grub1
# splashimage=(hd0,1)/boot/grub/play_gentoo.xpm.gz
 
#splash for grub2
# insmod terminal
# insmod 915resolution
# insmod gfxterm
insmod video
insmod vbe
insmod font
# insmod jpeg
# insmod png
 
# 915resolution 5c 1024 600
loadfont /boot/grub/unifont.pf2
set gfxmode=1024x768x32
terminal_output gfxterm
# terminal_output console
 
# set menu_color_normal=white/black
# set menu_color_highlight=white/dark-gray
# background_image (hd0,1)/boot/grub/kde4_air.jpg
 
insmod jpeg
if background_image /boot/grub/kde4_air.jpg ; then
  set color_normal=black/black
  set color_highlight=magenta/black
else
  set menu_color_normal=cyan/blue
  set menu_color_highlight=white/blue
fi
 
### BEGIN /etc/grub.d/10_linux ###
menuentry "Gentoo GNU/Linux, Linux x86_64-2.6.33-stable" {
        insmod ext2
        set root=(hd0,1)
        search --no-floppy --fs-uuid --set 07d046c6-f894-4795-b339-108d75eab09c
        linux   /boot/kernel-genkernel-x86_64-2.6.33-gentoo root=/dev/sda1 ro resume=/dev/sda8 ra
deon.modeset=0
        # init=/sbin/bootchartd
        initrd  /boot/initramfs-genkernel-x86_64-2.6.33-gentoo
 
}
menuentry "Gentoo GNU/Linux, Linux x86_64-2.6.32-stable" {
        insmod ext2
        set root=(hd0,1)
        search --no-floppy --fs-uuid --set 07d046c6-f894-4795-b339-108d75eab09c
        linux   /boot/kernel-genkernel-x86_64-2.6.32 root=/dev/sda1 ro resume=/dev/sda8 radeon.mo
deset=0 init=/sbin/bootchartd
        initrd  /boot/initramfs-genkernel-x86_64-2.6.32
}
menuentry "Gentoo GNU/Linux, Linux x86_64-2.6.31-gentoo (recovery mode)" {
        insmod ext2
        set root=(hd0,1)
        search --no-floppy --fs-uuid --set 07d046c6-f894-4795-b339-108d75eab09c
        linux   /boot/kernel-genkernel-x86_64-2.6.31-gentoo root=/dev/sda1 ro single
}
### END /etc/grub.d/10_linux ###
 
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
 
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
 
#### myadd
menuentry "Mac OS X 10.5.7" {
        set root=(hd0,2)
        insmod efiemu
        insmod video
        insmod vbe
        gfxmode="1024x768x32"
        xnu_kernel /mach_kernel rd=disk0s2
        if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
                xnu_mkext /System/Library/Extensions.mkext
        else
                xnu_kextdir /System/Library/Extensions
        fi
}
 
menuentry "Windows 7" {
        set root=(hd0,3)
        # chainloader /boot/grub/win7.mbr
        chainloader +1
}

emacs muse 语法



Muse的语法与wiki是一样的



directives

以'#'开头,前面不能有空白,具有的形式是 "#directive content of directive"。它在写在任意的段落前,支持任意大小写组合。你可以任意定义,以下4个是常用的。



#title 标题

#author 作者

#desc 简单描述

#date 日期



段落

由至少一个空行分开的文本为一个段落

若某段由6个以上空格(包括tab)开头,则表示该段落中心对齐。也可以用<center></center>标记

若某段由空格开头,但少于6个,则表示该段是quote形,与<quote></quote>标记是等价的。

还有两个标记常用:

<example>

<literal> 使用这个标记,表示对里面的内容不作任何解释,原封不动地保留。这样,你就可以在里面手工写上HTML代码输出到你的HTML类型的项目中。



标题

分为4级,在新段落中,以一个或多个'*'开头,后面跟一个空格,就是标题。示例如下:

* First level

** Second level

*** Third level

**** Fourth level



4种常用的文本书写方式,可以在正文中的任何地方出现,如

*emphasis*

**strong emphasis**

***very strong emphasis***

_underlined_

=verbatim and monospace=

其中'='也可以用<code></code>来代替。



列表

有3种方式:

以减号'-'表示 ,在减号前后都有空格。

- bullet item one

- bullet item two



也可以用数字加上'.'表示,前后仍然有空格

1. Enum item one

2. Enum item two



或者也可以用

Term1 ::

This is a first definition

And it has two lines;

no, make that three.



Term2 ::

This is a second definition





表格

实现是很简单的,它也只能实现简单的表格

Double bars || Separate header fields



Single bars | Separate body fields

Here are more | body fields



Triple bars ||| Separate footer fields






链接

在文章中引入链接很简单

[[link target][link description]]

[[link target without description]]



[[http://ubuntu-fans.blogspot.com][我爱Linux]]





任何行,以'#anchor'开头,其中anchor可以是任意的不含空格的文本,都被当作是个锚,你可以 pages#anchor 的形式链接。



水平线

多过4个'-'的段落就表示一条水平线,如

----

多版本gcc共存问题的解决方法

-

现在使用的gentoo系统中,总共三个版本的gcc,版本号分别为:

gcc-4.3.4

gcc-4.4.3

gcc-4.5.0-alpha

自从gcc-4.4.0开始,gcc支持一种编译优化方案,在gentoo中表现为USE选项graphite。

这个选项与两个库有关,分别为: ppl, cloog-ppl。

也就是说,如果开启了graphite选项,后面两个版本同时使用了ppl, cloog-ppl库,但是
我这情况是,经常使用的版本为gcc-4.5.0-alpha,除非遇到这个版本编译不过的包,才退回到
gcc-4.4.3版本。那么,ppl和cloog-ppl这两个库也都是使用gcc-4.5.0-alpha编译的,现在
的问题是,这两个库在普通情况下使用的gcc-4.5.0-alpha带的libstdc++库,当退回
到gcc-4.4.3版本后,ppl和cloog-ppl依然依赖于gcc-4.5.0-alpha带的libstdc++库,
使用gcc-4.4.3版本的libstdc++库不行,也就是gcc-4.4.3不能用了。

现在要解决的就是能让gcc-4.4.3正常运行,一种方法就是在gcc-4.4.3中去掉graphite选项,
还好在gentoo中有方法能让同一个包的不同版本使用不同的USE选项,我的选择是,在/etc/portage/package.use中加入两行,

sys-devel/gcc graphite
=sys-devel/gcc-4.4.3 -graphite

这样,gcc-4.4.3就不再使用ppl和cloog-ppl库了。

另外,在gentoo系统中/etc/make.conf中最好不要配置-floop-interchange -floop-strip-mine -floop-block这几个编译优化参数,
否则还是容易引起一些编译兼容性问题。

不过也有一个问题,就是要维护不同版本gcc的USE选项,稍有麻烦。

可以开始了,第一步,切换到gcc-4.5.0-alpha,其实这是系统中当前唯一能正常使用gcc了。
使用新的USE选项重新编译gcc-4.4.3。

第二步,切换到gcc-4.4.3,现在这个版本的gcc就可以正常使用了 。如果有什么不放心的,
还可以使用这个gcc再重新编译一个自己。

第二种解决方法,如果使用gcc-4.4.3编译 ppl 和 cloog-ppl,那么,在切换到gcc-4.5.0-alpha之后,
应该可以使用,但是,由于我默认常用的是最新的gcc-4.5.0-alpha版本,可能在哪次不小心的时候就会使用
它升级这两个库了,前面的解决就又需要重新执行一遍,虽然很好,但太容易反复出现问题,我目前不使用这种方法。

在gentoo上使用又显示器,扩展,镜像

首先需要在xorg.conf的下面这节中设置Virtual 值,这个值等于两个显示器的长度和、宽度和。

Section "Screen"
Identifier "aticonfig-Screen[0]-0"
Device "aticonfig-Device[0]-0"
Monitor "aticonfig-Monitor[0]-0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Virtual 2944 1200
EndSubSection
EndSection

注意其中加重的一行。这一行一般在两个显示分辨率不同的时候会用到,否则在使用xrandr设置启动另外的显示器的时候,会出现下面的错误:

然后在命令行,输入下面的命令,启动扩展显示器:
xrandr --output VGA-0 --right-of LVDS --auto

有几个参数,根据相应的情况修改,VGA-0可能是其他的名字,--right-of 表示在右边扩展,可以使用--left-off在左边扩展。
--auto 也可以改为--mode aaaaxbbbb

附:
xrandr 命令行可以很方便地切换双屏,常用方式如下,其他的可以自己探索:
xrandr --output VGA --same-as LVDS --auto
打开外接显示器(最高分辨率),与笔记本液晶屏幕显示同样内容(克隆)
xrandr --output VGA --same-as LVDS --mode 1024x768
打开外接显示器(分辨率为1024x768),与笔记本液晶屏幕显示同样内容(克隆)
xrandr --output VGA --right-of LVDS --auto
打开外接显示器(最高分辨率),设置为右侧扩展屏幕
xrandr --output VGA --off
关闭外接显示器
xrandr --output VGA --auto --output LVDS --off
打开外接显示器,同时关闭笔记本液晶屏幕(只用外接显示器工作)
xrandr --output VGA --off --output LVDS --auto
关闭外接显示器,同时打开笔记本液晶屏幕 (只用笔记本液晶屏)
(最后两种情况请小心操作,不要误把两个屏幕都关掉了。。。。)

用公司新配的电脑写离职报告

3个月才到的电脑,没想到最后一时刻到了,却是用来写离职报告,缪.
这个世界真滑烧.

发现一个有用的命令pidof

这个linux命令找到某个名字的进程的pid值。如果找不到,则返回空值。

PIDOF(8) Linux System Administrator's Manual PIDOF(8)

NAME
pidof -- find the process ID of a running program.

SYNOPSIS
pidof [-s] [-c] [-x] [-o omitpid] [-o omitpid..] program [program..]

DESCRIPTION
Pidof finds the process id's (pids) of the named programs. It prints those id's
on the standard output. This program is on some systems used in run-level
change scripts, especially when the system has a System-V like rc structure. In
that case these scripts are located in /etc/rc?.d, where ? is the runlevel. If
the system has a start-stop-daemon (8) program that should be used instead.

OPTIONS
-s Single shot - this instructs the program to only return one pid.

-c Only return process ids that are running with the same root directory.
This option is ignored for non-root users, as they will be unable to
check the current root directory of processes they do not own.

-x Scripts too - this causes the program to also return process id's of
shells running the named scripts.

-o omitpid
Tells pidof to omit processes with that process id. The special pid
%PPID can be used to name the parent process of the pidof program, in
other words the calling shell or shell script.

EXIT STATUS
0 At least one program was found with the requested name.

1 No program was found with the requested name.

NOTES
pidof is actually the same program as killall5; the program behaves according
to the name under which it is called.

When pidof is invoked with a full pathname to the program it should find the
pid of, it is reasonably safe. Otherwise it is possible that it returns pids of
running programs that happen to have the same name as the program you're after
but are actually other programs.

SEE ALSO
shutdown(8), init(8), halt(8), reboot(8), killall5(8)

AUTHOR
Miquel van Smoorenburg, miquels@cistron.nl

01 Sep 1998 PIDOF(8)

drbd的使用

一. DRBD介绍

DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地

文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中.

本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会

保留有一份相同的数据,可以继续使用.



在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,

切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.

DRBD的工作原理如下图:








        +--------+
        |  文件系统 |
        +--------+
             |
             V
        +----------+
        |   块设备层  |
        | (/dev/drbd1) |
        +----------+
         |            |
         |            |
         V           V
   +----------+  +-----------+
   |  本地硬盘   |   | 远程主机硬盘 |
   | (/dev/hdb1)  |   | (/dev/hdb1)  |
   +----------+  +-----------+

二. DRBD的安装

从官方网站下载源码包:

www.drbd.org

我们在Turbolinux10.5上使用drbd-8.0.4版.分别在两台主机上安装DRBD:

# tar jxf drbd-8.0.4.tar.gz
# cd drbd-8.0.4
# make
# make install

make install执行之后:

drbd.ko被安装到/lib/modules/$KernelVersion/kernel/drivers/block下.

drbd相关工具(drbdadm,drbdsetup)被安装到/sbin下.

并会在/etc/init.d/下建立drbd启动脚本.


三. DRBD的配置

1.DRBD使用的硬盘分区

你需要为本地主机和远程主机,指定一个DRBD使用的硬盘分区.这两个分区的大小必须相同.

我们指定两台主机的/dev/hdb1分区作为DRBD的使用的分区.这两个分区大小都为300MB.


2.drbd.conf配置文件

DRBD运行时,会读取一个配置文件/etc/drbd.conf.这个文件里描述了DRBD设备与硬盘分区的映射关系,

DRBD的一些配置参数.

下面是一个drbd.conf文件的简单示例:

<主机>Turbolinux 10.5操作系统,主机名为g105-1,IP地址为 10.0.1.2,DRBD分区为/dev/hdb1.

<备机>Turbolinux 10.5操作系统,主机名为g105-2,IP地址为 10.0.2.2,DRBD分区为/dev/hdb1.





       # 是否参加DRBD使用者统计.默认是yes
       global { usage-count yes; }
       # 设置主备节点同步时的网络速率最大值,单位是字节.
       common { syncer { rate 1M; } }
       # 一个DRBD设备(即:/dev/drbdX),叫做一个"资源".里面包含一个DRBD设备的主备节点的
       # 相关信息.
       #
       resource r0 {
            # 使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
            protocol C; 
            net {
                 # 设置主备机之间通信使用的信息算法.
                 cram-hmac-alg sha1;
                 shared-secret "FooFunFactory";
            }
            # 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.
            on g105-1 {
                 # /dev/drbd1使用的磁盘分区是/dev/hdb1
                 device    /dev/drbd1;
                 disk      /dev/hdb1;
                 # 设置DRBD的监听端口,用于与另一台主机通信
                 address   10.0.1.2:7898;
                 meta-disk  internal;
            }
            on g105-2 {
                 device    /dev/drbd1;
                 disk      /dev/hdb1;
                 address   10.0.2.2:7898;
                 meta-disk  internal;
            }
       }

然后将这个drbd.conf文件分别复制到两台主机的/etc目录下.

3.DRBD的启动

在启动DRBD之前,你需要分别在两台主机的hdb1分区上,创建供DRBD记录信息的数据块.分别在

两台主机上执行:


[root@g105-1 /]# drbdadm create-md r0
[root@g105-2 /]# drbdadm create-md r0

“r0”是我们在drbd.conf里定义的资源名称.

现在我们可以启动DRBD了,分别在两台主机上执行:


[root@g105-1 /]# /etc/init.d/drbd start
[root@g105-2 /]# /etc/init.d/drbd start

现在可以查看DRBD的状态,然后在g105-1主机上执行:

[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30

 1: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

”/proc/drbd”中显示了drbd当前的状态.第一行的st表示两台主机的状态,都是”备机”状态.

ds是磁盘状态,都是”不一致”状态.

这是由于,DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据.所以,我们需要初始化

一个主机.在g105-1上执行:




[root@g105-1 /]# drbdsetup /dev/drbd1 primary -o

现在再看一个g105-1上的DRBD状态:

[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30

 1: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
    ns:42688 nr:0 dw:0 dr:42688 al:0 bm:2 lo:4 pe:0 ua:4 ap:0
        [==>.................] sync'ed: 14.7% (262464/305152)K
        finish: 0:02:58 speed: 1,440 (1,292) K/sec
        resync: used:1/31 hits:2669 misses:3 starving:0 dirty:0 changed:3
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

主备机状态分别是”主/备”,主机磁盘状态是”实时”,备机状态是”不一致”.

在第3行,可以看到数据正在同步中,即主机正在将磁盘上的数据,传递到备机上.现在的进度是14.7%.

现在看一下g105-2上面的DRBD状态.



[root@g105-2 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14

 1: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r---
    ns:0 nr:56608 dw:56608 dr:0 al:0 bm:3 lo:0 pe:0 ua:0 ap:0
        [===>................] sync'ed: 20.0% (248544/305152)K
        finish: 0:02:57 speed: 1,368 (1,284) K/sec
        resync: used:0/31 hits:3534 misses:4 starving:0 dirty:0 changed:4
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

稍等一会,在数据同步完后,再查看一下g105-1的DRBD状态:

[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30

 1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:305152 nr:0 dw:0 dr:305152 al:0 bm:19 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:19053 misses:19 starving:0 dirty:0 changed:19
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

磁盘状态都是”实时”,表示数据同步完成了.

4.使用DRBD

你现在可以把主机上的DRBD设备挂载到一个目录上进行使用.备机的DRBD设备无法被挂载,因为它是

用来接收主机数据的,由DRBD负责操作.

在g105-1上执行:



[root@g105-1 /]# mount /dev/drbd1 /mnt/drbd1
[root@g105-1 /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda3             9.3G  6.5G  2.4G  73% /
/dev/hda1              99M  9.3M   85M  10% /boot
none                  249M     0  249M   0% /dev/shm
/dev/drbd1            289M   11M  264M   4% /mnt/drbd1

现在,我们在drbd1目录里建立一个200M的文件:

[root@g105-1 /]# dd if=/dev/zero of=/mnt/drbd1/tempfile1.tmp bs=104857600 count=2

操作完成后,在g105-2(备机)上执行:

我们先停止DRBD


[root@g105-2 /]# /etc/init.d/drbd stop

现在,我们可以将hdb1进行挂载

[root@g105-2 /]# mount /dev/hdb1 /mnt/drbd1
[root@g105-2 /]# ls /mnt/drbd1 -hl
total 201M
drwx------  2 root root  12K Jul 28 23:44 lost+found
-rw-r--r--  1 root root 200M Jul 29 00:20 tempfile1.tmp
[root@g105-2 /]# umount /mnt/drbd1

可以看到,在主机g105-1上产生的文件tmpfile1.tmp,也完整的保存在备机g105-2的DRBD分区上.

这就是DRBD的网络RAID-1功能. 在主机上的任何操作,都会被同步到备机的相应磁盘分区上,达到数据备份的效果.


5.DRBD的主备机切换

有时,你需要将DRBD的主备机互换一下.可以执行下面的操作:

在主机上,先要卸载掉DRBD设备.


[root@g105-1 /]# umount /mnt/drbd1

将主机降级为”备机”.

[root@g105-1 /]# drbdadm secondary r0
[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:13:14

 1: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r---
    ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

现在,两台主机都是”备机”.

在备机g105-2上,将它升级为”主机”.


[root@g105-2 /]# drbdadm primary r0
[root@g105-2 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14

 1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

现在,g105-2成为了”主机”.你可以把它的/dev/drbd1进行挂载和使用了.同样,数据会被同步到

g105-1上面.


Syndicate content