Wednesday, April 23, 2008

硬盘绝密维修资料以及部分相关软件

目 录

第 一 章 硬盘的物理结构和原理
第 二 章 硬盘的基本参数
第 三 章 硬盘逻辑结构简介
第 四 章 硬盘的物理安装
第 五 章 系统启动过程
第 六 章 硬盘的品牌
第 七 章 硬盘电路板测试及维修技巧
第 八 章 常用维修软件
第 九 章 专业维修软件PC3000
第 十 章 数据恢复
第十一章 典型故障及维修流程

第一章 硬盘的物理结构和原理

一、引言
自1956年IBM推出第一台硬盘驱动器IBM RAMAC 350至今已有四十多年了,其间虽没有CPU那种令人眼花缭乱的高速发展与技术飞跃,但我们也确实看到,在这几十年里,硬盘驱动器从控制技术、接口标准、 机械结构等方面都进行了一系列改进。正是这一系列技术上的研究与突破,使我们今天终于用上了容量更大、体积更小、速度更快、性能更可靠、价格更便宜的硬 盘。
如今,虽然号称新一代驱动器的JAZ、DVD-ROM、DVD-RAM、CD-RW、MO、PD等纷纷登陆大容量驱动器市场,但硬盘以其容量大、体积小、速度快、价格便宜等优点,依然当之无愧地成为桌面电脑最主要的外部存储器,也是我们每一台PC必不可少的配置之一。

二、硬盘磁头技术

1、磁头
磁头是硬盘中最昂贵的部件,也是硬盘技术中最重要和最关键的一环。传统的磁头是读写合一的电磁感应式磁头,但是,硬盘的读、写却是 两种截然不同的操作,为此,这种二合一磁头在设计时必须要同时兼顾到读/写两种特性,从而造成了硬盘设计上的局限。而MR磁头 (Magnetoresistive heads),即磁阻磁头,采用的是分离式的磁头结构:写入磁头仍采用传统的磁感应磁头(MR磁头不能进行写操作),读取磁头则采用新型的MR磁头,即所 谓的感应写、磁阻读。这样,在设计时就可以针对两者的不同特性分别进行优化,以得到最好的读/写性能。另外,MR磁头是通过阻值变化而不是电流变化去感应 信号幅度,因而对信号变化相当敏感,读取数据的准确性也相应提高。而且由于读取的信号幅度与磁道宽度无关,故磁道可以做得很窄,从而提高了盘片密度,达到 200MB/英寸2,而使用传统的磁头只能达到20MB/英寸2,这也是MR磁头被广泛应用的最主要原因。目前,MR磁头已得到广泛应用,而采用多层结构 和磁阻效应更好的材料制作的GMR磁头(Giant Magnetoresistive heads)也逐渐普及。

2、磁道
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。这些磁道用肉眼是根 本看不到的,因为它们仅是盘面上以特殊方式磁化了的一些磁化区,磁盘上的信息便是沿着这样的轨道存放的。相邻磁道之间并不是紧挨着的,这是因为磁化单元相 隔太近时磁性会相互产生影响,同时也为磁头的读写带来困难。一张1.44MB的3.5英寸软盘,一面有80个磁道,而硬盘上的磁道密度则远远大于此值,通 常一面有成千上万个磁道。

3、扇区
磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,每个扇区可以存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。1.44MB3.5英寸的软盘,每个磁道分为18个扇区。

4、柱面
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱, 称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。所谓硬盘的CHS,即 Cylinder(柱面)、Head(磁头)、Sector(扇区),只要知道了硬盘的CHS的数目,即可确定硬盘的容量,硬盘的容量=柱面数×磁头数× 扇区数×512B。

三、硬盘接口技术
硬盘接口是连接硬盘驱动器和计算机的专用部件,它对计算机的性能以及在扩充系统时计算机连接其他设备的能力都有很大影响。硬盘驱动器接口的类型主要有:

1、 ST506/412接口与ESDI接口
ST506/412是PC/XT、AT时代的标准接口标准。ST506/412最多可 安装4个硬盘驱动器,允许最大硬盘空间为150MB。而ESDI(Enhanced Small Device Interface,增强型小型设备接口)是ST506/412接口的改进版,但与ST506/412接口互不兼容。ESDI支持的硬盘容量上增加到 300MB,最大数据传输率为2MB/sec。目前这两种接口均已遭淘汰。

2、SCSI接口
SCSI(Small Computer System Interface)即“小型计算机系统接口”是一种系统级的接口,支持硬盘的容量突破了528MB的限制,可以同时挂接7个不同的设备。目前SCSI接 口有二个标准:SCSI-2和SCSI-3。SCSI-2又称为Fast SCSI,在8bit总线下能达到10M/s的数据传输率。而SCSI-3包括Ultra SCSI(8bit)、Ultra wide SCSI(含16bit和32bit)和Ultra2 SCSI。其中Ultra2 SCSI在8bit数据宽度下提供40M/s的数据传输率,在16位总线下最高能达到80M/s。SCSI接口的硬盘被广泛应用于网络服务器、工作站和小 型计算机系统上,但由于SCSI接口硬盘的价格要比IDE接口硬盘高,而且使用时还必须另外购买SCSI接口卡,因而在家用电脑上仍以IDE接口的硬盘为 主流。

3、IDE接口
IDE(Integrated Drive Electronics)接口是Compaq公司为解决老式的ST506/412接口速度慢、成本高而开发出硬盘接口标准,亦即ATA(AT Attachment)接口标准。由于IDE接口的硬盘具有价格低廉、稳定性好、标准化程度高等优点,因此得到广泛的应用。ATA接口标准亦已由ATA、 ATA-2、ATA-3发展到今天的Ultra ATA。
Ultra ATA(也称为Ultra DMA/33)是由Intel和Quantum公司共同提出的硬盘接口标准,与Fast ATA相比,Ultra ATA有以下几个优点:
外部数据传率由Fast ATA的16.6MB/s提高到33.3MB/s;
采用CRC循环冗余检验,通过两个寄存器的重复测试来提高数据传输的可靠性;由硬盘直接产生选通信号,并且同时将数据传送到总线上,从而减少数据传输的延迟时间。
要 发挥Ultra ATA的威力,除了要有一块Ultra ATA接口的硬盘外,还需要有操作系统和芯片组的支持。目前支持Ultra ATA的芯片组包括Intel的430TX、440LX,SiS 5597/5581,VIA的VP2、VP3,ALi的Aladdin IV+,AMD-640以及所有100Mhz的芯片组。虽然,Ultra ATA向下兼容于Fast ATA,两者都是使用40pin的接口,但如果芯片组或操作系统不支持,即使是Ultra ATA硬盘也只能达到16.6MB/s的外部传输率。

4、IEEE 1394接口
IEEE 1394并不是硬盘专用接口,但它却可以方便地连接包括硬盘在内的63个不同设备,并支持即插即用和热插拨。在数据传输率方面,IEEE 1394可以提供100MB/s、400MB/s、1.2GB/s三档高速传输率,是现时所有硬盘望尘莫及的。虽然目前市面上仍未能见到IEEE 1394接口的硬盘,但由于IEEE 1394接口的先进性,它必然会取代SCSI和IDE而成为明日的硬盘接口。目前Windows 98已支持IEEE 1394。

四、硬盘数据保护技术
硬盘容量越做越大,我们在硬盘里存放的数据也越来越多。那么,这么大量的数据存放在这样一个铁盒子里究竟有多安全呢? 虽然,目前的大多数硬盘的无故障运行时间(MTBF)已达300,000小时以上,但这仍不够,一次故障便足以造成灾难性的后果。因为对于不少用户,特别 是商业用户而言,数据才是PC系统中最昂贵的部分,他们需要的是能提前对故障进行预测。正是这种需求与信任危机,推动着各厂商努力寻求一种硬盘安全监测机 制,于是,一系列的硬盘数据保护技术应运而生。
  1、S.M.A.R.T.技术
  S.M.A.R.T.技术的全称是Self- Monitoring, Analysis and Reporting Technology,即“自监测、分析及报告技术”。在ATA-3标准中,S.M.A.R.T.技术被正式确立。S.M.A.R.T.监测的对象包括磁 头、磁盘、马达、电路等,由硬盘的监测电路和主机上的监测软件对被监测对象的运行情况与历史记录及预设的安全值进行分析、比较,当出现安全值范围以外的情 况时,会自动向用户发出警告,而更先进的技术还可以提醒网络管理员的注意,自动降低硬盘的运行速度,把重要数据文件转存到其它安全扇区,甚至把文件备份到 其它硬盘或存储设备。通过S.M.A.R.T.技术,确实可以对硬盘潜在故障进行有效预测,提高数据的安全性。但我们也应该看到,S.M.A.R.T.技 术并不是万能的,它只能对渐发性的故障进行监测,而对于一些突发性的故障,如盘片突然断裂等,硬盘再怎么smart也无能为力了。因此不管怎样,备份仍然 是必须的。
2、DFT技术
  DFT(Drive Fitness Test,驱动器健康检测)技术是IBM公司为其PC硬盘开发的数据保护技术,它通过使用DFT程序访问IBM硬盘里的DFT微代码对硬盘进行检测,可以让用户方便快捷地检测硬盘的运转状况。
  据研究表明,在用户送回返修的硬盘中,大部分的硬盘本身是好的。DFT能够减少这种情形的发生,为用户节省时间和精力,避免因误判造成数据丢失。它在硬盘上分割出一个单独的空间给DFT程序,即使在系统软件不能正常工作的情况下也能调用。
   DFT微代码可以自动对错误事件进行登记,并将登记数据保存到硬盘上的保留区域中。DFT微代码还可以实时对硬盘进行物理分析,如通过读取伺服位置错误 信号来计算出盘片交换、伺服稳定性、重复移动等参数,并给出图形供用户或技术人员参考。这是一个全新的观念,硬盘子系统的控制信号可以被用来分析硬盘本身 的机械状况。
  而DFT软件是一个独立的不依赖操作系统的软件,它可以在用户其他任何软件失效的情况下运行。
  


第二章 硬盘的基本参数

一、容量
作为计算机系统的数据存储器,容量是硬盘最主要的参数。
硬盘的容量以兆字节(MB)或千兆字节(GB)为单位,1GB=1024MB。但硬盘厂商在标称硬盘容量时通常取1G=1000MB,因此我们在BIOS中或在格式化硬盘时看到的容量会比厂家的标称值要小。
对 于用户而言,硬盘的容量就象内存一样,永远只会嫌少不会嫌多。Windows操作系统带给我们的除了更为简便的操作外,还带来了文件大小与数量的日益膨 胀,一些应用程序动辄就要吃掉上百兆的硬盘空间,而且还有不断增大的趋势。因此,在购买硬盘时适当的超前是明智的。目前的主流硬盘的容量为10G和 15G,而20G以上的大容量硬盘亦已开始逐渐普及。
其实,硬盘容量越大,单位字节的价格就越便宜。例如火球10G的价格为1000元,每G字节的价格为100元;而火球15G的价格为1160,每G字节还不到80元。
硬盘的容量指标还包括硬盘的单碟容量。所谓单碟容量是指硬盘单片盘片的容量,单碟容量越大,单位成本越低,平均访问时间也越短。目前市面上大多数硬盘的单碟容量为6.4G以上,而更高的则已达到了10G。
二、转速
转速(Rotational speed 或Spindle speed)是指硬盘盘片每分钟转动的圈数,单位为rpm。
目前市场上主流IDE硬盘的转速一般为5200rpm或5400rpm,Seagate的“大灰熊”系列和Maxtor则达到了7200rpm,是IDE硬盘中转速最快的。至于SCSI接口的硬盘,一般都已达到了7200rpm的转速,而更高的则达到了10000rpm。
三、平均访问时间
平均访问时间(Average Access Time)是指磁头从起始位置到达目标磁道位置,并且从目标磁道上找到要读写的数据扇区所需的时间。
平均访问时间体现了硬盘的读写速度,它包括了硬盘的寻道时间和等待时间,即:
平均访问时间=平均寻道时间+平均等待时间。
硬盘的平均寻道时间(Average Seek Time)是指硬盘的磁头移动到盘面指定磁道所需的时间。这个时间当然越小越好,目前硬盘的平均寻道时间通常在8ms到12ms之间,而SCSI硬盘则应小于或等于8ms。
硬盘的等待时间,又叫潜伏期(Latency),是指磁头已处于要访问的磁道,等待所要访问的扇区旋转至磁头下方的时间。平均等待时间为盘片旋转一周所需的时间的一半,一般应在4ms以下。

四、传输速率
传输速率(Data Transfer Rate) 硬盘的数据传输率是指硬盘读写数据的速度,单位为兆字节每秒(MB/s)。硬盘数据传输率又包括了内部数据传输率和外部数据传输率。
内部传输率(Internal Transfer Rate) 也称为持续传输率(Sustained Transfer Rate),它反映了硬盘缓冲区未用时的性能。内部传输率主要依赖于硬盘的旋转速度。
外部传输率(External Transfer Rate)也称为突发数据传输率(Burst Data Transfer Rate)或接口传输率,它标称的是系统总线与硬盘缓冲区之间的数据传输率,外部数据传输率与硬盘接口类型和硬盘缓存的大小有关。
目前Fast ATA接口硬盘的最大外部传输率为16.6MB/s,而Ultra ATA接口的硬盘则达到33.3MB/s。
五、缓存
与主板上的高速缓存(RAM Cache)一样,硬盘缓存的目的是为了解决系统前后级读写速度不匹配的问题,以提高硬盘的读写速度。目前,大多数IDE硬盘的缓存在128K到256K之间,而Seagate的“大灰熊”系列则使用了512K Cache。

第三章 硬盘逻辑结构简介

一. 硬盘逻辑结构简介

 1. 硬盘参数释疑

  到目前为止, 人们常说的硬盘参数还是古老的 CHS(Cylinder/Head/Sector)参数. 那么为什么要使用这些参数,它们的意义是什么?它们的取值范围是什么?
   很久以前, 硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘. 也就是硬盘盘片的每一条磁道都具有相同的扇区数.由此产生了所谓的3D参数 (Disk Geometry). 既磁头数(Heads), 柱面数(Cylinders),扇区数(Sectors),以及相应的寻址方式.
  其中:
  磁头数(Heads)表示硬盘总共有几个磁头,也就是有几面盘片, 最大为 255 (用 8 个二进制位存储);
  柱面数(Cylinders) 表示硬盘每一面盘片上有几条磁道,最大为 1023(用 10 个二进制位存储);
  扇区数(Sectors) 表示每一条磁道上有几个扇区, 最大为 63(用 6个二进制位存储).
  每个扇区一般是 512个字节, 理论上讲这不是必须的,但好象没有取别的值的.
  所以磁盘最大容量为:
  255 * 1023 * 63 * 512 / 1048576 = 8024 GB ( 1M =1048576 Bytes )或硬盘厂商常用的单位:
  255 * 1023 * 63 * 512 / 1000000 = 8414 GB ( 1M =1000000 Bytes )
在 CHS 寻址方式中, 磁头, 柱面, 扇区的取值范围分别为 0到 Heads - 1,0 到 Cylinders - 1, 1 到 Sectors (注意是从 1 开始).

 2. 基本 Int 13H 调用简介
BIOS Int 13H 调用是 BIOS提供的磁盘基本输入输出中断调用, 它可以完成磁盘(包括硬盘和软盘)的复位, 读写, 校验, 定位, 诊断,格式化等功能.它使用的就是 CHS 寻址方式, 因此最大识能访问 8 GB 左右的硬盘 (本文中如不作特殊说明, 均以 1M = 1048576 字节为单位).

 3. 现代硬盘结构简介
   在老式硬盘中, 由于每个磁道的扇区数相等,所以外道的记录密度要远低于内道, 因此会浪费很多磁盘空间 (与软盘一样). 为了解决这一问题,进一步提高硬盘容量, 人们改用等密度结构生产硬盘. 也就是说,外圈磁道的扇区比内圈磁道多. 采用这种结构后, 硬盘不再具有实际的3D参数,寻址方式也改为线性寻址, 即以扇区为单位进行寻址.
为了与使用3D寻址的老软件兼容 (如使用BIOSInt13H接口的软件), 在硬盘控制器内部安装了一个地址翻译器,由它负责将老式3D参数翻译成新的线性参数. 这也是为什么现在硬盘的3D参数可以有多种选择的原因(不同的工作模式, 对应不同的3D参数, 如 LBA, LARGE, NORMAL).

 4. 扩展 Int 13H 简介
虽然现代硬盘都已经采用了线性寻址, 但是由于基本 Int13H 的制约, 使用 BIOS Int 13H 接口的程序, 如 DOS 等还只能访问 8 G以内的硬盘空间.为了打破这一限制, Microsoft 等几家公司制定了扩展 Int 13H 标准(Extended Int13H), 采用线性寻址方式存取硬盘, 所以突破了 8 G的限制,而且还加入了对可拆卸介质 (如活动硬盘) 的支持.


二. Boot Sector 结构简介

1. Boot Sector 的组成

  Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (MasterBoot Record),DPT (Disk Partition Table) 和 Boot Record ID 三部分组成.
  MBR 又称作主引导记录占用 Boot Sector 的前 446 个字节( 0 to 0x1BD ),存放系统主引导程序 (它负责从活动分区中装载并运行系统引导程序).
  DPT 即主分区表占用 64 个字节 (0x1BE to 0x1FD),记录了磁盘的基本分区信息. 主分区表分为四个分区项, 每项 16 字节,分别记录了每个主分区的信息(因此最多可以有四个主分区).
  Boot Record ID 即引导区标记占用两个字节 (0x1FE and0x1FF), 对于合法引导区, 它等于 0xAA55, 这是判别引导区是否合法的标志.
  Boot Sector 的具体结构如下图所示:
