中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » 其它操作系统综合讨论区 » [讨论] DOS, Windows 等几大操作系统的 MBR 和 PBR 的重写方法
作者:
标题: [讨论] DOS, Windows 等几大操作系统的 MBR 和 PBR 的重写方法 上一主题 | 下一主题
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『楼 主』:  [讨论] DOS, Windows 等几大操作系统的 MBR 和 PBR 的重写方法

有时候我们安装了许多操作系统和多系统引导管理软件之后,或者 MBR 或/和 PBR 遭损坏时候往往需要用某种操作系统标准的 MBR 或/和 PBR 对主引导扇区和分区引导扇区进行重写。目前我已知的方法和针对的操作系统如下,欢迎大家补充和指出错误之处:

  Quote:
重写 MBR

DOS: fdisk/mbr

Windows9X: 1.fdisk/mbr (MS-DOS 7.10)
                  2.全新安装或重装的时候安装程序会自动重写MBR,除非带 /IR 参数

Windows Me: 不清楚。没怎么用过,忽略。欢迎知道的补充

Windows NT: 不清楚。没怎么用过,忽略。欢迎知道的补充

Windows 2000: 不清楚。全新安装或重装的时候不会改动 MBR

Windows XP: 全新安装或重装的时候



重写 PBR

DOS: sys

Windows9X(MS-DOS 7.10): sys

Windows Me: 不清楚。没怎么用过,忽略。欢迎知道的补充

Windows NT: 不清楚。没怎么用过,忽略。欢迎知道的补充

Windows 2000: 全新安装或重装的时候

Windows XP: 全新安装或重装的时候

从中可以看出实际只有 DOS 才提供了重写 MBR 的工具。对 PBR ,实际各大操作系统都没有提供相应的工具,DOS 的 sys 命令只是一个取巧,只是利用了它在传输操作系统时要写标准 PBR 的这一个功能。当然,所有操作系统在格式化分区的时候都会写入标准的 PBR ,由于这样数据也丢失了,所以这种方法没有意义,不在我们的讨论范围。

另外,对于第三方软件我所知的只有 BOOTPART 这一软件,据说可以生成 DOS、Windows9X、WindowsNT 系列的分区引导扇区的记录,至于是否标准,由于我没怎么使用过所以不得而知。



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2007-11-25 14:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
9634888
初级用户





积分 38
发帖 19
注册 2006-10-28
状态 离线
『第 2 楼』:  

不错,学习一下。

2007-11-25 16:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fujianabc
金牌会员





积分 3467
发帖 1616
注册 2004-6-21
状态 离线
『第 3 楼』:  

winme和win9x一样的;
2000和xp一样的。
故障恢复控制台下的命令,fixmbr和fixboot可以用来重写mbr和pbr。
另外,vista自带了命令行工具bootsect.exe可以重写pbr。

2007-11-25 18:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 4 楼』:  

嗯!“福建ABC"说的有道理,但问题是如果要用 fixmbr 和 fixboot 命令得象重装一样耐心的等待很长的一段时间,复制完许多临时文件才能进入 Win2000,XP 的“故障恢复控制台”。命令的执行倒用不了几秒钟的时间,可前期的准备工作实在是“劳师动众”,而且过后还会产生许多不必要的临时文件,这个方法有点得不偿失,实在是不得已的情况下才这么做。所以我才写了“全新安装或重装的时候”。让我们再想想有没有更好的方法。



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2007-11-25 22:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fujianabc
金牌会员





积分 3467
发帖 1616
注册 2004-6-21
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by DOSforever at 2007-11-25 10:08 PM:
嗯!“福建ABC"说的有道理,但问题是如果要用 fixmbr 和 fixboot 命令得象重装一样耐心的等待很长的一段时间,复制完许多临时文件才能进入 Win2000, ...

网上搜一下我写的“ramdisk启动故障恢复控制台"的方法,很方便的,启动也很快的。
制做完后就5个文件,放在光盘上或者u盘上都行(大概6-7MB)。

2007-11-26 11:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
loveheartrain
初级用户

DOS之迷


积分 174
发帖 81
注册 2007-11-7
状态 离线
『第 6 楼』:  

XP下用dsptw.exe
@echo off
color 0A

:mmbr
title MMBR   重建MBR!
set hd=
cls
echo  请选择要重建的硬盘编号。
echo     0 1 2 3 4 5
echo  输入数字后回车执行!
set /p hd="">nul
if not %hd%'==0' if not %hd%'==1' if not %hd%'==2' if not %hd%'==3' if not %hd%'==4' if not %hd%'==5' goto mmbr
if %hd%'==' goto mmbr

