无忧启动论坛

标题: 能否用GRUB4DOS直接切换U盘中windows可见区和不可见区?(C大一语道破天机!已解决) [打印本页]

作者: 青青草    时间: 2012-3-19 18:53
标题: 能否用GRUB4DOS直接切换U盘中windows可见区和不可见区?(C大一语道破天机!已解决)
我把U盘分成了三个区,一个UD区,一个WINDOWS可见区,一个WINDOWS不可见区。把win7.iso解压在WINDOWS不可见区,需要安装系统时,用BOOTICE指定其为可见区,然后进行安装。
    现在的问题是:能否用GRUB4DOS直接切换U盘中windows可见区和不可见区?请大侠们赐教!

[ 本帖最后由 2011phzhc 于 2012-3-20 01:46 编辑 ]
作者: sratlf    时间: 2012-3-19 19:51
标题: 回复 #1 2011phzhc 的帖子
grub启动后进命令行  执行 geometry (U盘编号)  命令看下结果

比如U盘是hd0  就执行 geometry (hd0)

U盘是hd1  就执行 geometry (hd1)
作者: 青青草    时间: 2012-3-19 23:07
标题: 回复 #2 sratlf 的帖子
grub启动后进命令行  执行geometry (hd0),结果如下:
drive 0x80 (LBA):C/H/S=1946/255/63, sector count/size=31262490/512
partition num: 0, active , Filesystem type is fat, partition type 0x0C
partition num: 1,  Filesystem type is fat, partition type 0x0B
作者: chenall    时间: 2012-3-19 23:36
好像WINDOWS是根据分区表的位置来决定显示哪一个U盘分区的。

所以办法如下。

按常规方法建立两个主分区。打开MBR,复制第1个分区表的信息到第3个分区表位置(正常情况下该位置为空)
默认是显示第一个分区。

如果需要显示第二个分区,只需要直接把第1个分区表的内容清除即可。

要恢复显示第一个分区,再把第3个分区表数据复制到第1个。

使用GRUB4DOS操作如下:
操作之前要先备份好你的数据,否则一个不小心可能导致数据丢失。

1.确认U盘在GRUB4DOS下的设备号,比如(hd0) (hd1)。
2.复制第1分区表到第3个(只需要操作一次)。执行之前需要保证第三个分区表内容是空的,否则…………
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1BE seek=0x1DE

3.菜单。
  1.显示第二分区
     dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1EE seek=0x1BE
  2.显示第一分区
    dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1DE seek=0x1BE
作者: 青青草    时间: 2012-3-20 00:20
标题: 回复 #4 chenall 的帖子
请教C大,是否可以在菜单中直接这样?
title 复制第1分区表到第3个
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1BE seek=0x1DE

title 显示第二分区
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1EE seek=0x1BE
         
title 显示第一分区
  dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1DE seek=0x1BE
另外,怎样才能知道第三个分区表内容是否空的?
作者: 青青草    时间: 2012-3-20 00:31
我试了,直接下面这样是不行的!请教C大,该如何书写?
title 复制第1分区表到第3个
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1BE seek=0x1DE

title 显示第二分区
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1EE seek=0x1BE

title 显示第一分区
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1DE seek=0x1BE
作者: 青青草    时间: 2012-3-20 01:42
标题: 回复 #4 chenall 的帖子
谢谢C大和S大!在您的指点下,我已经成功实现了用GRUB4DOS直接切换U盘中windows可见区和不可见区了。
作者: 2010wdhzone    时间: 2012-4-2 09:11
2011phzhc 兄,能否把正确的写法发表一下?为无忧做些贡献,谢谢!
作者: 青青草    时间: 2012-4-2 09:50
title [01]  显示U盘第二分区  \n
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1DE seek=0x1BE
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,0)
makeactive
chainloader +1
boot

title [02]  显示U盘第三分区  \n
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1EE seek=0x1BE
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
作者: 青青草    时间: 2012-4-2 11:01
对不起,重新更正一下:
先让U盘显示为第二分区!然后运行下列菜单条三:硬盘启动 Windows ,再删除该菜单条。

iftitle [find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr] [o] 显示U盘第二分区[默认] \n
  dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1DE seek=0x1BE
find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
rootnoverify (hd0,0)
makeactive
chainloader +1

iftitle [find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr] [p] 显示U盘第三分区 [zhc] \n
  dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1EE seek=0x1BE
find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
rootnoverify (hd0,0)
makeactive
chainloader +1

iftitle [find --set-root --devices=h /bootmgr || find --set-root --devices=h /ntldr] 硬盘启动 Windows  \n
               
                 #复制第1分区表到第3个
      
                 dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1BE seek=0x1DE
                 find --set-root --devices=h /bootmgr || find --set-root --devices=h /ntldr
                 map () (hd0)
                 map (hd0) ()
                 map --rehook
                 rootnoverify (hd0,0)
                 makeactive
                 chainloader +1

[ 本帖最后由 2011phzhc 于 2012-4-2 11:06 编辑 ]
作者: 2010wdhzone    时间: 2012-4-2 11:26
恩,谢谢2011phzhc ,效率不是一般的高呀!!!
作者: yctc    时间: 2012-4-2 13:01
学习了。很好的实例
作者: 青青草    时间: 2012-4-2 14:38
标题: 回复 #11 2010wdhzone 的帖子
操作之前要先备份好你的数据,否则一个不小心可能导致数据丢失。
作者: 2010wdhzone    时间: 2012-4-4 12:45
标题: 回复 #13 2011phzhc 的帖子
恩,好的,非常感谢!
作者: singel    时间: 2012-4-8 11:56
俺跟着沾光,哈哈
作者: 青青草    时间: 2012-5-13 10:16
标题: 回复 #4 chenall 的帖子
请教chenall 大师, 复制第1分区表到第3个是:
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1BE seek=0x1DE
可不可以复制第1分区表到某个文件?如果可以,菜单该如何书写?
作者: hotdll    时间: 2012-5-13 16:56
这个方法挺恐怖的。慎用。
作者: sunsea    时间: 2012-5-16 20:26
原帖由 2011phzhc 于 2012-5-13 10:16 发表
请教chenall 大师, 复制第1分区表到第3个是:
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1BE seek=0x1DE
可不可以复制第1分区表到某个文件?如果可以,菜单该如何书写?

可以。
如果需要写入文件的话,这样:
1.确认U盘在GRUB4DOS下的设备号,比如(hd0) (hd1)。
2.复制第1分区表到某盘下的dpt.bin(只需要操作一次,示例为放在UD)。执行之前需要保证有dpt.bin这个文件,长度为16个字节,内容为全00(可用WinHex生成)
dd if=(hd0)+1 of=(ud)/dpt.bin bs=1 count=16 skip=0x1BE
3.菜单。
  1.显示第二分区
     dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1EE seek=0x1BE
  2.显示第一分区
    dd if=(ud)/dpt.bin of=(hd0)+1 bs=1 count=16 seek=0x1BE

[ 本帖最后由 2011czmxbb52 于 2012-5-16 20:30 编辑 ]
作者: 青青草    时间: 2012-5-16 21:55
标题: 回复 #18 2011czmxbb52 的帖子
我没有用过WinHex,如何用WinHex生成dpt.bin这个文件?可以写详细些吗?麻烦你了!
作者: 青青草    时间: 2012-5-16 23:02
标题: 回复 #18 2011czmxbb52 的帖子
谢谢你!我已经解决了。其实,不一定要用dpt.bin,用其它文件也可以。
作者: haiou327    时间: 2012-5-16 23:20
每切换一次就要向0扇区写入操作,慎用为妙
作者: 2012noeyedragon    时间: 2012-5-18 10:35
能够看明白一点点,学习下啊啊
作者: 2012noeyedragon    时间: 2012-5-18 10:54
原帖由 haiou327 于 2012-5-16 23:20 发表
每切换一次就要向0扇区写入操作,慎用为妙

请教下版主  代码里面的哪个命令会写0扇区??请赐教,先谢谢啦
作者: 青青草    时间: 2012-5-18 11:26
标题: 回复 #23 2012noeyedragon 的帖子
1.显示第二分区
     dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1EE seek=0x1BE
  2.显示第一分区
    dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1DE seek=0x1BE




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