0000 |---------------------------------------------|
      |                        |
      |                        |
      |      Master Boot Record         |
      |                        |
      |                        |
      |      主引导记录(446字节)        |
      |                        |
      |                        |
      |                        |
   01BD |                        |
   01BE |---------------------------------------------|
      |                        |
   01CD |      分区信息 1(16字节)        |
   01CE |---------------------------------------------|
      |                        |
   01DD |      分区信息 2(16字节)        |
   01DE |---------------------------------------------|
      |                        |
   01ED |      分区信息 3(16字节)        |
   01EE |---------------------------------------------|
      |                        |
   01FD |      分区信息 4(16字节)        |
      |---------------------------------------------|
      | 01FE        |01FF          |
      |    55     |     AA      |
      |---------------------------------------------|
2. 分区表结构简介

  分区表由四个分区项构成, 每一项的结构如下:
  BYTE State   : 分区状态, 0 =未激活, 0x80 = 激活 (注意此项)
  BYTE StartHead : 分区起始磁头号
  WORD StartSC  : 分区起始扇区和柱面号,底字节的低6位为扇区号,
           高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
  BYTE Type    : 分区类型, 如0x0B = FAT32, 0x83 = Linux 等,
           00 表示此项未用,07 = NTFS
  BYTE EndHead  : 分区结束磁头号
  WORD EndSC   :分区结束扇区和柱面号, 定义同前
  DWORD Relative :在线性寻址方式下的分区相对扇区地址
           (对于基本分区即为绝对地址)
  DWORD Sectors  : 分区大小 (总扇区数)

  注意: 在 DOS / Windows 系统下,基本分区必须以柱面为单位划分( Sectors * Heads 个扇区), 如对于 CHS 为 764/255/63 的硬盘,分区的最小尺寸为 255 * 63 * 512 / 1048576 = 7.844 MB.

 3. 扩展分区简介

  由于主分区表中只能分四个分区, 无法满足需求,因此设计了一种扩展分区格式. 基本上说, 扩展分区的信息是以链表形式存放的,但也有一些特别的地方.首先, 主分区表中要有一个基本扩展分区项,所有扩展分区都隶属于它,也就是说其他所有扩展分区的空间都必须包括在这个基本扩展分区中.对于DOS / Windows 来说, 扩展分区的类型为 0x05. 除基本扩展分区以外的其他所有扩展分区则以链表的形式级联存放, 后一个扩展分区的数据项记录在前一个扩展分区的分区表中,但两个扩展分区的空间并不重叠.
  扩展分区类似于一个完整的硬盘, 必须进一步分区才能使用.但每个扩展分区中只能存在一个其他分区. 此分区在 DOS/Windows环境中即为逻辑盘.因此每一个扩展分区的分区表(同样存储在扩展分区的第一个扇区中)中最多只能有两个分区数据项(包括下一个扩展 分区的数据项).


第四章 硬盘的物理安装

所谓的硬盘物理安装,指的是将硬盘装进机箱,设置跳线并接好电源线和数据线的过程。
电源接口:将主机的电源与此相连,以给硬盘供电。注意“梯形”接线方向,方向错误将无法插入。
主 从跳线:主板上一般只有两个IDE接口,每一根接线有三个接口,其中一个接主板的IDE接口,另两个则可以接两个IDE设备,包括硬盘、光驱、刻录机等。 在同一根接线上如果接两个IDE接口设备,则其中一个是主盘(Master),另一个为从盘(Slave)。究竟是作为主盘还是从盘则要通过硬盘或光驱背 面的“主从跳线”进行设置,否则将无法正常使用。一般来说,硬盘缺省的跳线设置为主硬盘,光驱的缺省设置则为从盘。具体的设置方法在硬盘或光驱的机壳上均 有设置说明。
数据线:数据线用于连接硬盘与主板IDE接口,作数据传输之用。主板IDE口与硬盘数据线接口均为40针接口,而数据线则分40线与 80线两种(如下图)。其中80线亦称为UDMA/66硬盘线,主要用于Ultra ATA 66硬盘,增加的40根地线作隔离干扰之用。要发挥Ultra ATA 66硬盘的优势,UDMA/66硬盘线。Ultra ATA 33硬盘也可以使用UDMA/66硬盘线,但不会因此带来任何好处。注意,硬盘的数据线有方向之分,反接的话硬盘将无法工作。数据线的一侧有一红线,红线 侧必须与IDE接口的第1/21针相连接。
按以上所说设置好主从跳线并接好电源线、数据线之后,就可以把硬盘固定在机箱上的3.5"托架上。当 然,你也可以先固定,再接线。硬盘可以水平安装也可以垂直安装,两者并无不同。有人说硬盘垂直安装会影响硬盘的寿命,这种说法并不科学。但需要注意的是, 水平安装时裸露面(可以见到电路板的一面)要朝下,以免积聚灰尘。
至此,硬盘的物理安装大功告成。

双硬盘的安装
1、 安装前的准备
目前主流IDE硬盘均为3寸硬盘,安装双硬盘时机箱需要有额外的3寸安装架。不过多数机箱只有两个3寸安装架,硬盘占一个,软驱占一个,因此只好在5寸安装架上做文章,办法是购买一副硬盘支架,将硬盘安装在支架上,然后再安装在机箱中的5寸框内。
一般而言,计算机电源输出功率都在200W以上,加块硬盘应该没问题。但如果你已安装了双光驱可大功率显卡等设备,就要考虑电源是否还能再提供12W左右功率去支持一块硬盘,否则可能出现系统不稳定的状况。另外,还要确保有一个空闲的电源接口供硬盘使用。
绝大多数主板均提供2个IDE接口,可接4个IDE设备,硬盘、光驱、刻录机、ZIP等设备均占用IDE口,安装双硬盘前你还需要为你的新硬盘预留一个IDE口。此外,如果你的电脑只有一条IDE数据线,赶快再买一根。
2、 双硬盘的主、从状态设置
假设你的电脑原有一个硬盘和一个光驱,通常接法有以下两个:
两个硬盘使用同一根硬盘线接在主板的Primary IDE接口,速度快的设为主盘(Master),速度慢的设为从盘(Slave)。光驱接在主板的Secondary IDE接口,并设为主盘。
速度快的硬盘单独接在主板的Primary IDE接口并设为主盘,光驱与第二块硬盘接在主板的Secondary IDE接口,光驱设为主盘,硬盘设为主盘。通常我们将第二块硬盘仅作为备份盘时可考虑这种接法。
3、双硬盘盘符交错的解决
安 装双硬盘后,我们会发现第一个硬盘(以下简称Disk1)的C盘还是C盘,不过Disk1的D盘在新系统中却变为E盘,E盘变成F盘...而第二个硬盘 (以下简称Disk2)的C盘则变为新系统的D盘,Disk2的D盘、E盘等逻辑盘就排在Disk1所有盘符之后。这种情况称为盘符交错现象。
盘 符交错是因为MS-DOS对硬盘的管理方法做成的。MS-DOS把第一个物理硬盘的激活的DOS分区叫做C,第二个物理硬盘的有效的激活DOS分区叫做 D,第一个物理硬盘的扩展DOS分区叫做E、F等等,剩下的字母分配给第二个物理硬盘的扩展DOS分区。如果没有第二个物理硬盘,或第二个物理硬盘没有基 本DOS分区,那么D就分配给第一个物理硬盘的扩展DOS分区的第一个逻辑驱动器了。
盘符交错现象会产生一系列问题,最常见的就是某些软件因为盘 符变化而导致路径错误。要避免盘交错现象,对于Windows 95/98系统来说,最简单的方法莫过于利用它的“即插即用”功能。即在BIOS中将第二硬盘设为None,开机后Windows 95启动后,Windows 95/98的“即插即用”功能就可以提示检测到新硬件,并自动分配盘符给它,此时盘符的分配和很多人的期望就一致了。由于原来主硬盘上的所有软件所在的盘 符都没有变化,因此在硬盘上的软件可以照常运行,盘符交错问题就解决了。


第五章 系统启动过程

系统启动过程主要由一下几步组成(以硬盘启动为例):

  1. 开机
  2. BIOS 加电自检 ( Power On Self Test -- POST ),内存地址为 0ffff:0000
  3. 将硬盘第一个扇区 (0头0道1扇区, 也就是BootSector)读入内存地址 0000:7c00 处.
  4. 检查 (WORD) 0000:7dfe 是否等于 0xaa55,若不等于,则转去尝试其他启动介质,如果没有其他启动介质则显示"No ROM BASIC" 然后死机.
  5. 跳转到 0000:7c00 处执行 MBR 中的程序.
  6. MBR 首先将自己复制到 0000:0600 处,然后继续执行.
  7. 在主分区表中搜索标志为活动的分区.如果发现没有活动分区或有不止一个活动分区, 则转停止.
  8. 将活动分区的第一个扇区读入内存地址 0000:7c00处.
9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55,若不等于则显示 "Missing Operating System" 然后停止,或尝试软盘启动.
  10. 跳转到 0000:7c00处继续执行特定系统的启动程序.
  11. 启动系统 ...

  以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成.6,7,8,9,10步由MBR中的引导程序完成.
  一般多系统引导程序 (如 SmartFDISK, BootStar, PQBoot等)都是将标准主引导记录替换成自己的引导程序, 在运行系统启动程序之前让用户选择要启动的分区.
  而某些系统自带的多系统引导程序 (如 lilo, NT Loader等)则可以将自己的引导程序放在系统所处分区的第一个扇区中, 在 Linux中即为 SuperBlock (其实 SuperBlock 是两个扇区).

  注: 以上各步骤中使用的是标准 MBR,其他多系统引导程序的引导过程与此不同.


第六章 硬盘的品牌

一、希捷(seagate)

  希捷也是世界上著名的硬盘生产厂商之一,其在scsi市场推出的捷豹系 列硬盘(15000转)到目前为止还占据着老大的位置,这样的厂商,实力 当然不容怀疑。当初第一款7200转的ide硬盘就是希捷率先制造出来的, 不过因为技术还是不很成熟,导致发热量过大而且返修率过高,当然这 并没有阻止希捷公司进军ide市场的脚步,随后希捷公司又推出了酷鱼以 及酷鱼ii代,一举成为7200转ide硬盘市场中的佼佼者。其主要产品有5400 转、512k缓存的u10系列和7200转、2m缓存的酷鱼ii系列,u10系列的市 场零售价格为10g/15g/20g——700/740/840;酷鱼ii代系列硬盘最引人注目 的就是它那相对较高的平均寻道时间,曾一度达到了7.6毫秒!这个记录 在ide硬盘市场中迄今无人能及。酷鱼ii系列的价格为10g/15g/20g—— 830/940/1110,在国内的代理是广源行。希捷硬盘的优势在于其价格低廉 ,同档次的型号要比昆腾低上几十甚至上百块钱,这个理由使希捷硬盘 成为廉价电脑解决方案的首选。再有就是酷鱼ii代的高寻道速度,在随机 数据传输中能比其他型号的硬盘快上不少。缺点是在噪音、发热方面十 分不尽人意,而且超频性能几乎为零,这使得一些超频爱好者对此望而 却步。

二、迈拓(maxtor)
  和昆腾以及希捷比起来,迈拓进入国内市场的时间算晚的,不过迈拓 却是最为重视中国大陆市场的硬盘厂商。迈拓在大陆的总代理是蓝德电 子,所有的迈拓硬盘无论什么型号,统一使用纸盒+塑料泡沫的包装,包装印刷也比较精美,盒内还附带说明书、保修卡等一系列附件。迈拓硬盘的主流 产品有金钻四代、金钻五代、金钻六代、金钻七代,以及美钻一代、二代、三代,星钻一代、二代、三代,购买时一定要去蓝德电子的柜台买,才不会 上当。迈拓硬盘的优势在于其售后 服务很好,并且金钻四代在噪音以及发热量方面非常优秀,缺点跟希捷硬盘一样,超频性能几乎没有,不过总的来说迈拓的硬盘在各方面都比 较中规中矩,售价也比较合理,如果对硬盘性能没什么特殊要求的话, 迈拓硬盘确实是个很好的选择。(现在市面上只有迈拓的硬盘敢于承诺质保三年,这一点笔者认为还是很不错的)

三、ibm
  说起ibm公司恐怕无人不知无人不晓,这位蓝色巨人已经有太多的传奇 了,当年第一块硬盘就是ibm最先制造出来的;ibm硬盘最先使用了gmr (巨磁阻磁头);ibm硬盘最先把单碟容量提高到10g、15g、20g……; ibm硬盘是目前唯一能在盘体内装下5张盘片的硬盘;ibm是唯一把7200转 5400转硬盘盘片分开生产的硬盘厂商……目前ibm硬盘的主流产品有5400 转、512k缓存的40gv系列和7200转、2m缓存的75gxp系列,而且前者是 单碟20g的,后者是单碟15g的,在传输速度方面要比其他品牌略胜一筹 ,而且价格也并不贵,40gv系列目前常见的只有20g一种型号,报价680元,75gxp系列有15g和30g两个型号,价格分别为1000元和 1640元。ibm 硬盘的优势在于技术先进,很多先进的技术往往都是ibm硬盘率先采用, 其性价比也很不错,尤其值得一提的是ibm硬盘的超频性能也不俗,仅次于昆腾,而且国外对于超频往往都更看好ibm硬盘,其超频性能由此可见 一斑。缺点在于缺少面向低端市场的小容量硬盘,最小也是15g的,往往 失去了很多廉价电脑方面的市场。 其他还有一些品牌,比如富士通、西部数据、三星等等,其产品都各 有独到之处,但是因为市场占有率很小,不大容易买到,在此就不再多说了。


第七章 硬盘电路板测试及维修技巧
硬盘电路板测试及维修技巧
硬盘故障分析与处理步骤 下面仅简要介绍物理故障的分析与一般的处理步骤: 短路,需做进一步的检查。

①首先检查CMOS SETUP是否丢失了硬盘配置信息。测量主板上COMS RAM电路是否为电池有故障,或元器件(如二极管、三极管、电阻、电容等)损坏能原因而CMOS中的硬盘配置参数出错。
②通过加电自测,若屏幕显示错误信息 “Hard Disk Error”,说明硬盘确实有故障。或是硬盘未插好。
③关机,拆开机盖,测+5V、+12V电源是否正常,电源盒风机是否转动。以此来判断是否外电路缺电。
④检查信号电缆线,插头是否插好,有无插反或接触不良。可尝试交换一些电缆插头试一下。
⑤采用“替代法”来确定故障部件。找一块好硬盘与该硬盘比较,判断是主板还是硬盘驱动器本身有问题。
以上几个步骤,用户需要仔细检查、测试、分析,找出坏的元器件进行修理。
经以上的处理后,只要不是硬盘盘体本身损坏,仅仅是一般性的接插件的接触不良或外电路故障则多数能够迅速排除。
测电阻法
该 测量方法一般是用万用表的电阻档测量部件或元件的内阻,根据其阻值的大小或通断情况,分析电路中的故障原因。一般元器件或部件的输入引脚和输出引脚对地或 对电源都有一定的内阻,用普通万用表测量,有很多情况都会出现正抽电阻小,反向电阻大的情况。一般正向阻值在几十欧姆至100欧姆左右,而反向电阻多在数 百欧姆以上。但正向电阻决不会等于0或接近0,反向电阻也不会无穷大,否则就应怀疑管脚是否有短路或开路的情况。当断定硬盘子系统的故障是在某一板卡或几 块芯片时,则可用电阻法进行查找。关机停电,然后测量器件或板卡的通断、开路短路、阻值大小等,以此来判断故障点。若测量硬盘的步进电机绕组的直流电阻为 24欧,则符合标称值为正常;10欧左右为局部短路;0欧或几欧为绕组短路烧毁。
硬盘驱动器的扁平电缆信号线常用通断法进行测量。硬盘的电源线既可拔下单测也可在线并测其对地阻;如果无穷大,则为断路;如果阻值小于10欧,则应怀疑局部
测电压法
该 测量方法是在加是怕情况下,用万用表测量部件或元件的各管脚之间对地的电压大小,并将其与逻辑图或其它参考点的政党电压值进行比较。若电压值与正常参考值 之间相差较大,则青蛙该部件或元件有故障;若电压正常,说明该部分完好,可转入对其它部件或元件的测试。一般硬盘电源与软盘插线一样,四个线头分别为+ 12V、+5V、-5V和地线。硬盘步进电机额定电压为+12V。硬盘启动时电流大,当电源稳压不良时(电压从12V下降到10.5V),会造成转速不稳 或启动困难。Ⅰ/O通道系统板扩展槽上的电源电压为+12V、-12V、+5V和-5V。板上信号电压的高电平应大于2.5V,低电平应小于0.5V。硬 盘驱动器插头、插座按照引脚的排列都有一份电压表,高电平在2.5-3.0V之间。若高电平输出小于3V,低电平输出大于0.6V即为故障电平。逻辑是怦 的测量可用试波器测量或者用逻辑笔估算。
测电流法
如果有局部短路现象,则短路元件会升温发热并可能引起保险丝熔断。将万用表串入故障线 路,核对电流是否超过正常值。硬盘驱动器适配卡上的芯片短路会导致系统析负载电流加大,驱动电机短路或驱动器短路会导致主机电源故障。硬盘电源+12V的 工作电流应为1.1A左右。当硬盘驱动器负载电流加大时,会使硬盘启动时好时坏。电机短路或负载过流轻则保险熔断,重则导致电源块、开关调整管损坏。在加 大电流回路中可串入流假负载进行测量。如有保险的线路,则可断开保险管一头将表串入进行测量。在印刷板上的某芯片的电源线,可用刻刀或钢锯条割断铜泊引线 串入万用表测量。电机插头、电源插头可从卡口里将电源线起出来串入表测量。

