无忧启动论坛

标题: 为什么这条命令要重复两遍? [打印本页]

作者: 2012painagain    时间: 2014-4-7 10:19
标题: 为什么这条命令要重复两遍?
map (hd0) (hd1)
map (hd1) (hd0)

作用是交换硬盘,但是只写一遍不行么,非要再写一次?
作者: sratlf    时间: 2014-4-7 10:54
两条命令作用不同  第一条是准备将现在的hd0映射为hd1  第二条是准备将现在的hd1映射为hd0  这两条命令会在执行map --hook后生效
作者: 2012painagain    时间: 2014-4-7 11:04
sratlf 发表于 2014-4-7 10:54
两条命令作用不同  第一条是准备将现在的hd0映射为hd1  第二条是准备将现在的hd1映射为hd0  这两条命令会在 ...

多谢版主,我得好好去理解理解'map'
作者: thomas0769    时间: 2014-4-15 10:03
sratlf 发表于 2014-4-7 10:54
两条命令作用不同  第一条是准备将现在的hd0映射为hd1  第二条是准备将现在的hd1映射为hd0  这两条命令会在 ...

多谢版主  这样理解 hdo->hd1   然后 hd1->hd0 ... 那岂不是 hd0还是回到hd0了?
作者: 不点    时间: 2014-4-15 13:46
map (hd0) (hd1)
map (hd1) (hd0)

关于虚拟盘的理解。

在未虚拟之前,假定 BIOS 里面存在两个盘:(hd0) 和 (hd1)

现在执行 map (hd0) (hd1),意思是准备创建虚拟盘 (hd1),它将要把机器固有的 (hd0) 当成虚拟盘 (hd1)。注意,由于还没有执行 map --hook,所以,这个虚拟盘并未真正建立。一旦执行 map --hook,那么,虚拟盘 (hd1) 就建立起来了,它的扇区内容与机器固有的 (hd0) 相同,或者说,它的扇区数据来源于 (hd0)。虚拟盘的盘号是 (hd1),当 map --hook 执行之后,你只要访问 (hd1) 的扇区,那就会访问 (hd0) 的扇区。所谓仿真,那就是欺骗,弄假成真。它把 (hd0) 装扮成 (hd1)。此时,你机器上原来固有的那个 (hd1) 已经无法访问了。

要想让机器原有的 (hd1) 不至于被虚拟的 (hd1) 覆盖掉,你需要事先将 (hd1) “备份” 起来,比如说,

map (hd1) (hd0)

这条命令执行的时候,(hd1) 虚拟盘应该不存在才对;如果此时 (hd1) 已经是虚拟盘了,那么就不是你想要达到的目的了。

总结一下,就是这样:

map (hd0) (hd1)
map (hd1) (hd0)
map --hook

第一条命令准备创建虚拟盘 (hd1),它的扇区数据来源于真实的硬盘 (hd0)。
第二条命令准备创建虚拟盘 (hd0),它的扇区数据来源于真实的硬盘 (hd1)。
但都未真正起作用。

直到第三条命令 map --hook 执行之后,以上两个虚拟盘才同时建立起来。

虚拟盘 (hd1) 的扇区数据来源于真实盘 (hd0),而虚拟盘 (hd0) 的扇区数据来源于真实盘 (hd1)。

这就起到了交换磁盘的作用,达到了目的。

对比一下,下面的做法是错误的:

map (hd0) (hd1)
map --hook
map (hd1) (hd0)
map --hook

当 map (hd0) (hd1) 和 map --hook 执行之后,(hd1) 已经是虚拟盘了,它的扇区内容与真实盘 (hd0) 相同。
因此,接下来执行的 map (hd1) (hd0) 就是准备以虚拟盘 (hd1) 为基础来建立虚拟盘 (hd0),map --hook 之后,起作用了。那实际上是以真实盘 (hd0) 为基础来建立虚拟盘 (hd0),所以,等于互相抵消了,回到原地,虚拟盘 (hd0) 与真实盘 (hd0) 的扇区内容相同,等于说,虚拟盘 (hd0) 不存在,它就是真实盘 (hd0)。

所以,以上四条命令等价于以下两条命令:

map (hd0) (hd1)
map --hook



map (hd1) (hd0)
map --hook

等价于 “什么工作也没做”。其原因就在于,此时 (hd1) 已经是虚拟盘了。






欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3