无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 8336|回复: 23
打印 上一主题 下一主题

[求助] 能否用GRUB4DOS直接切换U盘中windows可见区和不可见区?(C大一语道破天机!已解决)

[复制链接]
跳转到指定楼层
1#
发表于 2012-3-19 18:53:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我把U盘分成了三个区,一个UD区,一个WINDOWS可见区,一个WINDOWS不可见区。把win7.iso解压在WINDOWS不可见区,需要安装系统时,用BOOTICE指定其为可见区,然后进行安装。
    现在的问题是:能否用GRUB4DOS直接切换U盘中windows可见区和不可见区?请大侠们赐教!

[ 本帖最后由 2011phzhc 于 2012-3-20 01:46 编辑 ]
2#
发表于 2012-3-19 19:51:17 | 只看该作者

回复 #1 2011phzhc 的帖子

grub启动后进命令行  执行 geometry (U盘编号)  命令看下结果

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

U盘是hd1  就执行 geometry (hd1)
回复

使用道具 举报

3#
 楼主| 发表于 2012-3-19 23:07:57 | 只看该作者

回复 #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
回复

使用道具 举报

4#
发表于 2012-3-19 23:36:45 | 只看该作者
好像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
回复

使用道具 举报

5#
 楼主| 发表于 2012-3-20 00:20:10 | 只看该作者

回复 #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
另外,怎样才能知道第三个分区表内容是否空的?
回复

使用道具 举报

6#
 楼主| 发表于 2012-3-20 00:31:12 | 只看该作者
我试了,直接下面这样是不行的!请教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
回复

使用道具 举报

7#
 楼主| 发表于 2012-3-20 01:42:40 | 只看该作者

回复 #4 chenall 的帖子

谢谢C大和S大!在您的指点下,我已经成功实现了用GRUB4DOS直接切换U盘中windows可见区和不可见区了。
回复

使用道具 举报

8#
发表于 2012-4-2 09:11:29 | 只看该作者
2011phzhc 兄,能否把正确的写法发表一下?为无忧做些贡献,谢谢!
回复

使用道具 举报

9#
 楼主| 发表于 2012-4-2 09:50:04 | 只看该作者
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
回复

使用道具 举报

10#
 楼主| 发表于 2012-4-2 11:01:21 | 只看该作者
对不起,重新更正一下:
先让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 编辑 ]
回复

使用道具 举报

11#
发表于 2012-4-2 11:26:13 | 只看该作者
恩,谢谢2011phzhc ,效率不是一般的高呀!!!
回复

使用道具 举报

12#
发表于 2012-4-2 13:01:49 | 只看该作者
学习了。很好的实例
回复

使用道具 举报

13#
 楼主| 发表于 2012-4-2 14:38:51 | 只看该作者

回复 #11 2010wdhzone 的帖子

操作之前要先备份好你的数据,否则一个不小心可能导致数据丢失。
回复

使用道具 举报

14#
发表于 2012-4-4 12:45:45 | 只看该作者

回复 #13 2011phzhc 的帖子

恩,好的,非常感谢!
回复

使用道具 举报

15#
发表于 2012-4-8 11:56:12 | 只看该作者
俺跟着沾光,哈哈
回复

使用道具 举报

16#
 楼主| 发表于 2012-5-13 10:16:13 | 只看该作者

回复 #4 chenall 的帖子

请教chenall 大师, 复制第1分区表到第3个是:
dd if=(hd0)+1 of=(hd0)+1 bs=1 count=16 skip=0x1BE seek=0x1DE
可不可以复制第1分区表到某个文件?如果可以,菜单该如何书写?
回复

使用道具 举报

17#
发表于 2012-5-13 16:56:59 | 只看该作者
这个方法挺恐怖的。慎用。
回复

使用道具 举报

18#
发表于 2012-5-16 20:26:51 | 只看该作者
原帖由 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 编辑 ]
回复

使用道具 举报

19#
 楼主| 发表于 2012-5-16 21:55:32 | 只看该作者

回复 #18 2011czmxbb52 的帖子

我没有用过WinHex,如何用WinHex生成dpt.bin这个文件?可以写详细些吗?麻烦你了!
回复

使用道具 举报

20#
 楼主| 发表于 2012-5-16 23:02:27 | 只看该作者

回复 #18 2011czmxbb52 的帖子

谢谢你!我已经解决了。其实,不一定要用dpt.bin,用其它文件也可以。
回复

使用道具 举报

21#
发表于 2012-5-16 23:20:15 | 只看该作者
每切换一次就要向0扇区写入操作,慎用为妙
回复

使用道具 举报

22#
发表于 2012-5-18 10:35:12 | 只看该作者
能够看明白一点点,学习下啊啊
回复

使用道具 举报

23#
发表于 2012-5-18 10:54:51 | 只看该作者
原帖由 haiou327 于 2012-5-16 23:20 发表
每切换一次就要向0扇区写入操作,慎用为妙

请教下版主  代码里面的哪个命令会写0扇区??请赐教,先谢谢啦
回复

使用道具 举报

24#
 楼主| 发表于 2012-5-18 11:26:33 | 只看该作者

回复 #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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-23 10:35

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表