QT维修技巧

火球LM系列电路板的维修经验
火球电路板LM系列的有LM,KA,KX型号,LM的芯片的发热量也很高的,工作电压也高,供电也复杂点。芯 片设计我个人认为也算可以了,虽然也会烧,但没有飞利浦的快坏。电路板是设计不错的,驱动芯片坏了,旁边的元件也就受苦了!!!!驱动芯片坏了的话,会产 生其他的元件烧坏,它坏了的话,会坏的元件有:三个22欧电阻也会坏,但电阻坏了,很难找得到替换的,根据并联电阻法,得出三个电阻并联后为6.7欧可用 一个1/8W的电阻替换,线圈也会容易烂,也难找得到替换的,可用LE板上两个电感换上。
一:指示灯长亮,主芯片坏。
二:上芯片打盘,磁头控制芯片坏了或供电不良,变压双三极管击穿。
三:盘转后指示灯熄灯,为缓存不良。
四:指示灯不亮,板上供电电压有:12V,3.3V,8V,驱动芯片坏否,晶振,磁头控制芯片短路,主芯片坏。
五:指示灯亮一下,不转,驱动芯片坏,主芯片接触不良或坏了。
六:指示灯亮五下,缓存接触不良或缓存坏,主芯片接触不良或坏了。
七:一切正常,包括硬盘的寻道的声音也正常而主板找不到盘为主芯片坏。(注意主芯片通往IDE口的电阻是否损坏。)


火球AS电路板维修
火球盘中7200转、2M缓存的有两种:一种为AS系列,另一种为LM,KA,KX系列。采用的驱动芯片都是ST公司。型号不同,不可代换。后者的电路板相对前者好修多了。
AS的盘在7200转状态下,驱动芯片的工作量大、发热量高,同时工作电压也高,AS板的供电也复杂。
驱动芯片引起的故障有:不转、不亮、空转、打盘。
由于电路板要比LCT系列的厚,小。所以一般不会出现虚焊现象,引起的故障有:闪、寻道不完全、打盘、不亮、不认盘、认错参数、转后熄灯等。
火球AS的板的通病是驱动芯片旁边的三极管烧坏,而且换了也会烧,也难找到代换的三极管。
驱 动IC型号是L6279 V2.4,和L6279 V2.0不通用,不过许多维修人员都没有见过L6279 V2.0。驱动芯片虽小,但设计得比较稳定,驱动芯片一般不会出现像飞利浦烧毁得那么严重。但旁边的小元件就比较容易坏,旁边的三极管烧坏就是首当其冲。 它坏了的话,同时会产生其他的元件一起烧坏,所以直接换上去也会被烧坏。它坏了的情况下,同时会坏的元件有:470的电感,8V供电IC,驱动也有可能, 但比较少。轻微的烧坏直拉换上去就可以好了,严重的烧伤那就要先检查电路了。看有没有其他坏了,如果还不行,那可能是PCB板坏了。
火球CR/EX/EL电路板维修
火 球CR/EX硬盘电路板采用的驱动芯片型号为AN8427FBP、TDA5147BH,与ST/SE的AN8426FBP、TDA5247CH驱动芯片不 同,不可代换。AN8427FBP、TDA5147BH都具有耐高温和耐高压的特性,芯片比较稳定,一般情况下不会容易烧坏,但电路板的主芯片反而成为最 容易坏的元件了。盘的使用时间长后温度升高,主芯片就越容易发生内部短路现象,从而造成3.3V的工作电压负荷再重,工作电压不稳定。严重的话也会造成磁 头控制芯片及缓存的损坏,CR板还会把3.3V供电管烧坏。
  CR/EX/EL电路板的工作电压有:12V,5V,8V,3.3V。常见的问题有:
一:指示灯长亮,为主芯片坏了。
二:指示灯亮一下,驱动芯片坏了或主芯片坏了
三:指示灯亮五下,缓存接触不良或坏了,主芯片接触不良或坏了
四:指示灯亮六下,磁头控制芯片坏了或8V工作电压没有电压。
五:指示灯不亮,工作电压不正常,主芯片坏了,晶振坏了,驱动芯片坏了。
*****主芯片的脚细,焊接时要很高的焊接技术和耐心**


火球LCT电路板维修
火球LCT系列电路板采用的驱动芯片为TDA5247/AN8428。TDA5247芯片的耐高温和耐高压的 特性特差。甚至有的用不了半个钟就会了,耐用的很少。所以TDA5247芯片价格低。AN8428芯片是日本松下公司生产的芯片,具有耐高温和耐高压,用 上几年也不会坏,可以说是LCT系列驱动芯片的精品,但价格高。但在市场上TDA5427芯片还是占多数。换上好的飞利浦芯片后还是不转是维修火球电路板 比较常见的问题。一般维修人员都会遇到这样的问题。
一:焊接不当,还有的脚接触不良,需用烙铁加焊,也可用热风枪再吹。但最好是吹芯片时先加上松香水或松香膏,这样会提高焊接的效果。
二:“排阻”烧坏,可用万用表检查对其电阻值,坏了。换!
三:芯片的56,57脚的电路板上的接点已经烧烂。这也是常见的故障,需外接线连接,不连接好就会产生不转的现象。
四:电机接口旁边的放电三极管(只起二极管作用)击穿或接50-70脚边的元件掉了或坏了。但这一般是转不起的故障。
五:主芯片的1-3或倒数1-3是控制驱动芯片转的,其接触不良也不转。
六:IDE接口的脚接在一起,使主芯片不复位,特别是1-2脚。
七:上盘还是闪十下的,通常是8V电压没有或磁头控制芯片坏或没有电压输入
八:上盘还是闪五下的,缓存、主芯片接触不良或坏了。
九:如上都不行,那只能怀疑主芯片有问题了,换换看,不过要很高的焊接技术哦。
*****把主芯片也换了、磁头放大的芯片也换了,还是不行,灯依然不亮。如果电压正常的话,要看晶振的两端电压了。晶振也是很容易坏的其中一个元件,如果还不行,那可能是PCB板坏了。*****


火球LD电路板维修
  火球LD盘为5400转,由于板上没有了缓存芯片,只有主芯片、磁头控制芯片、驱动芯片。同时PCB板比较 厚、小,不容易产生接触不良现象,所以维修的难度相对没有那么大。驱动芯片也采用了松下公司的AN8411芯片,虽然芯片小,但耐高温和耐高压的特性良 好,一般情况不会坏。工作电压有:8V,3.3V,2.5V。故障现象有:
一:指示灯长亮,主芯片坏
二:指示灯微亮,2.5V电压不正常或主芯片坏,驱动芯片坏
三:指示灯亮五下,缓存是没有的,也只有主芯片坏了
四:指示灯亮十下,磁头控制芯片坏,8V工作电压没有,主芯片坏
五:指示灯不亮,工作电压不正常,主芯片坏,驱动芯片坏


火球其他电路板维修
火球其他系列电路板有CX,LE,VQ。CX与LCT相似,LE与LD相似,VQ与AS相似。这几种板的故障现 象都以前面介绍的火球电路板维修相同,但这几种板损坏程度没有那么严重,一般都是换掉坏的芯片就可以了。特别是LE,大部分都是好的,盘坏的多。但由于其 盘的型号不同,其电路板的设计与别的电路板还是有点不同。也有其比较特别的故障,也都是通病了,现将一一介绍,以供参考。
一:LE板:故障为打盘,它主要是磁头控制芯片坏,驱动坏的情况甚少。
二:VQ板:故障为寻道不完全,寻一点就停了,一般为主芯片坏。
三:LE,VQ板:故障为指示灯闪五下,一般为缓存坏。
四:CX板:多数坏驱动芯片和旁边的放电三极管,还有就是旁边的“排阻”

火球电路板维修补充
火球硬盘在二手市场上占有量是相当大的,特别是火球LCT系列的PCB薄、大、长。容易造成芯片接触不良,加上驱动芯片 容易坏。所以维修量也大,虽然元件少,但故障现象多。前面所说的只是对火球电路板各系列的常见故障说明。其实,在实际维修中还有特殊的故障,需要比较长的 时间来维修。现把我在实际维修过程中的特殊故障判断和排除方法介绍一下。
一:用眼看清楚在电路板上有没有少元件,少了要加上。芯片有没有接触不良,松了要加焊。元件有没有烧坏或电路板有没有烧烂。换元件就要小心了。
二:用手摸电路板(通电),看有没有元件发热,发热不正常的要看是不是电压高了或有元件短路了。没有发热也说明元件没有工作,用万用表测量板的工作电压是否正常。
三:通电观查指示灯闪得是否正常,闪一下为主芯片坏了。微闪,工作电压正常下为主芯片坏。微亮,工作电压正常下为主芯片坏,驱动芯片坏。
四:EL,CR,EX,CX,指示灯正常闪六下,其他闪十下,闪五下都为缓存接触不良或坏,还有就是主芯片接触不良或坏了。
五:看电路板的成色,成色好的多芯片坏,成色差的多会有接触不良。通电用手大力压芯片看是否会对盘的工作有影响。
六:电路板的芯片脚比较细,要有耐心和精力。吹芯片时温度也要调好,太高了会吹坏芯片。


火球电路板的分类
  火球PCB板的每种系列都比较不同,主芯片也不同。从外观上能识别出来。就是LCT系列中的706、702、303还有SE、ST板比较难识别。现将火球的电路板分类出来,以供参考:
1 、板:03 主芯片:14-108406-03
2 、板:501 主芯片:14-108406-02
3 、板:812、主芯片:14-108413-02
4 、板:411、412 主芯片:D9046CM 101
5 、板:013 主芯片:14-113271-02
6 、板:110、111 主芯片:14-113271-04
7 、板:701、702 主芯片:D760006GJ 101
8 、板:706 主芯片:D760006GJ 102
9 、板:303 主芯片:D760006GJ 106
10、板:906、907、908 主芯片:D8915GJ 101
11、板:206、207、208 主芯片:D760009GJ 101
12、板:314、315 主芯片:D760009GJ 103
13、板:306 主芯片:760009BGJ 104


IBM硬盘常见故障及维修方法:
1. 容易产生坏道。
原因:电路板与盘体的数据接口松动或接触不良引起的;速度传输过快引起坏道。
解 决方法:电路板卸下,将接口部份清理一次(对IBM的硬盘一般第一步就是这样),然后将上回去,在上的同时,因为电路板在制作时有工程缺陷,所以上回去时 应该尽可能的向外推,并将螺丝上得尽可能紧。如果看到电路板上的接口不平,可以用风枪加点松香处理一下,以便接口平滑。然后接上硬盘,如果数据不用保留可 以用Hddl来给硬盘“清零”,或用DFT的“Erase Disk”,用Hddl要快很多,效果也不错,用DFT速度要慢,大概要一两小时,不过是IBM的专用工具,对IBM来说会更有效;而DDD-SI的话也 是IBM的专用工具,是Windows下的,速度还要更慢,效果比DFT要好一些。如果用户要保留数据的话,可以用Mhdd的“Scan”来做修复,速度 快,效果好,不过Glist会相应的填写较多的坏点。如果发现有坏道无法修复,一般是Glist满,要用PC3000转一次Plist再进行修复。
2. 硬盘开机有吱吱的规律异响,有可能能认到盘,也有可能不认。
原因:电路板与盘体的数据接口松动或接触不良引起的;驱动IC引起的;固件错误引起磁头偏位。
解 决方法:接口部份同上。驱动IC引起的话,最好先换一块同产地的电路板,确定盘体正常的条件下再换驱动IC,其实确定板的好坏有一个更直接的办法,就是将 电路板跳成安全模式,看看主板能不能认到盘(认错参数也没事),要是能认到说明板基本没有问题。在换电路板时要连原来的Bios一起换,否则会引起不认 盘。如果保证板是好的,而还是不认盘的话,可以试一下用PC3000从写硬盘的固件,分别是硬盘的LDR,FW,和Bios信息,如果写成功认到盘,一般 数据都不会在了,用PC3000修一次坏道,再用Mhdd修一次(以防PC3000漏扫)。
3. 硬盘不能通电。
原因:由于5V电压不正常引起5V供电电路保护。
解决方法:沿5V供电走,找到保护的电容(一般是电容),直接将其去除。一般都能解决问题,不过此电容比较隐蔽,而且很多电路板上的位置都不一样,所以还要慢慢查,要是找不到,可以直接换一块同产地的电路板试一下能不能正常使用。


第 八 章 常用维修软件

MHDD说明

各命令的解释
exit 推出命令

id 盘检测

scan 扫描功能 S 表明测试
Log = mhdd.log.检测后的结果是否写入MDDD.LOG文件
[Remap: On/Off] - 坏扇区重新影射在

aerase 高级擦除,速度很慢
hpa 更改大小,当然,要硬盘支持这种技术,1999年以后的硬盘都支持
rhpa 恢复原盘的大小
cls 清屏
pwd 设置密码
unlock 解锁
dispwd 去掉密码,前提是要用unlock后,而且你还要知道密码
nhpa 显示全部的硬盘空间
aam 降低硬盘的运行中的声音,磁盘性能也同时降低,P最大(性能最高),M最小(性能最低);
init <> 磁盘复位
fdisk 在磁盘上分区
smart smart
makebad 创建坏道
port 选择硬盘.
stop 停止测试
i 重新安排硬盘检测
cx 可以检验昆腾CX和LCT系列硬盘5247芯片的稳定性
erase 快速擦除

启动MHDD
如果硬盘上缺少MHDD.CFG文件,程序会自己建立它,然后才选择存储器工作(按键或打入 命令“port”)。角括号里指快借键,它可以不必再按。选中了存储器,我们会看到命令行[ mhdd> ]。按组合键将自动“进入”相应的命令。

顶上一行是会闪亮的略语:左半部是寄存器状况,
它反映硬盘最重要的几种情况。
BUSY 存储器对命令无反应
DRDY 存储器找到
WRFT 写入错误
DRSC 存储器初检通过
DREQ 存储器接受信息交换
CORR
INDX
ERR 该处红色闪亮,指出现某种错误,同时右半部的状态指示反映错误的形态。

右半部(当左半部“ERR”闪红时)
AMNF 地址标记出错,
T0NF 找不到0磁道
ABRT Abort,拒绝命令
IDNF 扇区标志出错
UNCR 校验错误,又称ECC错误
BBK 坏块标记错误

2部分之间有一块空档。如果硬盘被加密,那里就会亮起红色“PWD”字样,而如果是作过HPA“截短”处理,则闪亮“HPA”,就只有这2种。
在这一行状态指示下面是硬盘的参数。
左半部反映硬盘的现有参数(启动时需按下),右半部分是测试时磁头位置。
在表面测试时,右边会有一个窗口。第一行是测试速度;底下是2个完成百分比数。
表面测试速度并不参照DMA规范,根据您的主板,可能您的某个HDD开始的时候会达到50Mb/sec。
在表面测试过程中,我们将会看到不同颜色的“小方块”,一块相当于255扇区(LBA制式),或者是63扇区(CHS制式)。

测试速度反映在右侧的方块的“明亮”度,越上面越快,绿色表示还可以放心的块,红色是BAD块,?号代表测试超时。


HDDL常用菜单

1, ALT+B---第一项(ALT+L)选择待修硬盘
PMIARY(1FOH)主硬盘线(第一个IDE)
SECNDARY(17ON)从硬线(第二个IDE)
MASTOR 主盘
SLAVE 从盘

可根据硬盘位置选择相应参数
ALT +T----第二项 扇区接正清零
BNEPEA(顺序)1 cektop 每一个扇区一个读写单位
HA3A (倒序) 256 CETOPOB 每256个扇区。。
HAY。。。。LBA :0 起始LBA数
KOH。。。。LBA:XXX结束LBA数
ALT+T---------第三项 扇区快速清零
ALT+T---------第一项,检测硬盘
ALT+X 退出

HP使用方法

1, 输入两次回车
2, 选择待修硬盘
3, RUN SPEED BRNCHMARKS FOR THIS DRIVE?
4, 是否进行完整测试 应输入N
5, 输入ALT+M]
6, 输入R
7, 选择START进行修复

HDDREG使用方法
1选择硬盘、输入相应数值,一般为2
输入后回车
2, 输入起始位置
ENTER OFFSET FROM THE BEGINNIMP :0 MB
回车
如按容量输入,在输入数值后加字母M回车
如按扇区数输入,直接输入数直回车
3, 要中止修复,输入CTRL+BREAK
4,B—0 BAD SECTORS FOND 发现的坏区
R---0 BAD SECTORS RECOVERED 已修复的坏区
如上下数值一致,说明已修好


THDD用法

1, 选择硬盘
2, 菜单显示
CLEAR FAT 清除分区表
CLEAR MBR 清除MBR(主引导扇区)
SURFACE TEST 表面测试
VIEW DEFECT LIST 查表缺陷列表
CHOICE DRIVE 切换硬盘
EXIT 退出