:mmbr1
set h=
ECHO 你选择的硬盘编号是%hd%!以下是该硬盘的分区情况!
dsptw %hd% /l /y
ECHO MMBR   开始重建MBR!
echo  请选择所要的操作。
echo  恢复输入Y  其它键退出
echo  输入后回车执行!
set /p h="">nul
if not %h%'==y' if not %h%'==Y' goto exit
if %h%'==' goto exit
ECHO 重建MBR前备份原来的MBR到文件mbry.bin!
dsptw %hd% 0 1 /s mbry%hd%.bin /y
ECHO 备份完成!
ECHO @
ECHO 正在写入00h ...
dsptw %hd% 0 0 /m /hex:33C08ED0BC007CFB5007501FFC50BE00 /Y
if errorlevel 1 goto err
ECHO 写入00h完成!
ECHO @
ECHO 正在写入10h ...
dsptw %hd% 0 16 /m /hex:7CBF0006B90002F3A4BF1E0657CB33DB /Y
ECHO 写入10h完成!
ECHO @
ECHO 正在写入20h ...
dsptw %hd% 0 32 /m /hex:33D2BEBE07B104F6048074038BD64383 /Y
ECHO 写入20h完成!
ECHO @
ECHO 正在写入30h ...
dsptw %hd% 0 48 /m /hex:C610E2F383FB017409BEC400B91700EB /Y
ECHO 写入30h完成!
ECHO @
ECHO 正在写入40h ...
dsptw %hd% 0 64 /m /hex:719052B441B280BBAA55CD135A81FB55 /Y
ECHO 写入40h完成!
ECHO @
ECHO 正在写入50h ...
dsptw %hd% 0 80 /m /hex:AA7533F6C101742EB80042BEAD07B110 /Y
ECHO 写入50h完成!
ECHO @
ECHO 正在写入60h ...
dsptw %hd% 0 96 /m /hex:C6040046E2FABEAD078BFAC60410C644 /Y
ECHO 写入60h完成!
ECHO @
ECHO 写入70h ...
dsptw %hd% 0 112 /m /hex:0201C74404007C8B5D08895C088B5D0A /Y
ECHO 写入70h完成!
ECHO @
ECHO 正在写入80h ...
dsptw %hd% 0 128 /m /hex:895C0AEB0F90B80102BB007C8BF28B4C /Y
ECHO 写入80h完成!
ECHO @
ECHO 正在写入90h ...
dsptw %hd% 0 144 /m /hex:028A7401B280CD13BEFE7D813C55AA74 /Y
ECHO 写入90h完成!
ECHO @
ECHO 正在写入a0h ...
dsptw %hd% 0 160 /m /hex:09BEDB00B91800EB099033C050B8007C /Y
ECHO 写入a0h完成!
ECHO @
ECHO 正在写入b0h ...
dsptw %hd% 0 176 /m /hex:50CB81C60006ACBB0700B40ECD10E2F6 /Y
ECHO 写入b0h完成!
ECHO @
ECHO 正在写入c0h ...
dsptw %hd% 0 192 /m /hex:B10FE2FC496E76616C69642070617274 /Y
ECHO 写入c0h完成!
ECHO @
ECHO 正在写入d0h ...
dsptw %hd% 0 208 /m /hex:6974696F6E207461626C654D69737369 /Y
ECHO 写入d0h完成!
ECHO @
ECHO 正在写入e0h ...
dsptw %hd% 0 224 /m /hex:6E67206F7065726174696E6720737973 /Y
ECHO 写入e0h完成!
ECHO @
ECHO 正在写入f0h ...
dsptw %hd% 0 240 /m /hex:74656D004D617374657220426F6F7420 /Y
ECHO 写入f0h完成!
ECHO @
ECHO 正在写入100h ...
dsptw %hd% 0 256 /m /hex:5265636F72642057726F746520202120 /Y
ECHO 写入f0h完成!
ECHO @
ECHO 正在写入110h
dsptw %hd% 0 272 /m /hex:627920617879204C6F76652048656172 /Y
ECHO 写入110h完成!
ECHO @
ECHO 正在写入120h ...
dsptw %hd% 0 288 /m /hex:74205261696E20766572323030373132 /Y
ECHO 写入120h完成!
ECHO @
ECHO 写入130h ...
dsptw %hd% 0 304 /m /hex:32372051513A37313231363731360000 /Y
ECHO 写入130h完成!
ECHO @
ECHO 正在写入140h ...
dsptw %hd% 0 320 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入140h完成!
ECHO @
ECHO 正在写入150h ...
dsptw %hd% 0 336 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入150h完成!
ECHO @
ECHO 写入160h ...
dsptw %hd% 0 352 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入160h完成!
ECHO @
ECHO 正在写入170h ...
dsptw %hd% 0 368 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入170h完成!
ECHO @
ECHO 正在写入180h ...
dsptw %hd% 0 384 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入180h完成!
ECHO @
ECHO 正在写入190h ...
dsptw %hd% 0 400 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入190h完成!
ECHO @
ECHO 正在写入1a0h ...
dsptw %hd% 0 416 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入1a0h完成!
ECHO @
ECHO 正在写入1b0h ...
dsptw %hd% 0 432 /m /hex:00000000000000000000000000008001 /Y
ECHO 写入1b0h完成!
ECHO @
pause
ECHO 正在清除2到46扇区的数据 ...
dsptw %hd% 1 45 /e /y
ECHO 清除2到46扇区的数据完成!
ECHO @
ECHO 正在将MBR备份到第2扇区 ...
dsptw %hd% 0 1 /D %hd% 1 /y
ECHO 备份到第2扇区完成!
ECHO @
ECHO 正在将MBR备份到第42扇区 ...
dsptw %hd% 0 1 /D %hd% 41 /y
ECHO 备份到第42扇区完成!
ECHO @
echo 重建MBR完成!
echo 以下是重建后的MBR内容
pause
ECHO 正在将重建后的MBR写到文件mbrx%hd%.bin
dsptw %hd% 0 1 /s mbrx%hd%.bin /y
ECHO 写入完成!
dsptw %hd% 0 1 /l /p /a
goto exit

