之前每次帮人装系统后就ghost一次,放在隐藏分区,但每台电脑的隐藏分区位置都不一样,要写自动ghost命令,修改自动运行的批处理,那得解开磁盘映像,然后修改,然后重新封装,甚是麻烦,自动调用不同程序就要弄不同的映像,很浪费空间。又发现雨林木风的GHOST盘只需要一个通用DOS.IMA就可以了,说明启动程序能把需要的参数传递过去了,但Grub4DOS不行。不过最近在SYSOFT时空论坛的Grub4DOS版转悠,发现这个功能很早已经实现了,太火星了。
最初看到是zw2312914的方法,非常巧妙的方法,准备尝试,又发现多了一个dd命令,而不是savedefault仅写入一个数字,更强大了,实在好用。无忧这个帖子也提供思路,我在自己的FreeDOS映像试验了一下,成功,哈哈,现在只需要一个映像就可以了,把要修改的代码写在外面就不需要重新打包映像了,说一下我的具体实现。
映像准备
这是在FreeDOS磁盘映像里面的,其他DOS应该也一样
- 在磁盘映像里面建立一个“g4d.bat”文件,内容就是100*100的空格,大约3k(因为要大于2k)。因为grub4dos的dd命令不能建立文件,只能覆写,所以要实现建立空文件来,就是占着毛坑不拉屎。
- DOS加载好驱动后就自动执行一个脚本,一般就是“autoexec.bat”,在结尾加上一调用的“g4d.bat”文件,也即使传递过来的内容了。FreeDOS下是这样的。
- 搞定后就打包回img
echo.
echo Welcome to FreeDOS
echo.
g4d.bat
用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命令真是很好很强大。