3, 测试修复方法
a, 选择SURFACE TEST 先进行测试
选择LBA方式测试
可再选择起始位置(MANVAL SET ,自定义开始位置
B,测试完成发现坏道后,选择VIEW DEFECT LIST
R-REPAIR DEFECT 显示为白色彩且右边的缺陷列表中有坏区显示,此时输入R
进行修复


DM低格清零方法
1, 进入主菜单
2, 输入A
3, 输入M
4, 输入U
5, 选择硬盘
6, A,ZERO FILL DEIVE 磁盘填零
B,LOW LEVED FORMAT 磁盘低格
C,SET DRIVE SIZE 设置容量
7, 选择ZERO FILL DIVE 输入ALT+C 选择YES 开始清零
8, 清零完成后,再进行低格


FDC使用方法(软盘制作和恢复数据)

READ FROM SOURCE DRIVE 读源盘信息
Write to tarqit drive 写到目标盘
FORMAT TARGET DRIVE 格式化目标盘
PUT INTO IMAGE FILE 生成锐象文件
GET INTTO IMGAGE FILE 从锐象文件恢复
。。。。。
ESCAPE (EXIT TO DOS)


各镜像象文件
KV0001 ---KV003三个锐象文件为杀毒软件(DOS下的)
DFT 专修IBM硬盘的软件
BOOT KEY 专解逻辑锁的软件
BOOT –98 纯98DOS引导文件
MHDD MHDD
TOOLS SP DISKGE 等硬盘软件
DOS622 DOS622引导盘
HDDTEG HDDREG软件
MEM 内存测试软件
IBM----DM DM
MAXBLAST 迈拓工具
FTOOL IBM硬盘工具
REPAIR HP HDDL HDDREG 等修坏道软件

逻辑锁的解法(保留数据)

1, 现象;能正常认到硬盘,但无法引导,用光驱,软件等也无法引导,出现死机
2, 解决方法:

一、 用FDC工具作两张软盘
进入FDC 选GET FROM LAGE FILE 项,输入BOOT 98
再选WRITE TO TAMGER DRIVE 进入第二项
FORMAT ALL AND WRITE 放入软盘,输入开始制作,再用同样方法制作一张BOOT KEY 盘
二、 boot key 解密磁盘
BOOT –98 纯98启动磁盘
三、 用BOOT KEY 引可以正常引导,因为解锁后IO。SYS文件将不读取分区表因此软盘引导看不到C盘等盘符是正常现象。
四、 用软盘下的DISKGEN---工具------重建分区表-----自动方式恢复分区表,恢复好后存盘退出
五、 用SPFDISK------左菜单-----重建MBR(主引导扇区)
六、 试一下能否正常引导,如不能正常引导,用纯WIN98起动磁盘引导,输入SYS----A:--C:完成后应该就可以引导了
七、 0道坏的修复方法,(0道坏有提示信息)
现象与逻辑锁相象,大部分时候有轻微异响,再有无法分区格式化

九 章 专业维修软件PC3000

PC3000-解密版的安装方法:
1、PC3000运行于DOS系统。可以将PC3000的全部程序拷贝在系统盘中。
2、系统盘安装在IDE1的MASTER口。
3、待修盘安装在IDE2的MASTER口,并要求在BIOS中设为“NONE”。
4、PC3000要求在CONFIG.SYS中加载HIMEM.SYS及俄文版的EMM386.EXE。
5、在AUTOEXEC.BAT中先后执行EMUL目录内的PCDOSEMU.EXE和VGAGA.EXE。
6、进入PC3000目录,执行SHELL.EXE即可进入PC3000主界面。
7、注意:V09和V11版的EMUL文件相同,可以通用。V12版是另外一套。

PC-3000AT主菜单

ВЫБОР РЕЖИМА
选择项目

Выбор типа накопителя
选择存储器
Проверка накопителя
检查存储器
Проверка контроллера
检查磁盘控制器
Комплексный тест
磁盘综合测试
Скрытие дефектов
磁盘缺陷扫描
Форматирование
通用的低级格式化
Выход
退出

РЕГИСТР СОСТОЯНИЙ
状态寄存器
BAS DRDY DWF DSC DRQ CORR INX ERR

РЕГИСТР ОШИБОК
误差寄存器
BBK UNC O IDNF O ABRT TONF AMNF


LBA
CHS (c)
关于 Выход
退出
вверх
向上 Отмен
取消


вниз
向下 Ввод
输入
SMART
维护和自动修理技术信息 Passp
磁盘信息

Проверка накопителя 检查存储器

Тран.
对扇区写入编号 Выход
退出
Шаг-
减少柱数 Шаг+
增加柱数 X->0
全部清零 Отмен
取消
X->A
磁头移到?柱 A<->B
磁头来回移动 RND
磁头随机移动
Стир
全部扇区填零 Просм
按(柱/头/扇)查看 Зап
按每柱填充代码 Ввод
输入
Гол
(головку)磁头移到?头 Т

Определение параметров НМД
参数定义


Выполняется
完成


Ошибка
错误
накопитель не выдал состояние
存储器没有准备好
готовности в течении 15 сек
нажмите любую клавишу
按任意键继续


Проверка контроллера 检查控制器

Чтение регистра состояния в цикле
循环阅读寄存器的情况
Тест буфера сектора
测试扇区缓冲器
Запись сектора в цикле
循环写入扇区缓冲器
Чтение сектора в цикле
循环读出扇区缓冲器
Тест IRQ
测试硬盘中断 IRQ
Внутренняя диагностика НМД
内部的诊断
Сброс НМД
硬盘复位
Выход
退出


Комплексный тест 综合的测试

ВНИМАНИЕ
注意
В процессе тестирования
过程
Данные будут разрушены
数据将会丢失
Начальный цилиндр: 0
开始的柱
Конечный цилиндр: 1
结束的柱
Производить запись: да
进行写入动作 : 是的
нажмите[Ввод] или [Отмена]
按键 输入 或者 取消


Тест контроллера
测试控制器
Тест IRQ
测试 IRQ
Тест буфера сектора
测试扇区缓冲器
Тест рекалибровки

Проверка формата
检查格式
Случайное чтение
随机的读出
Проверка поверхностей
表面检查

Прерывание оператора
操作员中断
продолжать тест
继续做测试
пропустить тест
跳过测试
пропустить все тесты
跳过全部测试


Скрытие дефектов 缺陷

Выбор скрытие
选择
Автоматическое скрытие
自动
Ручное скрытие
手动
Отменить скрытие
取消
[Esc]-Выход
退出

ВНИМАНИЕ
注意
Начальный цилиндр:0
开始的柱
Конечный цилиндр:1
结束的柱
Количество проходов:3
反复次数
нажмите[Ввод] или [Отмена]
按键 输入 或者 取消

ВНИМАНИЕ
注意
В процессе отмены скрытия дефектов
缺陷扫描过程取消
Данные пользователя будут разрушены
数据将会丢失
Начальный цилиндр:0
开始的柱
Конечный цилиндр:1
结束的柱
нажмите[Ввод] или [Отмена]
按键 输入 或者 取消

Форматирование 通用的擦除

ВНИМАНИЕ
注意
В процессе форматирования
过程
Данные пользователя будут разрушены
数据将会丢失
Начальный цилиндр:0
开始的柱
Конечный цилиндр:1
结束的柱
нажмите[Ввод] или [Отмена]
按键 输入 或者 取消


PC-3000各个模块主菜单


一、 富士通 Ver 4.52(中文说明)

二、 昆腾与迈拓(LE VQ系列)Ver 2.32(中文说明)

三、 西数(EB AB BB JB DA)(中文说明)

四、迈拓ver1.07 (中文说明)

五、西捷(中文说明)


六、IBM (中文说明)

PC3K写固件的方法
MAXTOR IBM
一、 先跳成安全模式(指硬盘的跳线)
MAXTOR几种安全跳线:
美钻:

星钻:

金钻

IBM的安全模式

此时,硬盘通电不转但可在BIOS中或PC3K中找到型号
二、 应在进入PC3K后再将硬盘接到第二条IDE线上
三、 在写固件前应先将相应的固件信息复制到PC3K的目录下,需要的文件有: LDR、RAM、MXDSPMDD
四、 进入PC3K相应菜单。(以下以2B0201为例)
1, 进入PCMX-DSP
2, 选第二项,写LDR文件(需要选择相应的LDR文件)在此选择(2B0201。LDR,选后在下一个菜单中选择第三项,(预处理并写入DSP指令)在此过 程中,写入LDR文件后磁盘起转现象,先指示灯闪一段时间,BOS灯亮,硬盘起转,有绿色提示,)说明LDR写入基本正常
3, 退到主菜单选择第三项,写RAM文件,(需要选择相应的RAM文件)在此选择:2B0201“选好后,在下菜单中有范围选项,使用默认写完后有绿色表示写入成功。
4, 退到主菜单,选择第一项进到固件区操作
5, 选1,2,3项将固件写入硬盘
6, 选1,2,4,3,项复位GLIST
7, 选1,2,1检查固件
8, 断电,跳回正常模式,如能认到盘,,成功。如不能认或认错参数,换固件再写一次
MAXTOR通病,1,认错参数
2,电机上电转一下就停
写固件不成的原因
1, 固件兼容性不好(多保存固件信息)
2, LDR不能成功写入(热交换法)
3, 固件区坏


FUJ写固件的方法
一、 复制相应信息到PC33K目录下(BIN、RSC、 FUJMPGMOD)
二、 选择相应菜单进入富士通相应选项
三、 选第二项,写BIN文件(即写BIOS信息)(进入选第二项写)
四、 选第一项,并选对正确的硬盘型号
五、 选3,2,2,1写库信息
六、 选3、2、4写盘体固件
七、 断电、能正常认到盘用MHDD测试坏道
一般都会有大量坏道,如无坏道,成功
八、 如有坏道,进PC3K选5项进行内部低格
九、 如还有坏道,则换其它固件再写

FUJ通病、寻道正常但不认盘

写固件不成功的原因
坏道多、固件兼容性不好(换其它固件写)


PC3K修坏道方法
一、 通用方法
1, 伺服检测
2, 表面测试
3, 内部低格(如有)
4, 逻辑测试
二、 MAXTOR WD 修坏道方法
1, G转P
2, 用MHDD加GLIST
3, 再G转P
4, 反复
三、 昆腾、FUJ修坏道方法
1, 封闭磁道(自动将G转P)
2, 用MHDD
3, 再封闭
四、 若前面有坏道,且PLIST满
1, 清空所有缺陷列表
2, 通用方法修复
3, 保证前面磁盘可用
4, 用MHDD或PC3K封闭后面容量

硬盘不认的故障和排解

常见故障一:系统不认硬盘

  系统从硬盘无法启 动,从A盘启动也无法进入C盘,使用CMOS中的自动监测功能也无法发现硬盘的存在。这种故障大都出现在连接电缆或IDE端口上,硬盘本身故障的可能性不 大,可通过重新插接硬盘电缆或者改换IDE口及电缆等进行替换试验,就会很快发现故障的所在。如果新接上的硬盘也不被接受,一个常见的原因就是硬盘上的主 从跳线,如果一条IDE硬盘线上接两个硬盘设备,就要分清楚主从关系。

常见故障二:硬盘无法读写或不能辨认

  这种 故障一般是由于CMOS设置故障引起的。CMOS中的硬盘类型正确与否直接影响硬盘的正常使用。现在的机器都支持“IDE Auto Detect”的功 能,可自动检测硬盘的类型。当硬盘类型错误时,有时干脆无法启动系统,有时能够启动,但会发生读写错误。比如CMOS中的硬盘类型小于实际的硬盘容量,则 硬盘后面的扇区将无法读写,如果是多分区状态则个别分区将丢失。还有一个重要的故障原因,由于目前的IDE都支持逻辑参数类型,硬盘可采用 “Normal,LBA,Large”等,如果在一般的模式下安装了数据,而又在CMOS中改为其它的模式,则会发生硬盘的读写错误故障,因为其映射关系 已经改变,将无法读取原来的正确硬盘位置。

常见故障三:系统无法启动
造成这种故障通常是基于以下四种原因:
  1. 主引导程序损坏
  2. 分区表损坏
  3. 分区有效位错误
  4. DOS引导文件损坏
   其中,DOS引导文件损坏最简单,用启动盘引导后,向系统传输一个引导文件就可以了。主引导程序损坏和分区有效位损坏一般也可以用FDISK /MBR 强制覆写解决。分区表损坏就比较麻烦了,因为无法识别分区,系统会把硬盘作为一个未分区的裸盘处理,因此造成一些软件无法工作。不过有个简单的方法——使 用Windows 2000。找个装有Windows 2000的系统,把受损的硬盘挂上去,开机后,由于Windows 2000为了保证系统硬件
的稳定性会对新接上去的硬盘进行扫描。Windows 2000的硬盘扫描程序CHKDSK对于因各种原因损坏的硬盘都
有很好的修复能力,扫描完了基本上也修复了硬盘。

   分区表损坏还有一种形式,这里我姑且称之为“分区映射”,具体的表现是出现一个和活动分区一样的分区。一样包括文件结构,内容,分区容量。假如在任意区 对分区内容作了变动,都会在另一处体现出来,好像是映射的影子一样。我曾遇上过,6.4G的硬盘变成8.4G(映射了2G的C区)。这种问题特别尴尬,这 问题不影响使用,不修复的话也不会有事,但要修复时,NORTON的DISKDOCTOR和PQMAGIC却都变成了睁眼瞎,对分区总容量和硬盘实际大小 不一致视而不见,满口没问题的敷衍你。对付这问题,只有GHOST覆盖和用NORTON的拯救盘恢复分区表。

常见故障四:硬盘出现坏道

   这是个令人震惊,人见人怕的词。近来IBM口碑也因此江河日下。当你用系统Windows 系统自带的磁盘扫描程序SCANDISK扫描硬盘的时候,系 统提示说硬盘可能有坏道,随后闪过一片恐怖的蓝色,一个个小黄方块慢慢的伸展开,然后,在某个方块上被标上一个“B”……

  其实,这些坏道大多是逻辑坏道,是可以修复的。根本用不着送修(据说厂商之所以开发自检工具就是因为受不了返修的硬盘中的一半根本就是好的这一“残酷的”事实)。

  那么,当出现这样的问题的时候,我们应该怎样处理呢?

  一旦用“SCANDISK”扫描硬盘时如果程序提示有了坏道,首先我们应该重新使用各品牌硬盘自己的自检程序进行完全扫描。注意,别选快速扫描,因为它只能查出大约90%的问题。为了让自己放心,在这多花些时间是值得的。

  如果检查的结果是“成功修复”,那可以确定是逻辑坏道,可以拍拍胸脯喘口气了;假如不是,那就没有什么修复的可能了,如果你的硬盘还在保质期,那赶快那去更换吧。

   由于逻辑坏道只是将簇号作了标记,以后不再分配给文件使用。如果是逻辑坏道,只要将硬盘重新格式化就可以了。但为了防止格式化可能的丢弃现象(因为簇号 上已经作了标记表明是坏簇,格式化程序可能没有检查就接受了这个“现实”,于是丢弃该簇),最好还是重分区,使用如IBM DM之类的软件还是相当快的, 或者GHOST覆盖也可以,只是这两个方案都多多少少会损失些数据。

常见故障五:硬盘容量与标称值明显不符

  一般 来说,硬盘格式化后容量会小于标称值,但此差距绝不会超过20%,如果两者差距很大,则应该在开机时进入BIOS设置。在其中根据你的硬盘作合理设置。如 果还不行,则说明可能是你的主板不支持大容量硬盘,此时可以尝试下载最新的主板BIOS并进行刷新来解决。此种故障多在大容量硬盘与较老的主板搭配时出 现。另外,由于突然断电等原因使BIOS设置产生混乱也可能导致这种故障的发生。

常见故障六:无论使用什么设备都不能正常引导系统

  这种故障一般是由于硬盘被病毒的“逻辑锁”锁住造成的,“硬盘逻辑锁”是一种很常见的恶作剧手段。中了逻辑锁之后,无论使用什么设备都不能正常引导系统,甚至是软盘、光驱、挂双硬盘都一样没有任何作用。

   “逻辑锁”的上锁原理:计算机在引导DOS系统时将会搜索所有逻辑盘的顺序,当DOS被引导时,首先要去找主引导扇区的分区表信息,然后查找各扩展分区 的逻辑盘。“逻辑锁”修改了正常的主引导分区记录,将扩展分区的第一个逻辑盘指向自己,使得DOS在启动时查找到第一个逻辑盘后,查找下个逻辑盘总是找到 自己,这样一来就形成了死循环。

  给“逻辑锁”解锁比较容易的方法是“热拔插”硬盘电源。就是在当系统启动时,先不给被锁的硬盘加
电,启动完成后再给硬盘“热插”上电源线,这样系统就可以正常控制硬盘了。这是一种非常危险的方法,为了降低危险程度,碰到“逻辑锁”后,大家最好依照下面几种比较简单和安全的方法处理。

   1. 首先准备一张启动盘,然后在其他正常的机器上使用二进制编辑工具(推荐UltraEdit)修改软盘上的IO.SYS文件(修改前记住先将该文件 的属性改为正常),具体是在这个文件里面搜索第一个“55AA”字符串,找到以后修改为任何其他数值即可。用这张修改过的系统软盘你就可以顺利地带着被锁 的硬盘启动了。不过这时由于该硬盘正常的分区表已经被破坏,你无法用“Fdisk”来删除和修改分区,这时你可以用Diskman等软件恢复或重建分区即 可。

  2. 因为DM是不依赖于主板BIOS来识别硬盘的硬盘工具,就算在主板BIOS中将硬盘设为“NONE”,DM也可识别硬盘并进行分区和格式化等操作,所以我们也可以利用DM软件为硬盘解锁。

  首先将DM拷到一张系统盘上,接上被锁硬盘后开机,按“Del”键进入BIOS设置,将所有IDE接口设为
“NONE”并保存后退出,然后用软盘启动系统,系统即可“带锁”启动,因为此时系统根本就等于没有硬盘。启动后运行DM,你会发现DM可以识别出硬盘,选中该硬盘进行分区格式化就可以了。这种方法简单方便,但是有一个致命的缺点,就是硬盘上的数据保不住了

常见故障七:开机时硬盘无法自举,系统不认硬盘

   这种故障往往是最令人感到可怕的。产生这种故障的主要原因是硬盘主引导扇区数据被破坏,表现为硬盘主引导标志或分区标志丢失。这种故障的罪魁祸首往往是 病毒,它将错误的数据覆盖到了主引导扇区中。市面上一些常见的杀毒软件都提供了修复硬盘的功能,大家不妨一试。但若手边无此类工具盘,则可尝试将全0数据 写入主引导扇区,然后重新分区和格式化,其方法如下:用一张干净的DOS启动盘启动计算机,进入A:>后输入以下命令(括号内为注释):
  A:>DEBUG(进入DEBUG程序)
  -F 100 3FF0(将数据区的内容清为0)
  -A 400(增加下面的命令)
  MOV AX,0301
  MOV BX,0100
  MOV CX,0001
  MOV DX,0080
  INT 13
  INT 03
  -G=400(执行对磁盘进行操作的命令)
  -Q(退DEBUG程序)

   用这种方法一般能使你的硬盘复活,但由于要重新分区和格式化,里面的数据可就难保了。以上是硬盘在日常使用中的一些常见故障及解决方法,希望能对大家有 所启发。如果硬盘的故障相当严重并不能用上述的一些方法处理时,则很可能是机械故障。由于硬盘的结构相当复杂,所以不建议用户自己拆卸,而应求助于专业人 员予以维修。

比较详细的MBR的分析(数据恢复)

说明:硬盘主引导记录独立于操作系统,但又和操作系统息息相关——很多时候它又是由
; 操作系统所提供的工具所生成(例外的情况是您使用了其他的分区工具,不过它又运行在
; 什么操作系统中呢?;()。
;
; 如果您安装了Windows 98(我现在暂时不能接触95下的主引导记录,总不能用95重装我的
; 系统吧?)操作系统,那您机器上的主引导记录已经与以前的大有不同了,通过下面的分析
; 您一定能对Windows 98为什么要更改主引导记录有所了解——它已经开始支持扩展Int13h
; 了!并且这个主引导记录的编程技巧更是我们应该学习的。
;
; 主引导记录包括代码、数据两部分。它在被BIOS中断Int19h装入内存后获得控制权。数据
; 部分最重要的当然是分区表了!彻底熟悉主引导记录,可以帮助我们了解系统的引导过程,
; 处理因主引导记录损坏所造成的无法引导故障,消除引导型计算机病毒,更使我们能通过
; 修改主引导记录完成我们希望的工作:如多重引导,系统加软锁等...
;
; BIOS中断总是把主引导记录所在扇区(硬盘的0头0道1扇区)的内容(包括代码和数据)
; 装入内存0000:7C00起始的区域,然后检验该扇区内容的最后两个字节是不是“AA55”,
; 如果不是,那么对不起,Int19h将不把控制权交给主引导记录;若是,则下面的主引导记录
; 才能获得了控制权了(Int19通过跳转指令交转控制权):
;
; 二进制形式的主引导记录:
0000:0600 33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C 3.....|.P.P....|
0000:0610 BF 1B 06 50 57 B9 E5 01-F3 A4 CB BE BE 07 B1 04 ...PW...........
0000:0620 38 2C 7C 09 75 15 83 C6-10 E2 F5 CD 18 8B 14 8B 8,|.u...........
0000:0630 EE 83 C6 10 49 74 16 38-2C 74 F6 BE 10 07 4E AC ....It.8,t....N.
0000:0640 3C 00 74 FA BB 07 00 B4-0E CD 10 EB F2 89 46 25 <.t...........F% 0000:0650 96 8A 46 04 B4 06 3C 0E-74 11 B4 0B 3C 0C 74 05 ..F...<.t...<.t. 0000:0660 3A C4 75 2B 40 C6 46 25-06 75 24 BB AA 55 50 B4 :.u+@.F%.u$..UP. 0000:0670 41 CD 13 58 72 16 81 FB-55 AA 75 10 F6 C1 01 74 A..Xr...U.u....t 0000:0680 0B 8A E0 88 56 24 C7 06-A1 06 EB 1E 88 66 04 BF ....V$.......f.. 0000:0690 0A 00 B8 01 02 8B DC 33-C9 83 FF 05 7F 03 8B 4E .......3.......N 0000:06A0 25 03 4E 02 CD 13 72 29-BE 2D 07 81 3E FE 7D 55 %.N...r).-..>.}U
0000:06B0 AA 74 5A 83 EF 05 7F DA-85 F6 75 83 BE 1A 07 EB .tZ.......u.....
0000:06C0 8A 98 91 52 99 03 46 08-13 56 0A E8 12 00 5A EB ...R..F..V....Z.
0000:06D0 D5 4F 74 E4 33 C0 CD 13-EB B8 00 00 80 49 12 00 .Ot.3........I..
0000:06E0 56 33 F6 56 56 52 50 06-53 51 BE 10 00 56 8B F4 V3.VVRP.SQ...V..
0000:06F0 50 52 B8 00 42 8A 56 24-CD 13 5A 58 64 10 72 PR..B.V$..ZX.d.r
0000:0700 0A 40 75 01 42 80 C7 02-E2 F7 F8 5E C3 EB 74 B7 .@u.B......^..t.
0000:0710 D6 C7 F8 B1 ED CE DE D0-A7 00 BC D3 D4 D8 B2 D9 ................
0000:0720 D7 F7 CF B5 CD B3 CA B1-B3 F6 B4 ED 00 4D 69 73 .............Mis
0000:0730 73 69 6E 67 20 6F 70 65-72 61 74 69 6E 67 20 73 sing operating s
0000:0740 79 73 74 65 6D 00 00 00-00 00 00 00 00 00 00 00 ystem...........
0000:0750 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0760 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0770 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0780 00 00 00 8B FC 1E 57 8B-F5 CB 00 00 00 00 00 00 ......W.........
0000:0790 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:07A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:07B0 00 00 00 00 00 00 00 00-86 D8 00 00 00 00 80 01 ................
0000:07C0 01 00 06 3F 3F FD 3F 00-00 00 41 A0 0F 00 00 00 ...??.?...A.....
0000:07D0 01 FE 05 3F FF FE 80 A0-0F 00 C0 4F 2F 00 00 00 ...?.......O/...
0000:07E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:07F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
;
; 反汇编结果
;
; 0000:7C00~0000:7C1A:初始化各个段寄存器、堆栈指针,最后将主引导记录在内存中搬家,腾出其所占内
; 存空间以供装入分区引导记录。
0000:7C00 33C0 XOR AX,AX ;AX寄存器清0
0000:7C02 8ED0 MOV SS,AX ;SS=0
0000:7C04 BC007C MOV SP,7C00 ;装填栈指针——SS:SP=0000:7C00
0000:7C07 FB STI ;开中断(装填栈指针时为避免硬件中断引起栈混乱应关中断)
0000:7C08 50 PUSH AX ;
0000:7C09 07 POP ES ;装填附加数据段寄存器ES=0
0000:7C0A 50 PUSH AX ;
0000:7C0B 1F POP DS ;装填数据段寄存器DS=0
0000:7C0C FC CLD ;规定其后的串操作为正向串操作
0000:7C0D BE1B7C MOV SI,7C1B ;源指针
0000:7C10 BF1B06 MOV DI,061B ;目的指针
0000:7C13 50 PUSH AX ;
0000:7C14 57 PUSH DI ;看看0000:7C1A——构造一个跳转
0000:7C15 B9E501 MOV CX,01E5 ;
0000:7C18 F3 REPZ ;
0000:7C19 A4 MOVSB
; ;0000:7C1B起始的CX字节传送至0000:061B起始的区域
0000:7C1A CB RETF ;跳转到0000:061B(这是一种技巧跳转)
;
; 为直观起见,下面的地址按实际运行时的地址给出。
; 0000:061B~0000:062B:对分区表进行初步检验,一旦检测到某分区表项状态字节大于等于80h,就通过(当
; 然,在此之前如果检测到某项分区表的状态字节小于80h,就转错误处理。当然,如果四个分区项的状态字节
; 都为零,主引导记录就会调用BIOS-ROM的INT 18h,显示"PRESS A KEY TO REBOOT"信息等待你的操作。
0000:061B BEBE07 MOV SI,07BE ;SI指向第一个分区表项,这时CX=0
0000:061E B104 MOV CL,04 ;分区表共四个表项
0000:0620 382C CMP [SI],CH ;
0000:0622 7C09 JL 062D ;大于等于80h转[注意JL指令:(SF xor OF)=1则转]
0000:0624 7515 JNZ 063B ;不为0则[SI]一定小于80h,只能转错误处理了!
0000:0626 83C610 ADD SI,+10 ;为零则检查下一表项
0000:0629 E2F5 LOOP 0620 ;检查下一表项
0000:062B CD18 INT 18 ;四表项的状态字节都为0,则系统只好调用INT 18h了!
;
; 0000:062D~0000:0639:检查剩余的分区表项——状态字节必须为零,否则显示错误信息“分区表无效”然
; 后当机!拜托,微软搞错没有,怎么用中文提示信息?真TM傻得可爱!
; 这里还有个小BUG,前面放行原则是只要状态字节大于等于80h,那么如果这个字节是诸如A0h、E5h之类数值
; 呢?嘿嘿,这个引导记录统统认为是有效的可引导分区了!
0000:062D 8B14 MOV DX,[SI] ;为读分区引导记录做准备:磁头号→DH,驱动器号→DL
0000:062F 8BEE MOV BP,SI ;SI→BP,保存可引导分区表项的指针
;
0000:0631 83C610 ADD SI,+10 ;其余的分区表项还要检查检查的
0000:0634 49 DEC CX ;
0000:0635 7416 JZ 064D ;CX=0则检查顺利通过,转继续
0000:0637 382C CMP [SI],CH ;
0000:0639 74F6 JZ 0631 ;为零,是合法表项,再查下一表项
;
; 0000:063B~0000:064B:执行错误处理——报告错误信息后当机
0000:063B BE1007 MOV SI,0710 ;错误信息字符串偏移+1→SI
0000:063E 4E DEC SI ;SI-1→SI
0000:063F AC LODSB ;SI+1→SI
0000:0640 3C00 CMP AL,00 ;
0000:0642 74FA JZ 063E ;AL=0则表明一条错误信息显示完毕,系统陷入一个死循环
0000:0644 BB0700 MOV BX,0007 ;字符方式显示
0000:0647 B40E MOV AH,0E ;
0000:0649 CD10 INT 10 ;以写电传方式显示信息(只显示一个字符)
0000:064B EBF2 JMP 063F ;显示下一个字符,直到遇到提示信息结束为止
;
; 0000:064D~0000:0662:判断可引导分区的分区类型,然后转相应处理程序。
0000:064D 894625 MOV [BP+25],AX ;BP=指向第一个可引导分区表项的指针,这时AX=0000h
;使用长度最短的指令将[BP+25]起始的两个单元清零
;这两个单元将被用来存放中间变量
0000:0650 96 XCHG SI,AX ;此时SI清零的最佳指令选择(仅1字节),将服务于0000:06B8
0000:0651 8A4604 MOV AL,[BP+04] ;取分区类型(本例是“06”喽——FAT16主DOS分区)
0000:0654 B406 MOV AH,06 ;为扩展INT 13h无法使用做好更改分区类型的准备
0000:0656 3C0E CMP AL,0E ;0Eh:需要用扩展INT 13h访问的FAT16主DOS分区
0000:0658 7411 JZ 066B ;0Eh类型的分区转066Bh
0000:065A B40B MOV AH,0B ;
0000:065C 3C0C CMP AL,0C ;0Ch:需要用扩展INT 13h访问的FAT32分区
0000:065E 7405 JZ 0665 ;0Ch类型的分区转0665h先行预处理
0000:0660 3AC4 CMP AL,AH ;0Bh:用传统INT 13h就可以访问的FAT32分区
0000:0662 752B JNZ 068F ;其他类型的分区转068Fh
;
; 0000:0664~0000:06A1:根据分区类型和分区表表项内容进行读取分区引导记录前的处理工作
0000:0664 40 INC AX &nbs
p; ;★★★0Bh类型的分区由此开始处理,此条指令用意是清ZF位
0000:0665 C6462506 MOV BYTE PTR [BP+25],06 ;★★★0Ch类型的分区由此开始处理
;为什么取值06,一时没有自圆我说的解释,请耐心几天吧。
0000:0669 7524 JNZ 068F ;请注意上面指令对ZF位的影响:0Bh类型分区转,0Ch则不转
; 0000:066B~0000:068C这段代码仅当分区类型是0Ch、0Eh才有获得执行的机会
0000:066B BBAA55 MOV BX,55AA ;★★★0Eh类型的分区由此开始处理
0000:066E 50 PUSH AX ;
0000:066F B441 MOV AH,41 ;扩展INT 13h功能,检测BIOS是否已经支持扩展INT13h
0000:0671 CD13 INT 13 ;入口参数:BX=55AAh,DL=驱动器号,AH=41h
0000:0673 58 POP AX ;执行完恢复AX为060Eh
0000:0674 7216 JB 068C ;不支持则转
0000:0676 81FB55AA CMP BX,AA55 ;
0000:067A 7510 JNZ 068C ;扩展INT13h不可用也转
0000:067C F6C101 TEST CL,01 ;测试扩展盘访问是否被支持
0000:067F 740B JZ 068C ;不支持还转
; 因为扩展INT13h方式读盘与标准INT13h方式读盘有很大差别,所以0000:0686处指令修改其后的代码以保证按
; 照扩展读方式读分区引导扇区时能正确跳转到相应的处理程序中。
0000:0681 8AE0 MOV AH,AL ;分区类型→AH
0000:0683 885624 MOV [BP+24],DL ;保存驱动器号→[BP+24]
0000:0686 C706A106EB1E MOV WORD PTR [06A1],1EEB ;修改0000:06A1处代码为"JMP 06C1"
0000:068C 886604 MOV [BP+04],AH ;注意:如果扩展INT13h不能使用则A改分区类型为06,但如果
;扩展INT13h能使用,则仍保持原分区类型不变
0000:068F BF0A00 MOV DI,000A ;★★★其它类型分区由此开始处理。此条指令初始化计数器
0000:0692 B80102 MOV AX,0201 ;AH:读操作,AL:读取1个扇区的内容
0000:0695 8BDC MOV BX,SP ;SP=7C00→BX,指定分区引导记录装入内存的位置偏移
0000:0697 33C9 XOR CX,CX ;CX清零
0000:0699 83FF05 CMP DI,+05 ;注意5
0000:069C 7F03 JG 06A1 ;大于则转去读由分区表指定的分区引导扇区
0000:069E 8B4E25 MOV CX,[BP+25] ;小于则证明所读分区表指定的引导扇区无合法的引导记录,
;改按???再读,毕竟多一种选择多一次机会嘛!;)
; 以下标有①②者请注意它们的地址都是一样的,就是说实际运行中只可能是二者之一,但为了分析之方便,我
; 把两者都列了出来以供对比,阅读时千万别看成是两条指令了啊!
①0000:06A1 034E02 ADD CX,[BP+02] ;获取分区引导扇区所在的柱面号和物理扇区号
②0000:06A1 EB1E JMP 06C1 ;如果分区类型是0Ch、0Eh而且扩展读能使用则执行该指令
;
; 0000:06A4:将可引导分区的分区引导记录装入内存指定区域
; 入口参数:AH=功能号,02为读盘操作;AL=一次读取的扇区数
; ES:BX=读入内存的起始地址
; CH=10位柱面号的低8位;CL:高两位是10位柱面号的高两位,低6位是物理扇区号
; DH=磁头号;DL=驱动器号,最高位(即位7)为0是软盘,为1是硬盘
0000:06A4 CD13 INT 13 ;读分区引导记录到0000:7C00起始的区域
;
;
0000:06A6 7229 JB 06D1 ;不成功转
0000:06A8 BE2D07 MOV SI,072D ;错误信息字符串偏移→SI
0000:06AB 813EFE7D55AA CMP WORD PTR [7DFE],AA55 ;分区引导记录合法吗?
0000:06B1 745A JZ 070D ;合法则转(这是主引导记录唯一的正常出口)
0000:06B3 83EF05 SUB DI,+05 ;不合法则为换读其他扇区做准备
0000:06B6 7FDA JG 0692 ;只有一次换读扇区的机会!
;
; 0000:06B8~0000:06BF:错误预处理
0000:06B8 85F6 TEST SI,SI ;测试SI值是否为0,其意义在于确定该显示哪条信息
0000:06BA 7583 JNZ 063F ;不为0则转错误处理,显示“Missing operating system”
0000:06BC BE1A07 MOV SI,071A ;错误信息字符串偏移→SI
0000:06BF EB8A JMP 064B ;转错误处理,显示“加载操作系统时出错”
;
; 0000:06C1~0000:06CF:整理扩展读所需入口参
数,然后调用扩展读子程序
; 这段代码只有在以扩展读方式读取分区引导记录时才有机会获得执行
0000:06C1 98 CBW ;转换字节AL为字AX,执行后,AX中是一次要读的扇区数
0000:06C2 91 XCHG CX,AX ;AX→CX,CX→AX,执行后,CX中是一次要读的扇区数
0000:06C3 52 PUSH DX ;
0000:06C4 99 CWD ;将字AX转换为双字→DX,AX
0000:06C5 034608 ADD AX,[BP+08] ;
0000:06C8 13560A ADC DX,[BP+0A] ;执行后,DX:AX=LBA绝对物理扇区号
0000:06CB E81200 CALL 06E0 ;调用扩展读子程序
0000:06CE 5A POP DX ;
0000:06CF EBD5 JMP 06A6 ;
;
; 0000:06D1~0000:06D8分区引导记录装入失败时的处理
0000:06D1 4F DEC DI ;计数器减1
0000:06D2 74E4 JZ 06B8 ;五次读盘均未成功则转错误处理(注意这时SI=0)
0000:06D4 33C0 XOR AX,AX ;置功能号
0000:06D6 CD13 INT 13 ;复位磁盘系统
0000:06D8 EBB8 JMP 0692 ;再读
;
;
0000:06DA 00 00 80 49 12 00 ...I..
;
; 0000:06E0~0000:070C:使用扩展INT 13h功能读取分区引导记录的子程序
; 调用时,SP=7BFE。这段程序利用压栈寄存器方式构造了一个磁盘地址包,请注意体会。另外,0000:06FC处
; 的一条指令就释放了几乎全部由本段程序占用的栈空间,构思之巧妙,绝对需要我们学习!
; 所以,分析该段程序,一个重点应放在栈的变化上。
0000:06E0 56 PUSH SI ;保存SI——注意,这次压栈并不构造磁盘地址包
0000:06E1 33F6 XOR SI,SI ;清零
0000:06E3 56 PUSH SI ;
0000:06E4 56 PUSH SI ;
0000:06E5 52 PUSH DX ;
0000:06E6 50 PUSH AX ;以上四条指令压栈的是扇区LBA号码*2
0000:06E7 06 PUSH ES ;压栈内存目标缓冲区首址段址
0000:06E8 53 PUSH BX ;压栈内存目标缓冲区首址偏移
0000:06E9 51 PUSH CX ;压栈所读扇区数
0000:06EA BE1000 MOV SI,0010 ;注意SI的高8位对应着磁盘地址包的保留字节,必须为0
0000:06ED 56 PUSH SI ;压栈磁盘地址包包长,执行完本条指令一个包已经构造完毕
0000:06EE 8BF4 MOV SI,SP ;规定磁盘地址包偏移指针,这时SP=7BEA
0000:06F0 50 PUSH AX ;保存AX
0000:06F1 52 PUSH DX ;保存DX
0000:06F2 B80042 MOV AX,4200 ;置扩展读功能号
0000:06F5 8A5624 MOV DL,[BP+24] ;取驱动器号,参照0000:0683
; 入口参数:AH=功能号,02为读盘操作;DL=驱动器号
; DS:SI=16字节磁盘地址包——第0字节:包长度(固定为10h);第1字节:保留,必须为0;
; 第2、3字节:所读扇区数;第4~5字节:内存目标缓冲区首址偏移;
; 第6~7字节:内存目标缓冲区首址段址; 第8~15字节:扇区LBA号码
; 出口参数:成功则AH=0;错误则AH=错误代码
0000:06F8 CD13 INT 13 ;执行扩展读操作
0000:06FA 5A POP DX ;
0000:06FB 58 POP AX ;
0000:06FC 8D6410 LEA SP,[SI+10] ;7BEA+10h=7BFA→SP(注意是取偏移而不是取单元内容)
0000:06FF 720A JB 070B ;扩展读不成功转
0000:0701 40 INC AX ;
0000:0702 7501 JNZ 0705 ;
0000:0704 42 INC DX ;AX加1溢出时(比如0FFFFh+1)DX才加1
0000:0705 80C702 ADD BH,02 ;调整BX,使偏移量增加512字节(刚好一扇区)
0000:0708 E2F7 LOOP 0701 ;0701~0708一段代码暂未明白其真实意图!
0000:070A F8 CL
C ;
0000:070B 5E POP SI ;
0000:070C C3 RET ;
;
; 0000:070D:中继跳转
0000:070D EB74 JMP 0783 ;
;
; 070F~0745是错误信息!果然是中文Windows98生成的主引导记录,所以我要特别
; “感谢”微软这个傻B,真难为它竟然用中文表述前两个信息!可惜真需显示的时
; 候鬼才能看懂是什么呢!!!我K!——耍弄我们耶!?
; 070F~0718:“分区表无效”中文信息
; 071A~072B:“加载操作系统时出错”中文信息
; 072D~0744:“Missing operating system”英文信息
0000:070F B7 .
0000:0710 D6 C7 F8 B1 ED CE DE D0-A7 00 BC D3 D4 D8 B2 D9 ................
0000:0720 D7 F7 CF B5 CD B3 CA B1-B3 F6 B4 ED 00 4D 69 73 .............Mis
0000:0730 73 69 6E 67 20 6F 70 65-72 61 74 69 6E 67 20 73 sing operating s
0000:0740 79 73 74 65 6D 00 00 00-00 00 00 00 00 00 00 00 system..........
0000:0750 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0760 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0770 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:0780 00 00 00 ...
;
; 0000:0783~0000:0789:控制权移交
0000:0783 8BFC MOV DI,SP ;
0000:0785 1E PUSH DS ;
0000:0786 57 PUSH DI ;构造一个跳转地址
0000:0787 8BF5 MOV SI,BP ;
0000:0789 CB RETF ;交控制权给分区引导记录(0000:7C00)
;
;
0000:078A 00 00 00 00 00 00 ......
0000:0790 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:07A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
;
; 07B8~07BB四个字节的内容用于什么呢?(不同机器此四字节均不同)
; 07BE~07FD为分区表,内含四个分区表项(每表项10h字节)
0000:07B0 00 00 00 00 00 00 00 00-86 D8 00 00 00 00 80 01 ................
0000:07C0 01 00 06 3F 3F FD 3F 00-00 00 41 A0 0F 00 00 00 ...??.?...A.....
0000:07D0 01 FE 05 3F FF FE 80 A0-0F 00 C0 4F 2F 00 00 00 ...?.......O/...
0000:07E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:07F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
*1:因为物理扇区号总是从1排列而起
*2:由此可见,就是使用LBA扩展读的功能,主引导记录却限制了分区引导扇区必须在LBA绝对物理扇区
0FFFFFFFFh之前才有可能从该分区引导系统!