:err
echo 重建MBR失败!

:exit
pause


XP下受系统保护不能直接写入0硬盘PBR,可以在PE下写入,一下代码适用于FAT32格式启动的NTLDR
@echo off
color 0A

:mmbr
title MNTMBR   重建NTMBR!
set hd=
cls
echo  请选择要重建的硬盘编号。
echo     0 1 2 3 4 5
echo  输入数字后回车执行!
set /p hd="">nul
if not %hd%'==0' if not %hd%'==1' if not %hd%'==2' if not %hd%'==3' if not %hd%'==4' if not %hd%'==5' goto mmbr
if %hd%'==' goto mmbr

:mmbr1
set h=
ECHO 你选择的分区编号是%hd%:1!以下是该硬盘的分区情况!
dsptw %hd% /l /y
ECHO MNTMBR   开始重建NTMBR!
echo  请选择所要的操作。
echo  恢复输入Y  其它键退出
echo  输入后回车执行!
set /p h="">nul
if not %h%'==y' if not %h%'==Y' goto exit
if %h%'==' goto exit
ECHO 重建MBR前备份原来的MBR到文件mbry.bin!
dsptw %hd%:1 0 1 /s ntmbry%hd%.bin /y
ECHO 备份完成!
ECHO @
ECHO 正在写入00h ...
dsptw %hd%:1 0 3 /m /hex:4158594E544C4452 /Y
if errorlevel 1 goto err
ECHO 写入00h完成!
ECHO @
ECHO 正在写入40h ...
dsptw %hd%:1 0 71 /m /hex:90DBD0C4D3EA2020 /Y
ECHO 写入40h完成!
ECHO @
ECHO 正在写入60h ...
dsptw %hd%:1 0 96 /m /hex:7B8EC18ED9BD007C884E028A5640B408 /Y
ECHO 写入60h完成!
ECHO @
ECHO 写入70h ...
dsptw %hd%:1 0 112 /m /hex:CD137305B9FFFF8AF1660FB6C640660F /Y
ECHO 写入70h完成!
ECHO @
ECHO 正在写入80h ...
dsptw %hd%:1 0 128 /m /hex:B6D180E23FF7E286CDC0ED0641660FB7 /Y
ECHO 写入80h完成!
ECHO @
ECHO 正在写入90h ...
dsptw %hd%:1 0 144 /m /hex:C966F7E1668946F8837E16007538837E /Y
ECHO 写入90h完成!
ECHO @
ECHO 正在写入a0h ...
dsptw %hd%:1 0 160 /m /hex:2A007732668B461C6683C00CBB0080B9 /Y
ECHO 写入a0h完成!
ECHO @
ECHO 正在写入b0h ...
dsptw %hd%:1 0 176 /m /hex:0100E82B00E94803A0FA7DB47D8BF0AC /Y
ECHO 写入b0h完成!
ECHO @
ECHO 正在写入c0h ...
dsptw %hd%:1 0 192 /m /hex:84C074173CFF7409B40EBB0700CD10EB /Y
ECHO 写入c0h完成!
ECHO @
ECHO 正在写入d0h ...
dsptw %hd%:1 0 208 /m /hex:EEA0FB7DEBE5A0F97DEBE098CD16CD19 /Y
ECHO 写入d0h完成!
ECHO @
ECHO 正在写入e0h ...
dsptw %hd%:1 0 224 /m /hex:6660663B46F80F824A00666A00665006 /Y
ECHO 写入e0h完成!
ECHO @
ECHO 正在写入f0h ...
dsptw %hd%:1 0 240 /m /hex:53666810000100807E02000F852000B4 /Y
ECHO 写入f0h完成!
ECHO @
ECHO 正在写入100h ...
dsptw %hd%:1 0 256 /m /hex:41BBAA558A5640CD130F821C0081FB55 /Y
ECHO 写入100h完成!
ECHO @
ECHO 正在写入110h
dsptw %hd%:1 0 272 /m /hex:AA0F851400F6C1010F840D00FE4602B4 /Y
ECHO 写入110h完成!
ECHO @
ECHO 正在写入120h ...
dsptw %hd%:1 0 288 /m /hex:428A56408BF4CD13B0F9665866586658 /Y
ECHO 写入120h完成!
ECHO @
ECHO 写入130h ...
dsptw %hd%:1 0 304 /m /hex:6658EB2A6633D2660FB74E1866F7F1FE /Y
ECHO 写入130h完成!
ECHO @
ECHO 正在写入140h ...
dsptw %hd%:1 0 320 /m /hex:C28ACA668BD066C1EA10F7761A86D68A /Y
ECHO 写入140h完成!
ECHO @
ECHO 正在写入150h ...
dsptw %hd%:1 0 336 /m /hex:56408AE8C0E4060ACCB80102CD136661 /Y
ECHO 写入150h完成!
ECHO @
ECHO 写入160h ...
dsptw %hd%:1 0 352 /m /hex:0F8254FF81C300026640490F8571FFC3 /Y
ECHO 写入160h完成!
ECHO @
ECHO 正在写入170h ...
dsptw %hd%:1 0 368 /m /hex:4E544C44522020202020200D0A4E544C /Y
ECHO 写入170h完成!
ECHO @
ECHO 正在写入180h ...
dsptw %hd%:1 0 384 /m /hex:4452206973206D697373696E67FF0D0A /Y
ECHO 写入180h完成!
ECHO @
ECHO 正在写入190h ...
dsptw %hd%:1 0 400 /m /hex:4469736B206572726F72FF0D0A507265 /Y
ECHO 写入190h完成!
ECHO @
ECHO 正在写入1a0h ...
dsptw %hd%:1 0 416 /m /hex:737320616E79206B657920746F207265 /Y
ECHO 写入1a0h完成!
ECHO @
ECHO 正在写入1b0h ...
dsptw %hd%:1 0 432 /m /hex:73746172740D0A000000000000000000 /Y
ECHO 写入1b0h完成!
ECHO @
ECHO 正在写入1c0h ...
dsptw %hd%:1 0 448 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入1c0h完成!
ECHO @
ECHO 正在写入1d0h ...
dsptw %hd%:1 0 464 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入1d0h完成!
ECHO @
ECHO 正在写入1e0h ...
dsptw %hd%:1 0 480 /m /hex:00000000000000000000000000000000 /Y
ECHO 写入1e0h完成!
ECHO @
ECHO 正在写入1f0h ...
dsptw %hd%:1 0 496 /m /hex:000000000000000000 /Y
ECHO 写入1f0h完成!
ECHO @
echo 重建NTMBR完成!
echo 以下是重建后的NTMBR内容
pause
ECHO 正在将重建后的NTMBR写到文件ntmbrx%hd%.bin
dsptw %hd%:1 0 1 /s ntmbrx%hd%.bin /y
ECHO 写入完成!
dsptw %hd%:1 0 1 /l /p /a
goto exit

:err
echo 重建NTMBR失败!

:exit
pause

[ Last edited by loveheartrain on 2007-11-30 at 08:52 PM ]



愛意之无尽@灵犀!
QQ:71216716 E_mail:l.h.r.@163.com
2007-11-30 20:47
查看资料  发送邮件  发短消息 网志  OICQ (71216716)  编辑帖子  回复  引用回复
l123456789
新手上路





积分 5
发帖 3
注册 2006-3-7
状态 离线
『第 7 楼』:  

不错,学习一下。

2007-12-7 10:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fj666
新手上路





积分 10
发帖 5
注册 2008-1-25
状态 离线
『第 8 楼』:  

支持你啊楼主顶你.呵.

2008-1-25 20:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sh19871122
新手上路





积分 18
发帖 8
注册 2008-4-4
状态 离线
『第 9 楼』:  顶啊

支持楼主

2008-4-4 17:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
oasisspirit
新手上路





积分 15
发帖 6
注册 2008-4-11
状态 离线
『第 10 楼』:  

有很多软件可以 重写 MBR, 如,
disk genius,易我分区表医生, WinPM 等

重写 DBR的 倒是没见到

2008-4-11 15:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: