-
Notifications
You must be signed in to change notification settings - Fork 136
/
README_GRUB4DOS_CN.txt
3924 lines (2869 loc) · 164 KB
/
README_GRUB4DOS_CN.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
本文档来源:http://bbs.znpc.net/viewthread.php?tid=5587
感谢zw2312914提供
原版是中英文对照的版本,这里已经经过删改。
需要看原版的可以从上面的贴子下载.
一些旧的网址已经删除,只保留目前在用的.
注:本文仅供参考,可能有一些更新没有在这里说明.如果有发现错误可以到论坛发贴或email联系我([email protected])
其它命令用法请参考
http://chenall.net 或 http://grub4dos.chenall.net 处的 GRUB4DOS 有关文档。
外部命令的用法请参考
http://chenall.net/post/tag/grub4dos/
项目主页
https://github.com/chenall/grub4dos
下载网址:
http://grub4dos.chenall.net
工具和外部命令:
http://code.google.com/p/grubutils/downloads/list
获取最新源代码的方法:
git clone git://github.com/chenall/grub4dos.git
或
svn co https://github.com/chenall/grub4dos grub4dos-src
通过你的 web 浏览器在线查看源代码:
https://github.com/chenall/grub4dos
论坛(官方技术支持站点):
中文:
http://bbs.wuyou.com/forumdisplay.php?fid=60
http://bbs.znpc.net/forumdisplay.php?fid=4
英文:
http://reboot.pro/forum/66/
******************************************************************************
*** GCC 黑名单 ***
******************************************************************************
已知 gcc-4.6.x 所产生的程序在某些机器上无法正常运作。
来源: http://bbs.wuyou.net/viewthread.php?tid=274070
已知 gcc-4.7.x 所产生的程序无法运行 memtest86。
来源: http://bbs.wuyou.net/redirect.php?tid=180142&pid=2669810&goto=findpost#pid2669810
---------------------近期更新记录-----------------------------------------------
最新更新记录请查看,ChangeLog_chenall.txt
2011-01-03
添加了GRUB4DOS的变量用法及相关介绍。
2011-01-02
1.为了方便pause命令添加--test-key参数,显示按键扫描码.
2010-12-31 更新:
1.pause命令增强,增加了显示按键扫描码的功能。需要debug 为-1.
例子:显示一个按键扫描码
debug -1 && pause && debug 1
注:此功能已为被参数--test-key代替。
2.hiddenmenu命令增强。增加一个--chkpass参数
功能: 在隐藏菜单的时候按Esc键要输入正确的密码才可以显示菜单。
注意: 1.该功能启用之后,如果按了其它按键则直接启动默认菜单。
默认的Esc按键可以自由设置。使用--chkpass=KEY
2.菜单初始化有password命令时才需要输入密码。
3.按键代码如果不清楚可以使用上面的功能来获取。
例子: hiddenmenu --chkpass=0x8500 按F11键才可以显示菜单。
hiddenmenu --chkpass 按Esc键才可以显示菜单。
hiddenmenu --chkpass=0x2200 按Alt+G显示菜单。
------------------------------------------------------------------------------
GRUB.EXE 用法:
GRUB [--bypass] [--time-out=T] [--hot-key=K] [--config-file=FILE]
旁路 暂停时间 热键 配置文件
这里的 FILE ,例如,可以是 (hd0,0)/menu.lst
在 CONFIG.SYS 中,其配置行类似于:
install=c:\some\where\grub.exe --config-file=FILE
如果没有使用选项,GRUB.EXE简单的使用(hd0,0)/menu.lst
来作为配置文件,只要它存在的话。(注意!我们最终将默认的配
置文件从 (hd0,0)/boot/grub/menu.lst 变更为 (hd0,0)/menu.lst)
(更新于2006-12-23。参见更新3)
这里的分区(hd0,0)可以是一个Windows分区或者是一个linux分区,
或者是被 GRUB 支持的其他任意分区。
这里的FILE只接受GRUB风格的文件名。DOS风格的文件名不被调用
(很明显,我们应该使用GRUB风格的文件名,原因是比如在Linux
ext2分区中不能使用DOS风格的文件名来访问文件 )。
(参见更新2)
更新:FILE 可以是菜单的内容。使用分号来分隔嵌入 FILE 中的命
令。FILE 可以被一对双引号括起来,示例:
GRUB --config-file="root (hd0,0);chainloader +1"
这条命令将启动(hd0,0)上的系统。
另一个例子:
GRUB --config-file="reboot"
这条命令将令机器重启。
再例如:
GRUB --config-file="halt"
这条命令将令机器关闭。
如果选项--bypass 被指定,GRUB将在暂停时间截止后从DOS退出。
选项'--time-out=T' 指定了以秒计时的暂停值。如果指定了--bypass
则T的默认值为5 ,而--bypass选项没有被指定时默认值为0 。
默认的热键值是 0x3920 (即空格键)。如果此键被按下,GRUB将正常
启动。如果其他键被按下,GRUB 将立即终止并返回到DOS。参见下面
的“int16 键盘扫描码”
每个选项最多只能被指定一次。
更新 2:DOS风格的文件名已经被支持(由John Cobb先生提供此补丁)。
如果 FILE 的起始两个字符是“ #@ ”,那么 FILE 中其余的部分将被视
为一个DOS风格的文件名。例如:
GRUB --config-file="#@c:\menu.lst"
DOS风格的文件只有起始的4kB被使用。此文件应当是一个未被压缩的文
本文件。
注意:你也可以在SHELL或者在CONFIG.SYS的INSTALL配置行使用‘DOS
风格文件直接访问’。但不要在DEVICE 配置行使用它。DOS文档中表述
了DOS设备驱动不能使用'打开文件'的DOS调用。
更新 3(2006-12-23): 作为默认,GRUB.EXE将按以下顺序查找它的配置文件:
(DOS风格文件) .\menu.lst, 当前目录下的MENU.LST。
(DOS风格文件) \menu.lst, 当前驱动器根目录下的MENU.LST
(GRUB风格文件) /menu.lst, 启动设备根目录下的MENU.LST
默认的启动设备还是(hd0,0)。
--------------------------------------------------------
更新 1 : 版本0.2.0 同时带来一个新的东西。GRUB for NTLDR ,它能够从
Windows NT/2000/XP的启动菜单启动到GRUB。复制GRLDR到Windows
NT/2000/XP的C盘根目录,并在C:\BOOT.INI中加入这样一行:
C:\GRLDR="Start GRUB"
这样就完成了安装。GRLDR应该与 BOOT.INI及NTLDR 位于相同的目录。
注意 BOOT.INI 通常是隐藏的因而你要看见它必须取消隐藏。如果GRLDR
在一个NTFS分区,应该将它复制到一个非NTFS分区的根目录(并且menu.lst
文件应当同样这样做)。假如GRLDR被压缩了,比如在NTFS分区中对它启
用了压缩的情况下,它将不能运行。
即使这个磁盘的驱动器号已经被Windows设备管理器改变为另外的不同
于 C 的盘号 ,你仍然需要在 BOOT.INI 中使用盘符 C ,否则,NTLDR
将查找不到 GRLDR 文件。
也就表示,如果你从一个软盘上启动NTLDR,你也需要把A:\BOOT.INI
中的 GRLDR 的所在行这样写:
C:\GRLDR="Start GRUB"
而不能象下面这样使用盘符 A :
A:\GRLDR="Start GRUB"
(注意在 BOOT.INI 位于软盘 A 的这个例子中,标记“C:\GRLDR”
实际将访问 A:\GRLDR )
更新 2: GRUB for linux 也一起被引入到版本0.2.0。
你可以使用使用linux的引导程序 KEXEC,LILO,SYSLINUX 或者别的
GRUB来启动它。(GRUB4LIN 已经合并到 GRUB.EXE 中)
从Linux中直接启动到GRUB ,使用这样一组命令:
kexec -l grub.exe
kexec -e
经由GRUB启动到GRUB,使用如下的命令:
kernel (hd0,0)/grub.exe
boot
经由LILO启动到GRUB,在lilo.conf中加入这样几行:
image=/boot/grub.exe
label=grub.exe
经由syslinux启动到GRUB,在syslinux.cfg中加入这样几行:
label grub.exe
kernel grub.exe
LOADLIN在引导GRUB.EXE时可能会遇到问题,原因是grub.exe需要一些
未更改的原始的BIOS中断向量,但是DOS破坏了这些中断向量,而loadlin
在将控制权交给grub.exe前并没有恢复它们。
更新 3: 从版本0.4.0开始,DOS下的GRUB支持内存驱动器。示例:
# boot into a floppy image
map --mem (hd0,0)/floppy.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
map --floppies=1
boot
由于镜像将被拷贝到一个内存区域,所以镜像本身可以是非连续的,
甚至可以是被gzip压缩过的。
另一个例子:
map --mem=-2880 (hd0,0)/floppy.img (fd0)
这个内存驱动器(fd0)将占用至少1440 KB的内存。
这也对那些小于1440 KB的1.44M 软盘镜像有用。
再例如:
map --mem --read-only (hd0,0)/hd.img (hd1)
这个内存驱动器成为了一个硬盘驱动器,并且只读。
这表示你不能向这个(hd1)中写入数据。
你可以同时使用多个内存驱动器和多个原来的基于磁盘虚拟的仿真驱动器。
如果BIOS不支持中断int15/EAX=e820h,你将不能使用任何内存驱动器。
更新 4: 对于内存驱动器仿真,一个单一的分区镜像可以被转换为整个硬盘镜像来
map --mem (hd0,7)/win98.img (hd0)
map --hook
chainloader (hd0)+1
rootnoverify (hd0)
map --harddrives=1
boot
这里的win98.img是一个头部不含主引导记录和分区表的分区镜像。
GRUB for DOS 确实会为这个内存驱动器(hd0)建立一个MBR和分区表。
更新 5: 现在GRLDR可以作为一个非模拟模式的可启动光盘的启动映像文件来使
用。Linux用户使用示例:
mkdir iso_root
cp grldr iso_root
mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root
另一种选择是,grldr也可以用同样的方法作为stage2_eltorito来使用。
-boot-info-table选项是被允许使用的,但你可以省略它:
mkdir iso_root
cp grldr iso_root
mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root
也要注意上面的可启动iso镜像是使用-boot-load-seg 0xHHHH选项来建立的话,
就必须令HHHH大于或者等于1000(十六进制)
如果HHHH小于1000(十六进制),虚拟机 QEMU 会死机。这是QEMU的一个缺陷。一
个grldr.iso镜像可以使用也可以不使用-boot-load-seg 0xHHHH选项来创建。
menu.lst文件应该被放置在光盘的根目录。
更新 6: 中文专用版被建立在"chinese"子目录中。
( 由Gandalf先生提供此补丁,2005-06-27)
中文专用版同时内附了scdrom 功能。
(更新:scdrom 从2006-07-20起已被删除)
更新 7: 增加了内存驱动器(md) 。就像(nd)代表网络驱动器 (cd) 代表光驱一样,
新的驱动器(md)实现了将整个内存作为一个磁盘驱动器来访问。
(md)只工作在支持BIOS中断int15/EAX=E820h的系统上。
现在,cat命令已经有了一个十六进制转储的新选项:--hex
以及通过--locate=STRING 在文件中找查找字符串。
典型示例:
cat --hex (hd0)+1
这将用十六进制的表格显示 MBR 扇区。
cat --hex (md)+2
这将显示你内存起始处的1 KB内容(实际,这就是实模式的IDT表),也是
使用十六进制的转储表。
cat --hex (md)0x800+1
这将显示你的扩展内存的第一个扇区。
cat --hex (hd0,0)+1
这将显示(hd0,0)分区的第一扇区。通常这个扇区包含操作系统的引导记录。
更新 8: 增加了随机存贮驱动器 (rd) 。(md) 设备访问内存是从物理地址 0
开始,而 (rd) 可以访问起始于任何基地址的内存。随机存贮器的基
址与长度可以通过 map 命令指定。详情请使用 "help map" 命令。
你甚至能够为(rd)驱动器指定一个BIOS驱动器号。比如:
map --ram-drive=0xf0。默认的 (rd) 驱动器号是使用0x7F的软驱号。
如果 (rd) 是硬盘驱动器镜像,你应该用大于或等于0x80的值来改变
它的驱动器号。(但应防止使用0xffff,因为0xffff是预留给(md)设
备的。)
(rd)+1这个标志始终代表文件,它包含存储在(rd)中的所有字节。
更新 9: 直接启动 WinNT/2K/XP 的 NTLDR 和 Win9x/ME 的 IO.SYS, 以及
FreeDOS 的 KERNEL.SYS. 例如:
chainloader --edx=0xPPYY (hd0,0)/ntldr
boot
chainloader --edx=0xYY (hd0,0)/io.sys
boot
chainloader --ebx=0xYY (hd0,0)/kernel.sys
boot
十六进制的YY 指定了启动驱动器号,十六进制的PP指定了 NTLDR 的
启动分区号。如果启动驱动器是软驱,PP应该是一个十六进制的值ff,
即十进制的255.
对于 Freedos 的 KERNEL.SYS , 选项--edx不能执行,请使用--ebx 。
当文件位于它们平常的位置时,选项 --edx (--ebx)可以省略。但某些
情况下,这些选项是必需的。
例如,假设被调用的ntldr文件在ext2分区(hd2,8)中,而你又希望它认
为(hd0,7)的 windows 分区是启动分区,那么--edx就是必需的:
chainloader --edx=0x0780 (hd2,8)/ntldr
对于DOS核心(即,IO.SYS和KERNEL.SYS),启动分区号是没有意义的,
因此你只需指定恰当的启动驱动器号YY(不过指定了启动分区号也是
无害的)。
上面的PPYY也可以在chainloader命令之后通过root和rootnoverify命
令来指定。例如:
chainloader (hd2,6)/kernel.sys
rootnoverify (hd0) <-------- YY=80
boot
chainloader (hd0,0)/ntldr
rootnoverify (hd0,5) <-------- YY=80, PP=05
boot
提示:CMLDR (the ComMan LoaDeR,它被用于加载Windows的故障
恢复控制台)可以像NTLDR一样被良好的加载。
Bean 成功地解压和启动了WinME的IO.SYS,感谢这个出色的工作。
更新 10: isolinux.bin (版本 3.73) 可以被自2009-02-09 起建立的版本加载。
chainloader (cd)/isolinux.bin
isolinux.bin必须是存在于在真实或虚拟的光驱之中的。
更新 11: Grub 传统版的 stage2 文件可以通过下面的方法加载:
chainloader --force --load-segment=0 --load-offset=0x8000 --boot-cs=0 --boot-ip=0x8200 (...)/.../stage2
更新 12: 增加了 exFAT 分区启动。
更新 13: 支持 udf 格式光盘。支持 iso9600 Joliet 扩展格式光盘。并可以启动它。
可以把 grldr_cd.bin 作为 cdrom 的引导代码。
--------------------------------------------------------
这里用一些示例来演示磁盘仿真命令的用法:
1. 仿真硬盘分区C:为软驱A:并从C:中启动win98:
map --read-only (hd0,0)+1 (fd0)
chainloader (hd0,0)+1
rootnoverify (hd0)
boot
在上面的示例中,(hd0,0)是一个装有win98的C:盘 。当win98启动完成后,你会发
现A:中包含了C:的所有文件,而且如果你删除A:中的文件,C:上的相应文件也会消
失。
在map命令行中,(hdm,n)+1式的写法被解释成代表整个(hdm,n)分区,而不仅仅是
此分区的第一扇区。
2. 将硬盘分区C:仿真为软驱A:并从A:中启动win98:
map --read-only (hd0,0)+1 (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
map --floppies=1
boot
在“map --hook”命令之后,仿真立即生效,即使是在GRUB的命令行模式中。
注意“chainloader (fd0)+1” 中的(fd0)是仿真后的虚拟软驱 A:,而不是真
实的软盘(因为映射现在已经被挂载了)。
3. 仿真镜像文件为软驱A:并从C:盘中启动win98:
map --read-only (hd0,0)/floppy.img (fd0)
chainloader (hd0,0)+1
rootnoverify (hd0)
map --floppies=1
map --harddrives=1
boot
4. 仿真硬盘分区为第一硬盘并从中启动DOS:
map --read-only (hd2,6)+1 (hd0)
map --hook
chainloader (hd0,0)+1
rootnoverify (hd0)
map --harddrives=1
boot
在这个示例中,(hd2,6)+1代表BIOS序号为3的(hd2)硬盘中的,扩展的DOS逻辑分区。
如果一个DOS分区被仿真为一个硬盘,GRUB for DOS将首先定位分区表,通常,
是在DOS分区的开头63个扇区中。如果那里没有分区表,GRUB for DOS将拒绝仿真。
5. 仿真一个镜像文件为第一硬盘然后从中启动DOS:
map --read-only (hd0,0)/harddisk.img (hd0)
chainloader --load-length=512 (hd0,0)/harddisk.img
rootnoverify (hd0)
map --harddrives=1
boot
如果一个镜像文件被仿真为硬盘,此镜像文件必须包含MBR。也就是说,
HARDDISK.IMG的第一扇区必须包含被仿真的虚拟硬盘的分区表。
注意: BIOS数据区中的软盘和硬盘的总数在映射期间没有被改变。当主板上没有配置真
实的软驱时,你通常应该专门使用诸如‘map --floppioes=’以及
map --harddrives=’来设置它们。如果不这样做,DOS可能会启动失败。
‘map --status’可以报告出一些有价值的东西。同时要注意‘map --floppies=’
和‘map --harddrives=’需要在没有执行映射前单独使用。
版本0.4.2引入了一个新参数,memdisk_raw,用以模拟和内存驱动器类似的原生模式。
如果BIOS不支持中断int15/87h,或者int18/87h的支持有缺陷,你应该在任何内
存盘被使用前设置这个变量。这里是一个示例:
map --memdisk-raw=1
map --mem (hd0,0)/floppy.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
boot
如果你碰到内存驱动器故障而又没有使用map --memdisk-raw=1时,你应当用
‘map --memdisk-raw=1’来尝试一次。
你一执行‘map --memdisk-raw=0’之后,就应该执行一次‘map --unhook’
(如果需要的话在这之后再执行‘map --hook’)。
更新:memdisk_raw 现在默认值为1 。如果你希望使用中断int15/87h来访问内存
驱动器,你应当令‘map --memdisk-raw=0 ’。
--------------------------------------------------------
任意大小的软盘或硬盘可以被 GRUB for DOS 0.2.0 版仿真。
镜像文件必须是连续的,否则GRUB for DOS 将拒绝执行。
‘blocklist’命令可以列举一个文件的碎片或者分块。
在GRUB提示符下输入“help map”可以获得简要的命令说明。
这样的形式
map ... (fd?)
是一个软盘仿真,而下面的形式
map ... (hd?)
是一个硬盘仿真。
使用硬盘仿真时,基于安全因素最好不要去启动Windows 。
Windows甚至可能会破坏掉所有的数据和你硬盘上的所有资料!!!!!!!!
关于--mem的更新 :当使用--mem时,甚至是在进入Windows的时候,它看
来都相当安全。Win98可以正常运行内存驱动器。
Windows NT/2000/XP不能识别仿真的驱动器,不管是否使用了--mem选项。
******************************************************************************
*** grldr可启动的软盘或硬盘分区的说明 ***
******************************************************************************
1. Ext2/3/4 引导扇区/引导记录的布局 (用于载入grldr)
------------------------------------------------------------------------------
一个EXT2/3/4的卷可以由GRUB启动。复制grldr和可选的menu.lst文件到这个EXT2/3/4
卷的根目录,并按照grldr.pbr的第3至4扇区建立它的引导扇区。那么,这个EXT2/3/4卷就是GRUB可启动的。
更新: bootlace.com是一个dos/linux下的工具,它可以把GRLDR的引导记录安装到一个
EXT2/3/4卷的第一扇区。
更新: 可以直接复制引导代码到启动分区,引导代码会自动生成头部参数。
偏移 长度 说明
====== ====== ==============================================================
00h 2 近转移指令的机器码
02h 1 0x90
03h 8 文件系统ID。 “EXT2/3/4”
0Bh 2 每扇区字节数。必须为512 。
0Dh 1 每块扇区数。有效值是2, 4, 8, 16 和 32。
0Eh 2 每块字节数。有效值是0x400, 0x800, 0x1000, 0x2000 和 0x4000。
10h 4 在pointers-per-block块中的指针数,即一个二级间接块包含的块数。
有效值是0x10000, 0x40000, 0x100000, 0x400000 和 0x1000000。
14h 4 每块指针数,即一个间接块包含的块数。
有效值是0x100, 0x200, 0x400, 0x800, 0x1000 。
18h 2 每磁道的扇区数。
1Ah 2 磁头数/面数
1Ch 4 隐藏扇区数(它们位于引导扇区之前)
也被成为是分区的起始扇区。
对于软盘,它应当为0 。
20h 4 文件系统中的扇区总数(或者是分区的扇区总数)。
24h 1 启动设备的 BIOS 驱动器号码。
实际此字节在读入时被忽略。引导代码将把DL的值写入到此字节中。
BIOS或者调用程序应当在DL中设置磁盘号码。
我们假定所有的BIOS在DL中能传递正确的磁盘号码。
糟糕的BIOS不被支持!!
25h 1 此分区在启动驱动器上的分区号
0, 1, 2, 3 是主分区 。4, 5, 6, ... 等等是扩展分区中的逻辑分区。
0xff代表整个磁盘。所以对于软盘,其分区号码应当是0xff 。
26h 2 字节计数的索引节点大小。(注意!我们在此处为索引节点大小使用
了以前被保留的一个字,即两个字节)
28h 4 每组的i节点数
通常,1.44M软盘只有一个组,并且总的i节点数是184。所以此值
应为184或者更大。
2Ch 4 组描述符的块号码。
对于1024字节的块有效值是2 ,否则是1 。
这里的值等于(s_first_data_block + 1)。
30h 462 机器码部分。
1FEh 2 引导签名AA55h 。
200h 510 机器码部分。
3FEh 2 引导签名AA55h 。
2. FAT12/FAT16 引导扇区/引导记录的布局 (用于载入grldr)
------------------------------------------------------------------------------
一个FAT12/16的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT12/16 卷
的根目录,并按照grldr.pbr的第二扇区建立它的引导扇区。然后这个FAT12/16的卷就是GRUB可启动的。
更新: bootlace.com 是一个dos/linux下的工具,而它能把GRLDR的引导记录安装到一个
FAT12/16卷的引导扇区。
偏移 长度 说明
====== ====== ==============================================================
00h 2 近转移指令的机器码
02h 1 0x90
03h 8 OEM名称字符串 (对该磁盘进行格式化的操作系统的名称)。
0Bh 2 每扇区字节数。必须为512 。
0Dh 1 每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64和128 。但是簇大小
大于32K的情况不应发生。
0Eh 2 保留的扇区数(第一文件分配表之前的扇区数,包括引导扇区),通常是1。
10h 1 文件分配表数(几乎总是2)。
11h 2 根目录项的最大个数。
13h 2 扇区总数(仅用于小磁盘,如果磁盘太大此处被设置为0,而偏移 20h 处
则替代它使用)。
15h 1 媒体描述符字节,现在该此节已经没有太大意义了(参见后面)。
16h 2 每个文件分配表的扇区数。
18h 2 每个磁道的扇区数
1Ah 2 磁头或面的总数。
1Ch 4 隐藏扇区数(位于引导扇区之前)。
也被称为是分区的开始扇区。
对于软盘,它应当为0 。
20h 4 大磁盘的扇区总数。
24h 1 引导设备的BIOS磁盘号。
实际此字节在读入时被忽略。引导代码将把DL中的值写入此字节。
BIOS或者调用程序应当在DL中设置磁盘号码。
我们假定所有的BIOS在DL中能传递正确的磁盘号码。
糟糕的BIOS不被支持!!
25h 1 启动驱动器上此文件系统的分区号码。
更新:此字段被忽略。
26h 1 签名(必须是28h或者29h以便能被 NT 识别)
27h 4 卷的序列号。
2Bh 11 卷标签。
36h 8 文件系统ID。“FAT12”, “FAT16”。
3Eh 446 机器码部分。
1FCh 4 引导签名AA550000h 。(Win9x 使用4字节作为魔数值。)
3. FAT32 引导扇区/引导记录的布局 (用于载入grldr)
------------------------------------------------------------------------------
一个FAT32的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT32卷的根
目录,并按照grldr.pbr的第一扇区建立它的引导扇区。然后这个FAT32的卷就是GRUB可启动的。
更新: bootlace.com 是一个dos及linux下的工具而它能把 GRLDR 的引导记录安装
到一个FAT32卷的引导扇区。
偏移 长度 说明
====== ====== ==============================================================
00h 2 近转移指令的机器码。
02h 1 0x90
更新 (2006-07-31):尽管GRLDR不再使用 LBA 指示码这个字节,
但Windows 98会使用它。通常这个字节在 CHS 模式中应当设置为0x90
(软盘尤其如此)。如果此字节未被正确设置,Windows 98 将不能识别
软盘或分区。这一问题由neiljoy先生报告。非常感谢!
03h 8 OEM名称字符串 (对该磁盘进行格式化的操作系统的名称)
0Bh 2 每扇区字节数。必须为512 。
0Dh 1 每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64 和 128 。
但是簇大小大于32K的情况不应发生。
0Eh 2 保留的扇区数(第一文件分配表之前的扇区数,包括引导扇区),
通常是1 。
10h 1 文件分配表数(几乎总是2)。
11h 2 (根目录项的最大个数)必须为0 。
13h 2 (仅用于小磁盘的扇区总数)必须为0 。
15h 1 媒体描述符字节,现在该此节已经没有太大意义了(参见后面)。
16h 2 (每个文件分配表的扇区数)必须为0 。
18h 2 每个磁道的扇区数
1Ah 2 磁头或面的总数。
1Ch 4 隐藏扇区数(它们位于引导扇区之前)。
也被称作是分区的起始扇区。
对于软盘,它应当为0 。
20h 4 大磁盘的扇区总数。
24h 4 每个文件分配表的 FAT32 扇区数。
28h 2 如果第7位被清零,所有文件分配表将被更新,否则0-3位给出当前活
动的文件分配表,所有其它位被保留。
2Ah 2 高字节是主修订号码,低字节是小修订号码,现在都是0 。
2Ch 4 根目录起始簇。
30h 2 文件系统信息扇区。
32h 2 如果非零它给出具有引导记录的备份扇区,通常是6。
34h 12 保留,设为0 。
40h 1 启动设备的 BIOS 驱动器号码。
第一硬盘是80h,第一软盘是00h。
实际此字节在读入时被忽略。引导代码将把DL中的值写入此字节。
BIOS或者调用程序应当在DL中设置磁盘号码。
我们假定所有的 BIOS 在DL中能传递正确的磁盘号码。
糟糕的BIOS不被支持!!
41h 1 启动驱动器上此文件系统的分区号码。
此字节在读入时被忽略。引导代码将分区号码写到此字节。
见下述的偏移5Dh 。
更新:此字段被忽略。
42h 1 签名(必须是 28h 或者 29h 以便能被 NT 识别)
43h 4 卷的序列号。
47h 11 卷标签。
52h 8 文件系统标识。“FAT32 ”。
5Ah 418 机器码部分。
1FCh 4 引导签名AA550000h 。(Win9x 使用4字节作为魔数值。)
4.NTFS 引导扇区/引导记录的布局 (用于载入grldr)
------------------------------------------------------------------------------
一个NTFS的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个NTFS卷的根
目录,并按照grldr.pbr的第7至10扇区建立它的引导扇区。然后这个NTFS的卷就是GRUB可启动的。
更新: bootlace.com是一个在dos/linux下的工具,而它能把GRLDR的引导记录安装到
一个NTFS卷的开头4个扇区。
偏移 长度 说明
====== ====== ==============================================================
00h 2 近转移指令的机器码。
02h 1 0x90
03h 8 分区标识“NTFS”
0Bh 2 每扇区字节数。必须为512 。
0Dh 1 每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64 和 128 。
但是簇大小大于32K的情况不应发生。
0Eh 2 (保留的扇区数)未被使用。
10h 1 (文件分配表数)必须为 0 。
11h 2 (根目录项的最大个数)必须为0 。
13h 2 (仅用于小磁盘的扇区总数)必须为0 。
15h 1 媒体描述符字节,现在该此节已经没有太大意义了(参见后面)。
16h 2 (每个文件分配表的扇区数)必须为0 。
18h 2 每个磁道的扇区数。
1Ah 2 磁头/面的总数。
1Ch 4 隐藏扇区数(它们位于引导扇区之前)。
也被称作是分区的起始扇区。
对于软盘,它应当为0 。
20h 4 (大磁盘的扇区总数)必须为 0 。
24h 4 (每个文件分配表的 NTFS 扇区数)- 通常是 80 00 80 00 ,值
为80 00 00 00将被看作是由Windows XP格式化为NTFS的USB拇指碟
28h 8 此卷的扇区号。
30h 8 $MFT的逻辑簇号。
38h 8 $MFTMirr的逻辑簇号。
40h 4 每个MFT记录的簇数。
44h 4 每个索引的簇数。
48h 8 卷序列号
50h 4 校验和,通常为 0 。
54h 424 机器码部分。
1FCh 4 引导签名AA550000h 。(Win9x 使用4字节作为魔数值。)
200h 1536 末尾 3 个扇区为机器码部分。
5. exFAT 引导扇区/引导记录的原始布局(用于载入grldr)
exFAT 引导代码由 Fan JianYe 提供
------------------------------------------------------------------------------
一个exFAT的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个exFAT卷的根
目录,并按照grldr.pbr的第5至6扇区建立它的引导扇区。然后这个exFAT的卷就是GRUB可启动的。
注意:如果直接复制引导代码到启动分区,需要从该分区启动一次,自动填充校验码。
否则 Windows 会认为该分区没有格式化。
偏移 长度 说明
====== ====== ==============================================================
00h 3 0xEB7690 跳转代码。
03h 8 "EXFAT " 签名
++++++++ The new increase ++++++++
0bh 2 每扇区字节数
0dh 1 每簇扇区数
0eh 4 数据的起始绝对扇区
12h 4 当前簇在FAT表的绝对扇区
16h 2 EIOS 支持 位7=1
18h 2 每磁道扇区数
1ah 2 磁头数
1ch 4 隐含扇区数
20h 4 保留
24h 1 磁盘的物理驱动器号
25h 1 分区号
26h 2 保留
28h 4 FAT表开始绝对扇区号
2ch 4 保留
++++++++ The new increase ++++++++
30h 16 全部为“00”。
40h 8 分区起始扇区号。相当于"隐含扇区数"
48h 8 分区扇区数。相当于"磁盘逻辑总扇区"
50h 4 FAT表起始扇区号,通常为128号扇区,该值为相对于卷(分区)0扇区号而言。相当于"保留扇区数"
54h 4 FAT表扇区数。相当于"每文件分配表占扇区数"
58h 4 簇起始位置扇区号,该值用以描述文件系统中的第1个簇(即2号簇)的起始扇区号。
通常2号簇分配给簇位图使用,因此,该值也就是簇位图的起始扇区号。
5ch 4 卷内的总簇数。
60h 4 根目录起始簇号。相当于"磁盘根目录起始簇号"
64h 4 卷ID。相当于"磁盘卷的序列号"
68h 2 文件系统版本。 VV.MM(01.00此版本)
6ah 2 内容 位偏移 尺寸 描述
活动FAT 0 1 0/1=第一/第二。相当于"文件分配表镜像标志"
卷脏 1 1 0/1=清洁/肮脏。
媒体失败 2 1 0/1=没有失败/故障报告
零 3 1 没有意义
保留 4 c
6ch 1 每扇区字节数,表示方法为,以2的N次方表示。
6dh 1 每簇扇区数,以2的N次方表示。
6eh 1 FAT表的数。这个数字是1或2,2在TexFAT中使用。
6fh 1 驱动器号。INT 13 使用。
70h 1 簇(堆)在使用中的百分比
71h 7 保留
78h 390 引导代码.
1feh 2 引导签名AA55。
200h 510 引导代码。
3feh 2 引导签名AA55。
6. MBR中的FAT12/16/32/exFAT/EXT2 引导代码合并,占用2扇区多一点。
------------------------------------------------------------------------------
合并后的 FAT12/16/32/exFAT 当前 BPB 结构:
grldr.pbr 中 exFAT 自建的 BPB 结构:
偏移 长度 说明
====== ====== ==============================================================
00h 2 EB 2E 跳转代码
02h 1 分区类型 / EIOS 标记
Bit 0 FAT12
Bit 1 FAT16
Bit 2 FAT32
Bit 3 exFAT
Bit 4 EXT2
Bit 5 保留
Bit 6 EXT4 64位文件系统
Bit 7 EIOS
03h 4 根扇区
07h 4 主目录(FAT12/16)绝对起始扇区
0bh 2 每扇区字节
0dh 1 每簇扇区
0eh 4 数据的起始绝对扇区
12h 4 当前簇在FAT表的绝对扇区
16h 2 "6412" 签名
18h 2 每磁道扇区
1ah 2 磁头数
1ch 4 分区起始绝对扇区
20h 4 磁盘逻辑总扇区
24h 1 驱动器号
25h 1 分区号
26h 2 保留
28h 4 FATs绝对起始扇区
2ch 4 根目录起始簇号
附录A:FAT32 的文件系统信息扇区(不用于引导grldr)
偏移 长度 说明
====== ====== ==============================================================
0h 4 起始处签名 41615252h 。
4h 480 被保留,设为 0 。
1E4h 4 故障征兆指数结构签名 61417272h
1E8h 4 最后已知的空闲簇数,如果它等于FFFFFFFFh,簇数是未知的。
1ECh 4 假如它等于FFFFFFFFh的话,你应当去寻找一个空闲簇的簇号码 。
此字段没有被设置。
1F0h 12 被保留,设为 0 。
1FCh 4 结尾签名AA550000h 。
------------------------------------------------------------------------------
附录B:媒体描述字节(非用于grldr)
此媒体描述字节没有意义,因为有些字节具有多重意义,例如 F0h 。
字节 磁盘种类 扇区 头 磁道 容量
---- ------------ ------- ----- ------ --------
FFh 5 1/4" 8 2 40 320KB
FEh 5 1/4" 8 1 40 160KB
FDh 5 1/4" 9 2 40 360KB
FCh 5 1/4" 9 1 40 180KB
FBh both 9 2 80 640KB
FAh both 9 1 80 320KB
F9h 5 1/4" 15 2 80 1200KB
F9h 3 1/2" 9 2 80 720KB
F0h 3 1/2" 18 2 80 1440KB
F0h 3 1/2" 36 2 80 2880KB
F8h hard disk NA NA NA NA
******************************************************************************
*** grldr.mbr - 怎样将grldr.mbr写到硬盘的主引导磁道 ***
******************************************************************************
grldr.mbr包含能够用作主引导记录的代码。此代码负责搜索所有分区的grldr,并且在发现
它后装载它。现在被支持的分区种类是:FAT12/16/32,NTFS,EXT2/3/4,EXFAT。在扩展分区
上的逻辑分区也被支持,条件是此扩展分区与微软兼容。实际上,搜索机制没有充分地测试
分区类型(0x85 )的Linux 的扩展分区。
怎样将 GRLDR.MBR 写到硬盘的主引导磁道?
首先,读入 Windows 磁盘签名及分区信息字节(总共72字节,从主引导记录的偏移
0x01b8到0x01ff处),并且放置到GRLDR.MBR的开始扇区的相同范围的偏移0x01b8
到0x01ff处。
如果硬盘上的主引导记录是由微软的FDISK产生的单一的扇区主引导记录,
可以选择把它复制到GRLDR.MBR的第二扇区。
GRLDR.MBR的第二扇区叫作“原先的主引导记录”。当找不到GRLDR后,将从“原先的主引
导记录”开始引导。
不需要其它的步骤,当所有的上述的必要的改变已经完成后,现在只要将GRLDR.MBR写到
主引导磁道。这就全部完成了。
注意:主引导磁道表示的是硬盘的第一条磁道。
注意:GRLDR.MBR 的自举代码只在分区的根目录寻找GRLDR。你最好把menu.lst文件和GRLDR
放置在一起。(就是说放在和 GRLDR 相同分区的相同根目录下。)
“grldr” 文件名在ext2分区中必须是小写字母,而且grldr的文件种类必须是纯普通文件。
其它种类,例如,符号链接文件也是不行的。
更新: bootlace.com 是一个在 DOS/LINUX 下的能把 grldr.mbr 安装到主引导记录
的工具。整个grldr.mbr被嵌入到bootlace.com工具内部,因此 bootlace.com可以独
立使用。参见后面。
以下内容供开发人员参考.....
******************************************************************************
*** grldr.mbr - Details about the control bytes ***
******************************************************************************
grldr.mbr - 其控制字节的详述
有六个字节可以控制GRLDR.MBR引导过程。
偏移量 长度 说明
====== ====== ==============================================================
5ah 1 第 0 位=1 :禁止搜索软盘上的GRLDR 。
第 0 位=0 :允许搜索软盘上的GRLDR 。
第 1 位=1 :禁止引导分区表无效的原主引导记录