http://www.donfor.com/book/book_cklr.asp?lable=5723&jdfwkey=36560

硬盘MBR全面分析

在分析MBR的结构之前,先有来看看计算机的引导顺序(System Boot Sequence)
Step 1. 内部电源打开,初始化,等待一小段时间用来产生稳定的电流。如果主板芯片和CPU收到了不符合规定的电流,将自动产生一个RESET信号。在主板没有收到电源的Power Good信号之前,重复步骤1。

Step 2. 执行BIOS中0FFF0h处的代码。这里只有一条JMP指令,将跳转到真正的BIOS启动程序处。

Step 3. BIOS开始加电自检(Power-On Self Test, POST),如果出现错误,启动停止。成功的话执行INT 19h(SYSTEM - BOOTSTRAP LOADER)

Step 4. BIOS开始寻找显卡,找到的话将执行显卡的BIOS。接着显卡初始化,将显示一段显卡信息,我们开机看到的第一屏就是它。

Step 5. BIOS开始执行所有其他设备的BIOS,包括软驱,硬盘等。

Step 6. BIOS显示启动信息

Step 7. BIOS开始额外的检测。一般有内存检测,如果内存有问题,将显示错误消息。

Step 8. BIOS探测所有的硬件,将显示如硬盘/光区信息等

