Grub4DOS向DOS传递参数

之前每次帮人装系统后就ghost一次,放在隐藏分区,但每台电脑的隐藏分区位置都不一样,要写自动ghost命令,修改自动运行的批处理,那得解开磁盘映像,然后修改,然后重新封装,甚是麻烦,自动调用不同程序就要弄不同的映像,很浪费空间。又发现雨林木风的GHOST盘只需要一个通用DOS.IMA就可以了,说明启动程序能把需要的参数传递过去了,但Grub4DOS不行。不过最近在SYSOFT时空论坛的Grub4DOS版转悠,发现这个功能很早已经实现了,太火星了。

最初看到是zw2312914的方法,非常巧妙的方法,准备尝试,又发现多了一个dd命令,而不是savedefault仅写入一个数字,更强大了,实在好用。无忧这个帖子也提供思路,我在自己的FreeDOS映像试验了一下,成功,哈哈,现在只需要一个映像就可以了,把要修改的代码写在外面就不需要重新打包映像了,说一下我的具体实现。

映像准备

这是在FreeDOS磁盘映像里面的,其他DOS应该也一样

  1. 在磁盘映像里面建立一个“g4d.bat”文件,内容就是100*100的空格,大约3k(因为要大于2k)。因为grub4dos的dd命令不能建立文件,只能覆写,所以要实现建立空文件来,就是占着毛坑不拉屎。
  2. DOS加载好驱动后就自动执行一个脚本,一般就是“autoexec.bat”,在结尾加上一调用的“g4d.bat”文件,也即使传递过来的内容了。FreeDOS下是这样的。
  3. echo.
    echo Welcome to FreeDOS
    echo.
    g4d.bat

  4. 搞定后就打包回img

用write命令传递

简单的命令可以直接用write,可在gurb命令行用“help write”查看用法,假如我要执行testdisk,

write (fd0)/g4d.bat testdisk

写入后可以用“cat”命令来验证,测试后好就弄成菜单项就行了

title TestDisk
map --mem /grub/fd.img.gz (fd0)
map --hook
write (fd0)/g4d.bat testdisk
chainloader (fd0)/kernel.sys

用dd命令传递

用write可以传递简单的单行命令,如果多行和比较长的命令就用dd命令,把一个文件复制到g4d.bat里去。假设我有一段自动ghost恢复代码。

ghost.exe -nousb -clone,mode=pload,src=X:\ghost\ghost1.gho:1,dst=1:1 -rb
FDAPM /warmboot

建立一个ghost.txt文件,把这2行写进去,在gurb4dos里面就用

dd if=()/grub/ghost.txt of=(fd0)/g4d.bat

这样把“ghost.txt”的内容复制到“g4d.bat”里去,就自动ghsot恢复了。ghost会提示确认,退出即自动重启。每次只需要修改“ghost.txt”文件。菜单项是这样

title 一键 Ghost 恢复系统
map --mem /grub/fd.img.gz (fd0)
map --hook
dd if=()/grub/ghost.txt of=(fd0)/g4d.bat
chainloader (fd0)/kernel.sys

dd命令比较危险,SYSOFT时空论坛也有讨论,不过用来修改磁盘映像里的文件还是很安全的(其实是在写内存)。

由Grub4Dos负责确认

对“ghost.exe“加上“-sure”参数可以不确认即进行恢复,即

ghost.exe -nousb -sure -clone,mode=pload,src=X:\ghost\ghost1.gho:1,dst=1:1 -rb
FDAPM /warmboot

但万一用户误按怎么办?不加ghost会提示确认,但转一圈才提示又有点多余,最好由grub4dos负责,使用密码功能,即在菜单项开头加上

password Yes

那么用户要先输入“Yes”才能继续下面的命令,那么就避免误按了。

警告文本

还可以加一个警告文本,建立一个“warning.txt”文件为警告内容,我的是

警告:
这个选项表示恢复系统到C盘,请慎重考虑。
C盘上的所有数据将会被摧毁,想清楚在干什么。
如果是误按请按键盘左上角的 Esc 键返回。

提示:
如果原来操作系统不能进入但C盘中还有需要的资料,
可以在菜单进入“Windows PE 急救系统”先拯救出来。

恢复:
如果要继续,输入确认码“Yes”,不包括引号,大小写敏感。
确认后即启动恢复程序,成功恢复后自动重启,即可照常使用。

总结

上面几个功能合起来的完整菜单项为

title 一键 Ghost 恢复系统
cat /grub/warning.txt
password Yes 
map --mem /grub/fd.img.gz (fd0)
map --hook
dd if=()/grub/ghost.txt of=(fd0)/g4d.bat
chainloader (fd0)/kernel.sys

这招我用了很多次了,很爽很有效,dd命令真是很好很强大。

This entry was posted in LiveCD and tagged , . Bookmark the permalink.

发表评论

您的电子邮箱不会被公开。 标记为 * 的区域必须填写

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">