设备类型:

(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

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

  1. linux_命令行助手:(manpages supplement)/获取linux命令用法示例的若干辅助命令行工具(cheat/tldr/eg/manly)

    文章目录 linux_命令行助手:(manpages supplement)/获取linux命令用法示例的若干辅助命令行工具(cheat/tldr) references 我的推荐(两个)

  2. kubectl全部命令用法示例

    文章目录 1 kubectl命令总结 2 kubectl命令用法测试 create expose run set explain get edit delete rollout scale autos ...

  3. Linux 中 make 命令用法示例

    概述:make命令描述源程序间相互关系并自动编译,用于执行makefile文件中的预先设定的命令,诸如编译.运行.删除等等,可大大提高效率.在较大规模的系统中,人们希望对其中某个或者某一些模块的修改不 ...

  4. linux chown 使用实例,chown命令_Linux chown命令用法示例详解

    Linux chown命令用法介绍 chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组.用户可以是用户或者是用户ID,用户组 ...

  5. linux scp命令用法_Linux SCP命令用法示例

    linux scp命令用法 Scp is an acronym for Secure Copy. It is used primarily for copying files over an ssh ...

  6. Java Map.forEach 用法示例

    一般的集合 一般集合 List ,set 之类的直接使用 foreach 即循环遍历时,直接for 循环list 内每一个单个对象即可,对于Map 同时遍历key 与 value 除了一般的 entr ...

  7. Scala Array中_ filter map的用法示例

    object S {def main(args: Array[String]): Unit = {println("scala")val arr: Array[Int] = Arr ...

  8. mshta命令用法示例(在dos命令弹出消息框)

    JS: 复制代码代码如下: mshta vbscript:window.execScript("alert('hello world!');","javascript&q ...

  9. Linux常用60个命令用法

    原文链接:Linux常用的60个命令用法 - Accwiz - 博客园 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在L ...

  10. linux who命令测试,Linux中的who命令详细示例

    who是一个命令行实用程序,可打印当前登录用户的列表.它还可以显示当前的运行级别,上次系统引导的时间等.在本文中,我们解释展示了GNU coreutils软件包中捆绑的who命令用法示例. 如何使用w ...

最新文章

  1. Matlab数据类型学习图解
  2. 一、烧写最小linux系统
  3. UVA12113 Overlapping Squares重叠的正方形 暴力破解
  4. 高可用mysql笔记_MySQL笔记-高可用方案
  5. Activemq Jms 简单示例
  6. timeSetEvent的用法(一)
  7. C#继承(初始化基类,重写,重载)
  8. 带着身体在香港肤浅行走(一)
  9. 算法笔记(一)(教你系统学习基础算法)
  10. 牛X的规则引擎urule2
  11. 工控计算机+isa接口,研华工控机IPC-610系列可提供多个PCI、ISA总线
  12. Hadoop “Hello World” 示例
  13. 8086CPU寻址方式详解
  14. Linux内核学习路径
  15. gpg invalid解决方法
  16. 一个微信小程序开发示例
  17. linux运维工程师 倒班,运维人员值班制度
  18. C++设计模式实例讲解
  19. 在Mac上为其他设备开启代理
  20. 虾皮跨境店怎么上架产品?该如何操作?

热门文章

  1. 看漫画用什么软件最好?另外,好看的百合漫画有哪些?
  2. 2019年大学计算机二级考试报名,南通职业大学2019年秋季计算机二级考试报名通知...
  3. 【本周最新】qlv转mp4格式转换器 工具 软件
  4. 上海内推 | 微软亚洲研究院上海人工智能组招聘深度学习研究实习生
  5. python安装PIL模块
  6. cdrom是多媒体微型计算机,2011年计算机一级考试理论试题:多媒体
  7. 004-CentOS换清华源
  8. 百度服务器状态异常,百度抓取异常连接超时是什么意思
  9. PHP Session理解
  10. CSDN 创始人蒋涛:开源吞噬世界,得开发者得天下