Step 9. BIOS给出一个已知硬件的列表

Step 10. BIOS按照设置的驱动器顺序找驱动器,如果驱动器存在的话继续找启动扇区,软驱/硬盘的启动扇区都在0柱0头1扇区(cylinder 0, head 0, sector 1)

Step 11. 将启动扇区读到内存0000:7c00处,接着INT 19h开始执行0000:7c00处代码

Step 12. 如果找不到驱动器,系统显示错误信息并停止。通常是"No boot device"或"NO ROM BASIC -SYSTEM HALTED"

上面是冷启动的过程,热启动将从步骤8开始

磁盘的启动扇区就是主引导记录(Master Boot Record),包括0柱0头1扇区的512个字节,它的任务是完成BIOS到操作系统的交接。

MBR的大体结构:
偏移 内容
0000 MBR程序代码
01BE 分区表
01FE 结束标志

分区表结构
BYTE
1 如果是引导分区,就是80H,如果不是,就是00H
2-4 是该分区的起始扇区号
5 标志字节,比如05表示扩展分区
6-8 该分区的终止扇区号
9-12 该分区已使用的扇区数
13-16 该分区总共占用的扇区数

这是从我的硬盘上提取的MBR(硬盘是Maxtor的金钻20G,netfay的电脑早过时了:P),不同型号的硬盘MBR稍有不同,不过功能都是一样的

0000 33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C 3.....|.P.P....|
0010 BF 1B 06 50 57 B9 E5 01-F3 A4 CB BE BE 07 B1 04 ...PW...........
0020 38 2C 7C 09 75 15 83 C6-10 E2 F5 CD 18 8B 14 8B 8,|.u...........
0030 EE 83 C6 10 49 74 16 38-2C 74 F6 BE 10 07 4E AC ....It.8,t....N.
0040 3C 00 74 FA BB 07 00 B4-0E CD 10 EB F2 89 46 25 <.t...........F%
0050 96 8A 46 04 B4 06 3C 0E-74 11 B4 0B 3C 0C 74 05 ..F...<.t...<.t.
0060 3A C4 75 2B 40 C6 46 25-06 75 24 BB AA 55 50 B4 :.u+@.F%.u$..UP.
0070 41 CD 13 58 72 16 81 FB-55 AA 75 10 F6 C1 01 74 A..Xr...U.u....t
0080 0B 8A E0 88 56 24 C7 06-A1 06 EB 1E 88 66 04 BF ....V$.......f..
0090 0A 00 B8 01 02 8B DC 33-C9 83 FF 05 7F 03 8B 4E .......3.......N
00A0 25 03 4E 02 CD 13 72 29-BE 59 07 81 3E FE 7D 55 %.N...r).Y..>.}U
00B0 AA 74 5A 83 EF 05 7F DA-85 F6 75 83 BE 2E 07 EB .tZ.......u.....
00C0 8A 98 91 52 99 03 46 08-13 56 0A E8 12 00 5A EB ...R..F..V....Z.
00D0 D5 4F 74 E4 33 C0 CD 13-EB B8 00 00 80 08 10 16 .Ot.3...........
00E0 56 33 F6 56 56 52 50 06-53 51 BE 10 00 56 8B F4 V3.VVRP.SQ...V..
00F0 50 52 B8 00 42 8A 56 24-CD 13 5A 58 8D 64 10 72 PR..B.V$..ZX.d.r
0100 0A 40 75 01 42 80 C7 02-E2 F7 F8 5E C3 EB 74 B7 .@u.B......^..t.
0110 D6 C7 F8 B1 ED CE DE D0-A7 A1 A3 B0 B2 D7 B0 B3 ................
0120 CC D0 F2 CE DE B7 A8 BC-CC D0 F8 A1 A3 00 BC D3 ................
0130 D4 D8 B2 D9 D7 F7 CF B5-CD B3 CA B1 B3 F6 CF D6 ................
0140 B4 ED CE F3 A1 A3 B0 B2-D7 B0 B3 CC D0 F2 CE DE ................
0150 B7 A8 BC CC D0 F8 A1 A3-00 C8 B1 C9 D9 B2 D9 D7 ................
0160 F7 CF B5 CD B3 00 00 00-00 00 00 00 00 00 00 00 ................
0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0180 00 00 00 8B FC 1E 57 8B-F5 CB 00 00 00 00 00 00 ......W.........
0190 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01B0 00 00 00 00 00 2C 44 63-B5 D7 B5 D7 00 00 80 01 .....,Dc........
01C0 01 00 0B FE 7F FD 3F 00-00 00 3F 04 7D 00 00 00 ......?...?.}...
01D0 41 FE 0C FE FF FF 7E 04-7D 00 7D 9B E5 01 00 00 A.....~.}.}.....
01E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.

由于程序代码从0000:7C00开始,下面看反编译的结果(经过修改)

7C00 33C0 XOR AX,AX ;AX=0
7C02 8ED0 MOV SS,AX ;SS=0
7C04 BC007C MOV SP,7C00 ;SP=7C00
7C07 FB STI ;中断允许
7C08 50 PUSH AX
7C09 07 POP ES ;ES=0
7C0A 50 PUSH AX
7C0B 1F POP DS ;DS=0
7C0C FC CLD ;字符串操作方向:从低到高
7C0D BE1B7C MOV SI,7C1B ;源地址 DS:SI=0000:7C1B
7C10 BF1B06 MOV DI,061B ;目的地址 ES:DI=0000:061B
7C13 50 PUSH AX
7C14 57 PUSH DI
7C15 B9E501 MOV CX,01E5 ;共1E5h个字节
7C18 F3 REPZ
7C19 A4 MOVSB ;将MBR从0000:7C00移动到0000:0600
7C1A CB RETF ;跳转到0000:061B处

PARTITION_SEARCH_LOOP:

061B BEBE07 MOV SI,07BE ;SI指向分区表的开始
061E B104 MOV CL,04 ;循环4次,硬盘最多4个主分区
0620 382C CMP [SI],CH
0622 7C09 JL ACTIVE_PARTITION_FOUND
;分区是活动分区
0624 7515 JNZ INVALID_PARTITION_TABLE
;无效的分区表
0626 83C610 ADD SI,+10 ;每个分区占用16个字节,SI指向下一个分区
0629 E2F5 LOOP PARTITION_SEARCH_LOOP

062B CD18 INT 18 ;分区表搜索完,无活动分区,INT 18h=DISKLESS BOOT HOOK

ACTIVE_PARTITON_FOUND:

062D 8B14 MOV DX,[SI] ;下面的搜索保证只存在一个活动分区,否则分区表无效
062F 8BEE MOV BP,SI ;找到的引导分区标志和开始地址分别存入DX,BP

ONLY_ONE_ACTIVE_PARTITON_SEARCH_LOOP:

0631 83C610 ADD SI,+10
0634 49 DEC CX
0635 7416 JZ GOOD_PARTITION_TABLE ;搜索完毕,剩下的分区中无活动分区,分区表正常
0637 382C CMP [SI],CH
0639 74F6 JZ ONLY_ONE_ACTIVE_PARTITON_SEARCH_LOOP ;如果还有活动分区则继续向下执行

INVALID_PARTITION_TABLE:

063B BE1007 MOV SI,0710 ;SI指向要显示的错误信息处

HANG_MACHINE_LOOP:

063E 4E DEC SI

DISPLAY_ERROR_MESSAGE_LOOP:

063F AC LODSB
0640 3C00 CMP AL,00
0642 74FA JZ HANG_MACHINE_LOOP
;到字符串尾时进入死循环,停止运行
0644 BB0700 MOV BX,0007
0647 B40E MOV AH,0E
0649 CD10 INT 10 ;显示错误信息

DISPLAY_ERROR_MESSAGE_LOOP_ALIAS:

064B EBF2 JMP DISPLAY_ERROR_MESSAGE_LOOP

GOOD_PARTITION_TABLE:

064D 894625 MOV [BP+25],AX
;tmpvar=BP+25处清零,作为临时变量
0650 96 XCHG SI,AX ;SI=0
0651 8A4604 MOV AL,[BP+04]
;读分区类型入AL
0654 B406 MOV AH,06
0656 3C0E CMP AL,0E ;类型 WIN95: DOS 16-bit FAT, LBA-mapped
0658 7411 JZ TYPE_WIN95_DOS_16BIT_FAT_LBA

065A B40B MOV AH,0B
065C 3C0C CMP AL,0C ;类型 WIN95 OSR2 32-bit FAT, LBA-mapped
065E 7405 JZ TYPE_WIN95_OSR2_32BIT_FAT_LBA

0660 3AC4 CMP AL,AH ;类型 WIN95 OSR2 32-bit FAT
0662 752B JNZ TYPE_DEFAULT
0664 40 INC AX ;AX=0B0C

TYPE_WIN95_OSR2_32BIT_FAT_LBA:

0665 C6462506 MOV BYTE PTR [BP+25],06
;tmpvar=06
0669 7524 JNZ TYPE_DEFAULT
;这里有点问题,这个转移应该肯定不成立?

TYPE_WIN95_DOS_16BIT_FAT_LBA:

066B BBAA55 MOV BX,55AA
066E 50 PUSH AX
066F B441 MOV AH,41
0671 CD13 INT 13 ;int 13h扩展功能的检测,IBM/MS INT 13 Extensions - INSTALLATION CHECK
0673 58 POP AX
0674 7216 JB INT13H_EXTENSION_UNSUPPORTED
;CF=1 - 不支持int 13h扩展功能
0676 81FB55AA CMP BX,AA55 ;BX不为AA55 - 不支持int 13h扩展功能
067A 7510 JNZ INT13H_EXTENSION_UNSUPPORTED
067C F6C101 TEST CL,01 ;CL不为1 - 不支持int 13h扩展功能
067F 740B JZ INT13H_EXTENSION_UNSUPPORTED
0681 8AE0 MOV AH,AL ;AH=0E
0683 885624 MOV [BP+24],DL
;tmpvar=DL,引导分区标志
0686 C706A106EB1E MOV WORD PTR [06A1],1EEB
;改06A1处指令为PUSH DS; JMP NEW_LOCATION_1

INT13H_EXTENSION_UNSUPPORTED:

068C 886604 MOV [BP+04],AH
;如果支持的话置分区类型为0E(类型 WIN95: DOS 16-bit FAT, LBA-mapped)
;否则为06(类型 DOS 3.31+ 16-bit FAT over 32M)

TYPE_DEFAULT:

068F BF0A00 MOV DI,000A

READ_SECTOR_LOOP:

0692 B80102 MOV AX,0201
0695 8BDC MOV BX,SP ;BX设置为7C00
0697 33C9 XOR CX,CX ;CX=0
0699 83FF05 CMP DI,+05
069C 7F03 JG NEW_LOCATION_0

069E 8B4E25 MOV CX,[BP+25]

NEW_LOCATION_0:

06A1 034E02 ADD CX,[BP+02]
06A4 CD13 INT 13 ;将活动分区的起始扇区读到0000:7C00

NEW_LOCATION_1:

