当前位置: 首页 > 工具软件 > Grub4DOS > 使用案例 >

GRUB4DOS(九)常用设备类型及map命令用法示例

谢财
2023-12-01

设备类型:

(fd0)       第一个软盘
(fd1)       第二个软盘

(hd0)       第一个硬盘
(hd1)       第二个硬盘
(hd-1)      最后一个硬盘
(hd)        最后一个硬盘之后的硬盘号码,创建新的虚拟硬盘时使用

(cd0)       第一个光驱,相当于 (hd32),由 cdrom --init 创建
(cd1)       第二个光驱,相当于 (hd33),由 cdrom --init 创建
由于 cdrom 的识别能力太低,同时市场上的光驱设备几乎全被U盘代替,所以 (cd?) 这种格式可能面临淘汰。

(hd0,0)     第一块硬盘的第一主分区
(hd0,4)     第一块硬盘的第一扩展分区
(hd-1,0)    最后一块硬盘的第一主分区,没有 (hd-2,0) 这种格式,也没有 (hd-1,-1) 这种格式。

(hd#,0)     第一主分区(在硬盘#上)
(hd#,1)     第二主分区(在硬盘#上)
(hd#,2)     第三主分区(在硬盘#上)
(hd#,3)     第四主分区(在硬盘#上)

(hd#,4)     第一逻辑分区(在硬盘#上)
(hd#,5)     第二逻辑分区(在硬盘#上)
(hd#,6)     第三逻辑分区(在硬盘#上)
(hd#,7)     第四逻辑分区(在硬盘#上)

(hd32)      第一个光驱
(hd33)      第二个光驱
(0xFF)      最后一个光驱(hd127)

()          当前磁盘
(bd)        初始启动设备(设备包括磁盘和驱动器)
(cd)        从光盘启动后,Grub4Dos 捕获到的启动光盘,如果不是从光盘启动,则没有 (cd) 设备
(ud)        Fbinst 启动方式制作的隐藏分区
(pd)        PXE 网络启动设备
(nd)        网络驱动器,现已不常用(nd 已经不存在了,已经被pd代替)
(md)        内存驱动器,实现了将整个内存作为一个磁盘驱动器来访问
(rd)        随机存贮驱动器。(md) 设备访问内存是从物理地址 0 开始,而 (rd) 可以访问起始于任何基地址的内存

以数字命名的设备:
fd0 - fd126    :     0x0 - 0x7E  (软盘和虚拟软盘,排除 0x21 和 0x23)
pxe            :     0x21        (网络启动设备)
ud             :     0x23        (Fbinst 隐藏分区)
rd             :     0x7F        (随机存贮驱动器)
hd0 - hd30     :     0x80 - 0x9E (硬盘和虚拟硬盘)
cd             :     0x9F        (捕获到的启动光盘,这个不一定正确,视 bios 而定)
hd32 - hd127   :     0xA0 - 0xFF (光盘和虚拟光盘)

设备后面跟随 +1 表示将设备的第 1 个扇区当作一个单一的文件看待:

(hd0)+1     将整个硬盘的第一个扇区当作一个文件(共 1 个扇区)
(hd0,0)+1   将整个分区的第一个扇区当作一个文件(共 1 个扇区)
(fd0)+1     将整个软盘的第一个扇区当作一个文件(共 1 个扇区)
(cd0)+1     将整个光盘的第一个扇区当作一个文件(共 1 个扇区)
(md)+1      将整个内存的第一个扇区当作一个文件(共 1 个扇区)
(rd)+1      这个比较特殊,将指定内存的所有内容当作一个文件

[注意:(rd)+1 这个标志始终代表文件,它包含存储在 (rd) 中的所有字节。 ]

同样可以使用 +2、+3 等,表示将前 2 个或前 3 个扇区当作单一的文件看待:

(hd0)+2     将整个硬盘的前 2  个扇区当作一个文件(共 2  个扇区)
(hd0,0)+3   将整个分区的前 3  个扇区当作一个文件(共 3  个扇区)
(fd0)+5     将整个软盘的前 5  个扇区当作一个文件(共 5  个扇区)
(cd0)+10    将整个光盘的前 10 个扇区当作一个文件(共 10 个扇区)
(md)+32     将整个内存的前 32 个扇区当作一个文件(共 32 个扇区)
(rd)+2      将指定内存的前 2  个扇区当作一个文件(共 2  个扇区)

也可以使用类似 32+5 的方法:

(hd0)512+2  将整个硬盘的第 512 个扇区之后的 2  个扇区当作一个文件(共 2 个扇区)
(hd0,0)32+3 将整个分区的第 32  个扇区之后的 3  个扇区当作一个文件(共 3 个扇区)
(fd0)1+1    将整个软盘的第 2   个扇区当作一个文件(共 1  个扇区)
(cd0)128+1  将整个光盘的第 129 个扇区当作一个文件(共 1  个扇区)
(md)0+32    将整个内存的前 32  个扇区当作一个文件(共 32 个扇区)
(rd)0+1     等效于 (rd)+1,将指定内存的所有内容当作一个文件

关于 (rd) 设备:

(rd) 设备只是对内存区域的引用,(rd) 设备所引用的内存区域是不被保护的,你可以将 (rd) 理解为指向内存块的指针。在 Grub4Dos 中,很多东西都是自由的、无保护的、没有限制的,(rd) 就是其中之一。

(rd) 不是一个 int13 设备,而仅仅是一个 grub4dos 设备。在 grub4dos 里面,存在 (rd) 设备,但进入 DOS 以后,就没有 (rd) 设备了。

(rd)+1 始终表示 (rd) 设备的整个内容,而不是第一个扇区。

通过下面的地址可以获取 (rd) 设备的信息:
set /a rdnum=*0x82CC    # (rd) 设备的设备号
set /a rdbase=*0x82D0   # (rd) 设备的起始地址
set /a rdsize=*0x82D8   # (rd) 设备的总长度

通过下面的方法可以自由设置 (rd) 设备的信息:
map --ram-drive=0xFF7F      # 修改 (rd) 设备的设备号
map --mem --rd-base=50000   # 设置 (rd) 设备的起始地址
map --mem --rd-size=30000   # 设置 (rd) 设备的总长度

下面的命令仅仅修改了 (rd) 设备的信息:
map --mem /FILE (rd)
这里的 (rd) 指向了一块内存区域,这块内存区域中存放了 /FILE 文件的内容,但是这块内存是不被保护的,这块内存随时都可能被其他代码修改,甚至被 Grub4Dos 自身修改。

下面的命令也修改了 (rd) 设备的信息,但是 (rd) 指向的内存区域是受保护的,因为它和 (fd0) 重叠,而 (fd0) 是受保护的:
map --mem /FILE (rd)
map --mem /FILE (fd0)
map --hook
如果第一条命令和第二条命令交换一下顺序,那么结果就不一样了。

什么情况下需要使用 (rd) 设备?当你需要它的时候就去用它,如果你实在不知道什么时候需要用到 (rd),那么很简单,不要用它。

==============================

map --status
显示磁盘仿真的状态。

map /PE.ISO (0xFF)
map --hook
将 /PE.ISO 映射到 (hd127) 仿真磁盘,/PE.ISO 必须在磁盘中连续存放,不能有碎片。

map --mem /PE.ISO (0xFF)
map --hook
先将 /PE.ISO 加载到内存,然后再映射到 (hd127) 仿真磁盘,/PE.ISO 可以有碎片。

map --mem=-2880 /FLOPPY.IMG (fd0)
map --hook
先将 /FLOPPY.IMG 加载到内存,然后再映射到 (fd0) 仿真软盘,(fd0) 将占用至少 1440KB 的内存。

map --mem --top /PE.ISO (0xFF) 
map --hook
将 /PE.ISO 加载到高端内存,然后再映射到 (hd127) 仿真磁盘,把镜像加载到高位内存就不能使用 gzip 压缩,两者不能同时实现。
在 grub4dos 中,内存在 3.25G 处被分成了高端内存和低端内存两端,镜像不能跨 3.25G 这个点。如果你的内存小于 3.25G,你就没有高端内存可用。 

map --unmap=0xFF
map --rehook
卸载 (hd127) 仿真磁盘。不能使用 --unmap=(0xFF) 的方法卸载,--unmap= 后面必须是数字。
--rehook 用于停止仿真盘并释放内存,相当于 --unhook 然后 --hook(这样看来,map --unhook 命令似乎不会被单独使用了)

map --unmap=0,0x80,0xFF
map --rehook
卸载多个仿真磁盘。

map --unmap=0:0xFF
map --rehook
卸载所有仿真磁盘。

如果要通过设备名的方法卸载某个设备,可以这样做:
map (hd127) (hd127)
map --rehook

map --read-only /FLOPPY.IMG (fd0)
map --hook
(fd0) 只能读,不能写,防止 /FLOPPY.IMG 文件被破坏。
映射到仿真盘中的文件都是可以修改的,无论是 IMG、ISO、VHD 等,除非使用 --read-only 参数。

map --fake-write /FLOPPY.IMG (fd0)
map --hook
(fd0) 处于假写状态,可以写入数据,但并未记录到 (fd0) 上,防止 /FLOPPY.IMG 文件被破坏。

map --unsafe-boot /FLOPPY.IMG (fd0)
map --hook
这个参数不知道是什么作用,大概是允许修改 (fd0) 的引导扇区。

map ---disable-chs-mode /FLOPPY.IMG (fd0)
map --hook
禁用 (fd0) 的 CHS 访问功能。

map --disable-lba-mode /FLOPPY.IMG (fd0)
map --hook
禁用 (fd0) 的 LBA 访问功能。

map 命令还可以用来修改 (rd) 随机存储器的信息,上面已经说过了。

[注:其他 map 参数似乎不怎么常用,也不太理解其含义,这里就不总结了]

[注意:在map命令行中,(hdm,n)+1 式的写法被解释成代表整个(hdm,n)分区,而不仅仅是此分区的第一扇区。]

[注意:--unhook 的仿真盘,如果没有 --unmap,则在需要的时候会自动 --hook。]

==============================

关于 map 命令的磁盘交换:

# 打算把当前设备映射为(hd0) 
map () (hd0)
# 打算把(hd0)映射为当前设备
map (hd0) ()
#开始执行映射
map --rehook

 类似资料: