设备类型:
(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