06A6 7229 JB READ_SECTOR_ERROR
;CF=1 - 错误
06A8 BE5907 MOV SI,0759
06AB 813EFE7D55AA CMP WORD PTR [7DFE],AA55
;扇区结束标志是否正确?
06B1 745A JZ READ_SECTOR_SUCCEEDED
;正确
06B3 83EF05 SUB DI,+05 ;DI=DI-5
06B6 7FDA JG READ_SECTOR_LOOP

06B8 85F6 TEST SI,SI
06BA 7583 JNZ DISPLAY_ERROR_MESSAGE_LOOP:
;显示错误信息:缺少操作系统

06BC BE2E07 MOV SI,072E
06BF EB8A JMP DISPLAY_ERROR_MESSAGE_LOOP_ALIAS
;显示错误信息:加载操作系统时发生错误。

070D EB74 JMP CONTINUE_KOAD_OS

0783 8BFC MOV DI,SP
;DI=7C00
0785 1E PUSH DS
0786 57 PUSH DI
0787 8BF5 MOV SI,BP
0789 CB RETF ;转到执行0000:7C00处的语句,即操作系统的引导程序

http://blog.donews.com/zzandzry/archive/2006/02/17/730542.aspx

Tuesday, April 22, 2008

Infected with virus?

Infected by virus on your PC could make you feel fizzy, it's so hard to handle sometimes.

Recently my customer's computers were infected with virus.

There are so many kinds of virus around. Some could crash your software, eg. OS like Windows, DOS, while some could damage your hardware, eg. hard disk being unable to boot up or be detected, motherboard breaking down.

The cases, so far, I handle and rectify successfully were to recover the motherboard to function properly, and to solve Windows that won't boot properly.

For the former case, the symptom of motherboard appeared were it couldn't boot up, but with LED light on inside it while plugging with main supply. In fact, it was infected with virus at its BIOS chip, the firmware was modified. My solution to it was to take off the CMOS battery for some mins, and replaced it back, turn the power on and it booted successfully.

Another case was Windows XP being infected with W32.Sasser.Worm. The symptom was it displayed "lsass.exe system error, an invalid parameter was passed to a service or function". I tried to use anti virus to scan and repair under DOS, yet the infected files were skipped to be scanned. I would like to give a try on re-installation of Windows XP, however it will take much time to do it without having exact result you predict. As a result, I try to boot the computer up with Windows XP installation CD, and repaired it under Recovery Console. (Of course you need to know Administrator's password to proceed.) What I did was I copied all the files under c:\windows\repair to c:\windows\system32\config and replaced all of them. Restarted the PC, it could boot successfully, however, the PC was still infected with virus. The next thing needs to be followed up was, downloading the latest version of anti virus and to scan the whole system throughly.

Well, I am learning how to recover the data from a problem hard disk effectively, that's to reduce data loss.

BTW, today is my birthday! For both Chinese & Western Calendar. :)

Monday, April 21, 2008

Howto: Watch P2P Tv with SopCast with Ubuntu Gutsy

Sopcast

This guide will help you install sopcast on Ubuntu 7.10 Gutsy. It will also help you get a special modified version of the GUI running and setup firefox to send sop:// links to the program.

Installing packages

Make sure you have all universe and multiverse repositories switched on. Then, in terminal:

sudo apt-get install qt3-apps-dev vlc build-essential

Downloading the latest SopCast binary

Sopcast ix86 binary

Unzip it and cd into that directory using terminal. Then run:

sudo cp sp-sc-auth /usr/bin/sp-sc

Downloading and building the latest GUI

Download this specially modified source package. I have added URL handling.

RKMOD version of QSopCast

Aga‌in, unzip it and cd into that (src) directory using terminal. Then run

sudo qmake
sudo make
sudo make install


This should compile the source and install the binary into the correct location.

Creating a menu shortcut

Go to System / Preferences / Main Menu... then 'Internet' and 'Add New Item'. Give it the name "QSopCast" and command "qsopcast". You should now be able to launch from the main menu.

Setting up the GUI

Once the gui is open, goto config then config again. Make sure that the player settings are all set to "vlc" and that the channel URL is set to "http://www.sopcast.com/gchlxml"

You should now be able to watch sop casts by selecting a channel, launching it and then hitting player when the stream is at 100%

Firefox sop:// URLS

Go into firefox and enter URL: "about:config". Right click, select new and string. The string name is "network.protocol-handler.app.sop" and the value is "qsopcast". It should now sent sops to the modified version of QSopCast ready to be launched.

http://www.linux.ryukent.co.uk/show.php?id=36

How to use scim to type Chinese characters under English environment?

Just open /etc/environment and add another line in it:

LC_CTYPE="zh_CN.UTF-8"

after

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"

Beware of the symbols used, it's LC_CTYPE="zh_CN.UTF-8", not LC_CTYPE=“zh_CN.UTF-8“ as mentioned in http://www.oklinux.cn/html/Basic/jyjq/20080323/49865.html

So the new /etc/environment will be

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"
LC_CTYPE="zh_CN.UTF-8"

Ubuntu Gutsy Gibbon (Ubuntu 7.10,): fsck died with exit status 8

While booting into system, it always stops at prompt command with this error:

fsck died with exit status 8

Do not restore the whole system with partimage first, Do not do fsck repair too here.

1. Check /var/log/fsck/checkfs, open it with gedit (or other text writer) and found the error detail was:

fsck.ext3: unable to resolve 'UUID=b0cf22fd-cf7e-430b-b667-2ed7adc25e24'
fsck died with exit status 8

The problem obviously comes from this UUID.

2. Go to check /etc/fstab, found the aforesaid UUID was referred to my sda9. (note1)

3. To check the new UUIC of sda9, type the following in the terminal:

sudo vol_id /dev/sda9

and found the new UUID=9E3C0C603C0C3635

4. Before editing fstab, make a backup of it:

sudo cp /etc/fstab /etc/fstab.old

then at terminal, key in: sudo gedit /etc/fstab

inside fstab, replace the old UUID (b0cf22fd-cf7e-430b-b667-2ed7adc25e24) with this new UUID (9E3C0C603C0C3635) for sda9 part. For my case, I need to change the filesystem from ext3 (for a swap partition) to ntfs, and other options I copy from other ntfs drives.

5. Save file and restart the PC, the problem was rectified!

note1: I used to use partimage to make backup of the whole system, just in case the system crashes and I could restore the system within 20 mins. Why did the above issue rise? Cause I used the backup to restore the whole system after I re-partitioned my hard drive with an extra drive for storage purpose, which is referred to sda9 while this sda9 was referred to a swap partition. Thus, the UUID which seized the problems now was previously belonging to the swap partition, not the new ntfs partition.

Sunday, April 20, 2008

Wine完全使用指南——从基本到高级

http://forum.ubuntu.org.cn/viewtopic.php?t=72933

为了回应最近网友的一些普遍问题,特此作以下说明:
1、如果发现wine的注册表没有相应的键值,要自己创建。有时候用命令不行的话,只能手动一个个添加。
2、wine还是一个不成熟的软件,经常出现bug,一切使用的问题和风险都只能自己承担。
3、wine并不完善,不是所有程序都能用wine解决,有些甚至根本无法解决(反作弊,凡外挂,虚拟光驱等)。


一直苦于没有一篇像样的使用指南,原来外国有朋友跟我有同感,既然他捷足先登了,那我只好翻译了。
原文作者说会保持更新,这篇文章是很新的,介绍了很多实用的Wine设置方法,非常全面,无论新手还是老鸟都值得一读。
原文:
http://sudan.ubuntuforums.com/showthread.php?t=497332

我收集到的关于Wine的一些资料

如果你像我一样的话,当你第一次使用Wine的时候,就会被Wine的帮助文章现状所困扰。互联网上确实有很多的HOWTO文章来教你使用一些程序或游 戏,但是我找不到一个全面的“Wine初学者教程”来让我真正懂得实际了解和使用Wine所需的基本知识。我不需要一个教我如何运行半条命2的文章,我需 要的是一篇能实实在在教我怎样使用Wine的文章。最后,我整理了从众多的Wiki、指南、帖子和HOWTO搜集来的资料,写成这篇文章。虽然这篇文章主 要针对在Wine下运行游戏,但是它包括的几乎所有的信息都可以应用到用Wine来运行其它的程序。

一般资料
“winecfg”的使用资料
特殊配置资料
安装资料
一般使用资料
第三方软件资料
高级设置资料


1一般资料

1.1Wine is not an emulator
这个我就不翻译了,没有多少技术介绍。

1.2使用最新的Wine
记住最新版的Wine会包含一些旧版本里没有的bug。在feisty的软件仓库里包含了0.9.33,而最新的Wine是0.9.44(我翻译 文章时)。0.9.33更加稳定,但是最新的版本包含重大的DirectX改进。有一些不能在0.9.33下运行的游戏能够在0.9.44中很好地运行。 在使用0.9.37到0.9.40之间的某些版本运行KotOR2时,声音在我的系统上崩溃了。那是最好的有关使用最新版导致棘手问题的好例子。
(译者:我个人还是推荐使用最新版,使用新版本会有更好的运行速度,而且基本上每个bug都会在未来的2~3个版本中被修复)

1.3不要从源码编译安装Wine
(译者:作者没有说为什么,可能是因为编译要解决的依赖性问题太多了。
我个人还是推荐编译安装,这样安装完后问题少一点,性能好一点。)

1.4使用终端
如果正确安装的话,wine会把它自己关联到exe文件,所以你只要双击exe文件就可以运行。无论怎样,这都不是我们所推荐的使用wine的方 法(译者:我也不推荐)。使用终端会比较好,因为这样可以正确地设定程序的路径,否则程序就会找不到所需要的文件。另外,使用终端还可以显示出错误信息, 这对于解决问题是非常有用的。

1.5准备对付挫折
Wine并不完美。不会所有的事情都能顺利发展,有时候甚至需要你自己去解决问题。但你现在是一个linux用户了,你就要准备着去应付。

2“winecfg”的使用资料

2.1运行“winecfg”
你至少需要运行一次winecfg来设置wine的目录和硬件。

2.2虚拟桌面
使用这个选项可以使软件的安装更加流畅。我发现在不使用这个选项的时候,使用某些程序会导致已经激活的对话框、CDKEY输入窗口或更换光盘的确 认窗口不能出现在前端。让我以为程序卡死了,就kill掉了进程。选择这个选项还能够避免程序锁死你的桌面或者把你的屏幕分辨率改成难看的模式。

2.3使用Application Settings
你可以在winecfg的Application标签里的Application Settings对话框对个别的程序进行自定义设置。那里只允许你进行windows兼容运行模式设置(译者:像windows下的exe属性里的兼容性 标签)、某些显示设置和DLL的设置。
当你只需要设置某个程序使用某些特定的windows自带的DLL,不希望其它程序(包括wine)使用这些native的DLL的时候(而其 它程序使用这些DLL会导致问题),(译者:wine自带的DLL叫做builtin,windows下原生的DLL叫做native)这个选项就会变得 十分有用。在进行DLL设置时我都用这个方法,就是为了防止某些对wine的运行存在潜在威胁的nativeDLL被wine调用(译者:在一般情况下, wine只调用自带的builtinDLL,而不会使用native的DLL,版权问题,除非经过设置,如上所述)。这样我就只是修改了那些可执行的配置 文件,当我不需要时,可以改回来而不会损坏整个Wine。(译者:设置这些东西之前,保证已经将一个程序的exe文件添加到Application标签的 白框中,并且反色选中。不是default的那个,是你所需要设置的那个exe文件。)

2.4Windows版本
对不同的程序尝试不同的Windows版本。这就是说一个为了XP而设计的游戏可能会在wine的98模式的支持下能更好地运行。在做这个之前确认你已经把程序添加到Application的白框中,并且选中,反色显示。

2.5使用ALSA驱动
有些游戏是需要OSS才能运行,但是OSS已经不会再继续开发了。
(译者:推荐只是独立声卡使用ALSA,集成的还是使用OSS最好)

2.6不要总是选择allow the window manager to control the windows(winecfg里的)
使用这个选项有时候会使游戏在全屏幕运行时出现问题。当前的wine版本0.9.39+已经修正了多数游戏的全屏问题,但是引入了一个新的问题: 当不使用这个选项时,会使键盘不能游戏中输入。在使用一个单独的X server来运行游戏时,这个问题可以得到解决。(见“高级设置资料”)

2.7谨慎对待DLL
winecfg可以让你用native的DLL替换builtin的DLL。下面的这些DLL是绝对不能被替换的。kernel32.dll, gdi32.dll,user32.dll,和ntdll.dll。有些nativeDLL也可能使一些程序不能运行。记得永远不要覆盖wine自带的 dll,如果native的用不了就用builtin的换回来。有些MS的DLL要得到许可才能用,如果你没有许可,就不要用。

3特殊配置资料

3.1建立一个到CD的链接
Wine会建立一个到你挂载CD的文件夹的链接,但是建立一个到真正的/dev里的设备的链接会更好。我发现如果不这样做,Wine会自己建立到 /dev的链接,把CD认成E:盘,而我的挂载目录却链接为D:盘。我认为这个可能会导致某些使用CD安装的程序出现问题。修改/dev/hdc以适应你 的系统(译者:7.04一般都是/dev/scd0)。

代码:
ln -s /dev/hdc ~/.wine/dosdevices/d\:\:


3.2实用注册表键值
有些设置是不能通过winecfg来进行设置的,但是可以在注册表中进行设置。在wine的wiki中有一篇保持更新的文章
http://wiki.winehq.org/UsefulRegistryKeys
有两个键值是非常有用的,一个是Alsa Driver的UseDirectHW,可以解决一些声音跳顿的问题;还有Direct3D的VideoMemorySize,你应该设置成你的显卡的准确显存,默认wine会设置成64MB。

3.3WINEPREFIXCREATE
这个我暂时不翻译

3.4安装Wine Gecko IE engine
有些程序的运行依赖于IE,但是,安装IE会严重地破环Wine。所以可以安装Wine Gecko IE engine作为替代品。
1、在终端下运行下面的命令:

代码:
wine iexplore http://www.winehq.org


2、当出现安装提示时回答yes
3、打开http://wiki.winehq.org/UsefulRegistryKeys,找到HKEY_LOCAL_MACHINE板块
4、把所有有关Internet Explorer的键值加到注册表中
安装完成后,运行

代码:
wine iexplore http://www.winehq.org


成功的话就会出现winehq的主页。

3.5中文支持设置
把下面的代码保存为zh.reg,然后终端执行regedit zh.reg。从Windows目录下的Fonts里的simsun.ttc复制到/home/user/.wine/drive_c/windows/fonts里面。
代码:
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"Arial"="simsun"
"Arial CE,238"="simsun"
"Arial CYR,204"="simsun"
"Arial Greek,161"="simsun"
"Arial TUR,162"="simsun"
"Courier New"="simsun"
"Courier New CE,238"="simsun"
"Courier New CYR,204"="simsun"
"Courier New Greek,161"="simsun"
"Courier New TUR,162"="simsun"
"FixedSys"="simsun"
"Helv"="simsun"
"Helvetica"="simsun"
"MS Sans Serif"="simsun"
"MS Shell Dlg"="simsun"
"MS Shell Dlg 2"="simsun"
"System"="simsun"
"Tahoma"="simsun"
"Times"="simsun"
"Times New Roman CE,238"="simsun"
"Times New Roman CYR,204"="simsun"
"Times New Roman Greek,161"="simsun"
"Times New Roman TUR,162"="simsun"
"Tms Rmn"="simsun"


4安装资料

4.1不要在CD的目录下安装程序
(译者:就是不要cd到CD的挂载目录运行安装程序)
如果这样做的话,就会在换CD时出现CD不能推出的问题,用下面的命令来安装CD:

代码:
wine /media/cdrom0/setup.exe


4.2需要用到“wine eject”
如果安装程序需要你换CD,而系统却说不能推出CD,那就打开一个新终端,输入:

代码:
wine eject d:


4.3安装InstallShield的bug补丁
安装http://support.installshield.com/kb/files/Q108322/IkernelUpdate.exe
这个补丁可以解决一些CD安装问题。

4.4使用uninstaller
使用命令“uninstaller”来卸载安装的程序,不要使用程序在菜单里面创建的卸载快捷方式,他们有时候不能正常工作,而uninstaller可以。

4.5安装.msi文件
有些windows的安装程序是使用msi来安装的,那就用下面的命令来安装:

代码:
wine msiexec /i install.msi

或者
代码:
wine start install.msi


4.6不要安装DirectX
Wine有它自己的DirectX库,安装微软的DirectX会破坏wine的DirectX库和Wine。
但是,d3dx9_##.dll和d3dx10_33.dll可以从Windows复制过来使用,可能会在启动某些游戏时有所帮助。使用这些dll你需要微软的授权证书。

5一般使用资料

5.1如何用wine来运行程序

代码:
wine application.exe


5.2运行程序前cd到程序的安装目录
cd到程序的安装目录再运行程序。

5.3关掉WINEDEBUG
一般情况下,wine会不断地产生一些debug信息(那些“fixme”的东西)。那些信息在很多情况下是没有用的,尤其你已经可以正常地运行一个程序。你可以使用下面的命令来避免debug信息,节省资源:

代码:
WINEDEBUG=-all game.exe


5.4不要使用root或者sudo来运行wine
可能会损坏系统文件。

5.5其他wine的命令
wineboot 模拟windows的重新启动
wine control 运行控制面板
wineserver wineserver会随着wine的命令自动启动,但也能通过终端启动来达到不同的目的。
wineserver的一些参数
1、-d# 设置终端中debug的显示级别。
2、-h 显示wineserver帮助文件
3、-k kill掉当前的wineserver,当程序失去响应而你要结束它时使用。
4、-p 让wineserver一直运行,也就是说即使程序退出了,wineserver还继续运行。当你需要运行连续的程序时可以使用,这样可以缩短程序的启动时间。
5、-w 让wineserver一直运行直到当前已激活的wineserver退出。

