噢,还有这样的禁忌,看来以后要特别注意了。。。之前有帖子“PE安装到任意分区/逻辑分区 的100%成功方案”中就用到--in-place,但没有特别说明需要注意的地方 多谢不点解答。 |
是故意不公开的选项。作用与 --in-situ 相同。区别在于,--in-situ 比较安全,当主分区表没有空白项的时候,就无法使用 --in-situ 了,它拒绝进行仿真。但 --in-place 放宽了限制,在这样的情况下也允许执行 map。此时,有一个主分区表的项目要被虚拟代码废弃掉。这个废弃掉的项目用来存放虚拟盘的分区表项。 --in-place 并非特别不安全。只要用户在这个仿真生效以后不用 INT13 指令写入 MBR 扇区,那就没有危险。如果用户程序中有一个程序用 INT13 指令写入了 MBR 扇区,那就可能永久性地更改了 MBR 上的分区表,造成原来四个表项中的某一个项目丢失,这个丢失的表项被替换成虚拟盘所占据的表项了,这也就相当于用 partnew 命令永久性地破坏了原来的分区表项。 |
另外请教下 map --in-place 参数具体作用是什么? 论坛的帮助文件中没有说明过,但不少实例中有用到,如map --in-place ()+1 (hd0),我用过对主分区或逻辑分区都有效果,把两个分区交换了,而且我应该也不是用fdisk分区的,这个dos命令实在比较古老不方便了。 |
谢谢不点大师这么详细的解答。 |
本帖最后由 不点 于 2013-11-5 16:22 编辑 没错,是磁盘分区的问题。 对于磁道长度是 63 个扇区的那些盘,扩展分区里面的每个逻辑分区都有一个 “扩展分区表”。这个分区表通常位于紧接分区 BPB 引导扇区之前的 63 个扇区处(距离为一个磁道的长度)。如果不是这样的,那么就不能用 map 来将分区映射为含有分区表的盘。 图片中的错误信息的意思是,在规定的位置没有发现合法的扩展分区表。 用微软的 fdisk 或者 win98 里面的工具来建立分区,是可以的。其它工具建立的分区格式,不被 grub4dos 支持。 对于主分区,也是一样的道理。紧接主分区 BPB 引导扇区之前的 63 扇区(一个磁道的长度)处,必须是主分区表。仿真主分区意义不大,只有一个主分区才能用这种方式来仿真,即物理位置最靠前的那个主分区,并且距离分区表恰好是 63 个扇区,即,一个磁道长度。但这样的主分区仿真还不如直接用整盘映射来做了。因此,仿真主分区是没有什么意义的。 把分区仿真为整盘,其仿真的原理是,首先确定紧接这个分区之前的那个磁道的开头是否含有分区表(或扩展分区表),如果有,就能仿真,如果没有,就拒绝仿真。微软的 fdisk 所建立的分区就是符合要求的。当有分区表(或扩展分区表)时,仿真程序把这个分区表(或扩展分区表)作为新的虚拟盘的分区表,并进行了必要的虚拟,比如,让扩展分区表看起来像是一个主分区表的样子。 如果把分区仿真为软盘,则没问题。因为此时不用为这个分区添加一个虚拟的 MBR 磁道。 还有一种仿真方式是 map --in-situ (hd0,4)+1 (hd0),即,把扩展分区中的某个逻辑分区仿真为主分区。这是通过添加一个主分区表项来实现的。因此,要求主分区表的四项当中至少有一项是空白。这种方式类似于用 partnew 命令建立一个分区表项。所不同的是,partnew 是真的建立分区表项,它会写入硬盘的 MBR 扇区;而 map --in-situ 是虚拟的,不会真的去修改硬盘的分区表,不会写入硬盘的 MBR 扇区。 我还发现了另外一个问题:你用的是 NTFS 格式。仿真程序对 FAT12、FAT16、FAT32 的支持是完美的。NTFS 的 BPB 表可能无法被虚拟。因为它与 FAT 的 BPB 的差别太大了。比如,它没有 reserved sectors 这个域。 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.