5.6让Wine运行更流畅
当出现程序运行缓慢或性能起伏不定的问题时,可以通过提高进程的优先级来解决。启动游戏后,可以使用“renice”命令来改变进程的优先级。 “renice”命令可以改变当前进程的优先级,“nice”的值是优先级级别的标志,(高优先级=低nice值,低优先级=高nice值)。这个命令把 程序优先级的值设置为从-20(最高优先级)到19(最低优先级)之间的任何一个整数值,而默认的值是0。在启动游戏以后,你需要打开另外一个终端输入下 面的命令来改变程序的优先级:

代码:
sudo renice -10 -n game.exe


在用Wine运行游戏时,我不推荐直接把程序的优先级设置到-20,最好是从-10开始,如果效果提升不明显,可以一步步尝试小幅度的提高(- 11,-12,……)。你会发现绝大多数的游戏不需要比-10更高的优先级就已经可以达到最好的性能了。不用多说(我认为),在游戏中你可以用ALT- TAB组合键回到桌面使用“renice”命令。

第二种方法
使用图形界面来设置优先级。
1、 用终端运行游戏,按ALT-TAB回到桌面
2、 系统——>系统管理——>系统监视程序,切换到进程标签
3、 在进程上点右键——更改优先权
4、 要求密码时输入
5、 关闭系统监视程序,用ALT-TAB回到游戏


6第三方软件资料

6.1 WineTools
WineTools是一个菜单式的可以安装90多个常见Windows程序的软件。它也可以帮助你设置Wine的基本目录。已经不再有人维护 WineTools,它已经两年没有升级了,但很多用户都发现它依然有用。而WineTools所作的一切事情都可以自己通过winecfg或终端完成。

6.2Wine-Doors
Wine-Doors是一个帮助你安装很多的Windows程序,包括游戏的一个图形界面的软件。它现在还处在开发阶段,但已经发布了一个可以下载的最初版本。就这个软件看来,是非常有前途的。

6.3Cedega
Cedega就技术上来说是Wine的一个分支,它明确地针对于游戏。cedega包含了一个安装和运行游戏的图形界面,还加上了对受防拷贝保护的软件的 支持(不需要使用破解来免CD)(译者:wine的对防拷贝的支持不是很好)。cedega不适免费的,最低消费是购买3个月,每月3美元,如果预付一年 的费用的话,可以享受一点折扣。cedega从前叫做WineX,在Wine还是MIT软件,而不是现在的GPL的时候,WineX就从wine的一个分 支分离出来,就因为cedega不属于GPL,cedega不再对wine的代码发展作贡献了。再加上cedega缺少支持,很多人便不再用cedega 在linux下玩游戏。

6.4CrossOver
CrossOver从技术上来说,CrossOver不是wine的一个第三方产品,而是wine的主要财力支持者。CrossOver一开始是 以在linux下运行Microsoft Office软件为目标的,但最近它开始添加对游戏的支持。CrossOver基于一个更老,更稳定的Wine版本(译者:好像是0.9.17),但 CrossOver也随着Wine一起升级。CrossOver标准版的售价是39.95美元。

6.5ReactOS
正如CrossOver一样,ReactOS也是Wine的一个支持者,基于许多Wine已经完成的成果,它致力于建立一个能与Windows完 全兼容的操作系统。完成后,ReactOS能够使用Windows的驱动程序和软件,完全兼容。这项计划还处于开发阶段,但已经可以提供安装CD、 LiveCD、QEMU和VMware镜像的下载。

7高级设置资料

7.1使用启动脚本(使用之前确保游戏能够正常运行)
再使用单独得X server时,很多游戏一般都可以发挥出他们最佳性能。wine不需要窗口管理器(GNOME或KDE)就可以正常地运行,所以如果你在一个单独的X server下运行游戏,你会得到明显的性能提升。在运行游戏之前,关闭GDM或KDM,还会得到更大的性能提升(只能通过控制(console)台来实 现)。
1、首先,在终端下建立一个脚本
代码:
nano launcher.sh(可以用vim替换nano)

2、复制下面的文字到终端里。如果你没有nVidia的显卡,就删除nvidia settings的那部分,然后用你的游戏的正确路径替换里面的路径
代码:
#!/bin/sh
#uncomment if launching from console session
#sudo /etc/init.d/gdm stop
#KDE use this instead
#sudo /etc/init.d/kdm stop

# Launches a new X session on display 3. If you don't have an Nvidia card
# take out the "& nvidia-settings --load-config-only" part
X :3 -ac & nvidia-settings --load-config-only

# Goto game dir (modify as needed)
cd "$HOME/.wine/drive_c/Program Files/Game/Directory/"

# Forces the system to have a break for 2 seconds, X doesn't launch instantly
sleep 2

# Launches game (modify as needed)
DISPLAY=:3 WINEDEBUG=-all wine "C:/Program Files/Game/Directory/game.exe"

3、把文件保存到你的主文件夹(保存Ctrl+O,退出Ctrl+X。Vim的话先Esc,再Shift+:,保存w,退出q)
4、然后,给你的脚本加上可执行属性
代码:
chmod +x ~/launcher.sh

5、运行脚本
代码:
sh launcher.sh


代码:
./launcher.sh

6、结束游戏后,用CTRL-ALT-BACKSPACE回到桌面

第二种方法
如果你的游戏不能运行或者只是单纯想压榨出更好的游戏性能,跟着下面的步骤尝试在关闭X session的情况下运行游戏。
1、取消注销“sudo /etc/init.d/gdm stop”语句(删除#)后保存,如果你是使用KDE,就取消注销“sudo /etc/init.d/kdm stop”。
2、关闭所有程序,按CTRL-ALT-F1打开控制台
3、在控制台登陆并运行这个脚本。你会被要求输入密码,然后游戏会在它自己的X session里运行,而没有GDM或KDM的妨碍。
4、如果脚本显示你没有启动X session的权限,就修改那个脚本
按照这样修改X server的启动语句
代码:
sudo X :3 -ac & nvidia-settings --load-config-only


注意:为了避免修改脚本,你可以修改Xwrapper.config给与一般用户启动X的权限。用sudo vim打开/etc/X11/Xwrapper.config,把allowed_users=console修改为allowed_users=anybody。

5、结束游戏后,可以重启或CTRL-ALT-BACKSPACE回到控制台,重新启动X和桌面:
代码:
sudo /etc/init.d/gdm start

如果是KDE
代码:
sudo /etc/init.d/kdm start

桌面会很快出现,还不行的话就输入
代码:
startx


注意:
1、如果让游戏使用它自己的X session,确认禁止winecfg里的virtual desktop。
2、让游戏使用它自己的X session可以解决在游戏时键盘无法输入的问题。


NOTE: ctrl + h to show hidden files

安装ATI的8.1显卡驱动并开启3D特效简明教程

http://forum.ubuntu.org.cn/viewtopic.php?t=101724

声明:看很多安装不成功,我这里重申一下,要安装成功需要三个条件,缺一不可:
1.没有旧驱动,如果有旧驱动而删除不干净,就重装一下,保证纯净系统
2.明确你的显卡在支持范围以内。
3.受限管理器不要去改动
.

安装过程非常简单,不用再编译deb包。
如果安装不成功,就看新帖
http://forum.ubuntu.org.cn/viewtopic.php?t=102298&highlight=
一。下载地址:http://ati.amd.com/support/drivers/linux/linux-radeon.html
首先检查一下你的显卡是否在以下支持范围以内:
引用:
工作站产品
FireGL™ V8650/V8600
FireGL™ V7600/V7350/V7300/V7200/V7100
FireGL™ V5600/V5200/V5100/V5000
FireGL™ V3600/V3400/V3300/V3200/V3100
FireGL™ X3-256/X3/X2-256/Z1-128/T2-128/X1-128/X1-256p
FireGL™ 2200 (Single card PCI-e configuration)
Mobility™ FireGL™ V5000/T2
移动及整合产品
Mobility™ Radeon™ X1800/X1600/X1400/X1300/X1200/X1100/X800/X700/X600/X300/X200/9800/9600/9550/9500 series
Mobility™ Radeon™ Xpress 1200/1100/200 series
桌面及整合产品
Radeon™ HD 2900/2600/2400 series
Radeon™ X1900/X1800/X1300/X850/X800/ X700/X600/X550/X300/9800/9700/9600/9550/9500 series
Radeon™ Xpress1200/1100 /200 series

最好是以前没有装过驱动。
二。安装命令:
代码:
sudo sh ati-driver-installer-8-01-x86.x86_64.run
sudo aticonfig --initial
sudo reboot

这样就安装好了,比之前的7.11,7.12简单很多吧。
三。重启之后,受限管理器会自动启用新驱动,不要去改动它,用以下命令测试一下是否安装成功。
代码:
$ fglrxinfo

引用:
display: :0.0 screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: RADEON X800 GTO
OpenGL version string: 2.1.7276 Release

代码:
$ glxinfo |grep -e 'direct' -e 'OpenGL'

引用:
direct rendering: Yes
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: RADEON X800 GTO
OpenGL version string: 2.1.7276 Release
OpenGL extensions:

出现这样的返回值就说明安装成功了。
四。把compiz-fusion安装全了,命令:
代码:
sudo apt-get install compiz compiz-bcop compizconfig-settings-manager compiz-core compiz-fusion-plugins-main compiz-fusion-plugins-extra compiz-gnome compiz-plugins libcompizconfig0 libcompizconfig-backend-gconf libdecoration0 python-compizconfig emerald -y

五。装完之后,还有重要的一步,因为Ubuntu7.10发布的时候ATI的显卡驱动还不支持AIGLX,所以要借助XGL才能开启compiz,但是现在装的最新的驱动已经提供了AIGLX的支持,不再需要XGL了。所以必须经过以下操作才能屏蔽掉XGL的检测。
1。
代码:
sudo gedit /etc/X11/xorg.conf

查看一下文件中是否有这一段存在
引用:
# Section "Extensions"
# Option "Composite" "0"
# EndSection

有的话就删掉,没有就不要动了。
2。然后再让compiz识别fglrx。命令:
代码:
mkdir -p ~/.config/compiz && echo SKIP_CHECKS=yes >> ~/.config/compiz/compiz-manager

3。然后修改compiz初始文件
代码:
sudo gedit /usr/bin/compiz

找到下面的语句,将fglrx加入
引用:
# Driver whitelist
WHITELIST="fglrx nvidia intel ati radeon i810"

4。再找到下面的语句,
引用:
# blacklist based on the pci ids
# See http://wiki.compiz-fusion.org/Hardware/Blacklist for details
T=" 1002:5954 1002:5854 1002:5955" # ati rs480
T="$T 1002:4153" # ATI Rv350
T="$T 8086:2982 8086:2992 8086:29a2 8086:2a02 8086:2a12" # intel 965
T="$T 8086:2972" # i965 (x3000)
T="$T 1002:3152 1002:3150 1002:5462 1002:5653 " # ati X300 X600,X600 X700
BLACKLIST_PCIIDS="$T"

将上面的语句段改为:
引用:
# blacklist based on the pci ids
# BLACKLIST_PCIIDS="$T"
BLACKLIST_PCIIDS=""

5。重启一下 X-window,看一下compiz能否启动。在“视觉效果”里选择自定义就可以开启3D了。
六。安装compiz-0.6.99,可以到这里http://kwatrow.nl/repo/dists/Gutsy/compiz-fusion-git/
下载deb包。在新立得中把旧的compiz删除干净。然后把以下deb包放在一个文件夹
引用:
compiz_0.6.3
compiz-bcop_0.6.99
compizconfig-settings-manager_0.6.99
compiz-core_0.6.3
compiz-fusion-plugins-extra_0.6.99
compiz-fusion-plugins-main_0.6.99
compiz-fusion-plugins-unsupported_0.6.99
compiz-gnome_0.6.3
compiz-plugins_0.6.3
emerald_0.6.99
emerald-themes_0.6.99
libcompizconfig0_0.6.99
libcompizconfig-backend-gconf_0.6.99
libdecoration0_0.6.3
libemeraldengine0_0.6.99
python-compizconfig_0.6.99

对于KDE用户相应改为
引用:
compiz-kde_0.6.3
libcompizconfig-backend-kconfig_0.6.99

一个命令就安装好了
代码:
sudo dpkg -i *.deb

注意:第五大步骤是必须做的,原因我已经说明白了,驱动的更新只能是减少安装步骤,而第五步这个过程想要省略的话恐怕要等8.04发布了。

Wine 编译安装-中文设置

http://forum.ubuntu.org.cn/viewtopic.php?t=76591&postdays=0&postorder=asc&start=0

“最新”的解决依赖性问题的方法在
http://forum.ubuntu.org.cn/viewtopic.php?t=103958

谢谢xf22cn,他解决了7.10编译安装时的xlibs-dev的问题
http://forum.ubuntu.org.cn/viewtopic.php?t=104092

在编译安装Wine之前,请确保已经正确安装显卡、声卡驱动(ALSA、OSS);并且显卡支持opengl,3D硬件加速等。具体方法请自己搜索。
发现问题,先前写的安装依赖包里少了flex和bison,现已加入下面apt-get的命令中。已经执行下面的命令的再执行一次
代码:
sudo apt-get install flex bison


Ubuntu安装wine一般使用两种方式,源码编译或者从网络源安装。
源码编译安装相对比较稳定,速度快、效率高,但是需要时间编译,相比一分钟的源安装,几十分钟的编译确实很长。源安装是别人已经帮你编译好的了,但是安装以后出现各钟奇怪问题的几率较高。一般来说是这样,所以还是编译安装比较好。
编译安装最让人头痛的是解决包的依赖性问题。安装wine你需要安装下面的包,只要你的ubuntu能够上网,有可用的安装源,那就可以比较轻松了。

1、打开终端,输入

代码:
sudo apt-get install build-essential


代码:
sudo apt-get install gcc libc6-dev fakeroot libglib1.2-dev libglib2.0-dev libltdl3-dev libmad0-dev libmng-dev libodbcinstq1c2 libogg-dev libpng12-dev libqt3-headers libqt3-mt-dev libvorbis-dev libxft-dev libxi-dev libxinerama-dev libxmu-dev libxmu-headers libxmuu-dev libxpm-dev libxtrap-dev libxtst-dev libxv-dev libxxf86dga-dev qt3-dev-tools render-dev unixodbc-dev x-dev x11proto-record-dev x11proto-trap-dev x11proto-video-dev x11proto-xf86dga-dev xlibs-dev fontforge flex bison libxext6

提示输入密码时输入密码,输入时屏幕不会出现文字,确认输入正确后按回车就可以了。注意每个包的名字之间要有空格。

2、下载最新的Wine的源码包
http://www.winehq.org/?announce=latest
在最上面的两个地址里任选一个,下载。把下载的文件放到合适的地方,比如你的主文件夹 /home/user (user是你登录所用的用户名,下同)。

3、打开终端(假设你的下载文件在你的主目录,Wine的版本是0.9.45)输入
代码:
tar jxvf wine-0.9.45.tar.bz2

4、输入
代码:
cd wine-0.9.45

5、输入
代码:
sudo ./configure

这时wine开始检查编译环境,检查包依赖是否通过,如果这个不出差错,剩下的几步就只是时间问题。很多人在编译遇到困难而放弃的,最大的原因就是这里了。
6、编译完成以后,就会提示你可以 make depend && make 了,输入
代码:
sudo make depend && make

接下来就是最漫长的过程,CPU占用会保持在90到100之间,一般的机器需要1个小时左右才能完成。这个过程可以去听歌,浏览网页。
7、编译完成以后,会提示你Wine built successfully,这时输入
代码:
sudo make install


这样,wine的编译安装就大功告成了,接下来就是wine的设置了。

1、打开终端,输入(一定不要用sudo或者root用户执行这个,如果用一般用户时出现问题,都是前面的某些步骤没有做好,而不单单是权限的问题,用root很多时候非但不能解决问题,还会使问题更严重)。
代码:
winecfg

这个命令在使用wine之前至少要执行一次,他会建立wine的运行文件夹 /home/user/.wine .wine是一个隐藏文件夹,里面有wine的注册表文件和虚拟的C盘。
稍等片刻,就会出现一个面板,这就是wine的一些基本的配置。
打开Audio的标签,这个面板会失去反映一段时间,之后出现一个声音驱动程序的选择框,一般情况下选择OSS。如果你是独立的声卡,选择ALSA更好。如果只有OSS,就选择OSS。
在Application Settings里下面的windows版本把默认的改成win xp,以前很多帖子都说win 98支持的软件的软件更多,但现在似乎是xp下运行软件更顺畅。反正如果出现软件不能运行的问题,可以把98和xp互换试一下。

2、设置wine使用光驱
打开终端,输入
代码:
ln -s /dev/scd0 ~/.wine/dosdevices/d\:\:

有些系统的可能没有scd0而是hdc,想知道是什么可以自己到/dev文件加里去看一下。

3、设置wine的“假”IE
如果你不打算装ies4linux的话,用gecko来替代IE,在安装软件前先安装,可以避免很多问题。打开终端输入
代码:
wine iexplore http://www.google.cn

出现对话框后,点击install,程序会自动下载安装gecko,大概需要10分钟,安装成功会出现google的中文主页。

4、中文设置
这个方法的中文设置,可以解决CS1.6的中文显示,可以完全显示。
http://forum.ubuntu.org.cn/viewtopic.php?t=72933
参考上面网页里的中文设置。

5、部分DLL设置
到真实windows下的system32文件夹(C:\WINDOWS\systenm32)里复制mfc42.dll,msvcp60.dll, riched20.dll,riched32.dll这几个文件到/home/user/.wine/drive_c/windows/system32 文件里,需要覆盖时确定。其他dll文件不要随便覆盖,要做备份。