NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
查看: 7367|回復: 15

[討論] 【討論】怎樣啟動vhd內的DOS系統?

[複製鏈接]
發表於 2016-6-30 23:07:14 | 顯示全部樓層 |閱讀模式
已經在虛擬機里安裝了dos7.1系統,得到vhd文件。
將vhd掛載到電腦上可以看到系統文件。

問題就是這個vhd文件怎樣通過當前系統(win7)的bootmgr引導。

我嘗試了按照網上的方法,增加了一個如下的entry(啟動項):
Windows Boot Loader
-------------------
identifier              {d4f4e9cc-3ebf-11e6-b8d2-005056c00008}
device                  boot
path                    \windows\system32\winload.exe
description             DOS7.1
locale                  zh-CN
osdevice                vhd=[D:]\dos.vhd
systemroot              \DOS71

但是沒能進入系統,好像是提示找不到“\DOS71\system32\config\system”
很顯然,這是因為我在網上看的教程是用來啟動某個windows系統,而不是DOS系統。

我現在很困擾的是,找不到詳細介紹bcd的資料(不太清楚該怎麼找),不知道這上面的像device、path這些具體是什麼意思。唯有通過命令行里的bcdedit /?來了解。但這樣也可以了解一些了。
按我目前的理解,上面的
device                  boot
path                    \windows\system32\winload.exe
是一對;
osdevice                vhd=[D:]\dos.vhd
systemroot              \DOS71
是另一對。

而之所以這個設置會出錯,我想應該是使用了winload.exe的關係(winload才會去尋找\DOS71\system32\config\system這個不存在的目錄)。要知道DOS系統下根本就沒有winload.exe這個文件啊。

我又嘗試了用easybcd2.2,分別用了“vhd引導”和“MS-DOS 6.x”,都未成功。
無法理解上面為什麼要有兩個device(一個device,一個osdevice)。按理說,vhd是一個完整的磁盤,它有它的mbr。那麼理論上只需要指定一個vhd文件,就可以完成啟動了,不需要systemroot這種參數才對。
 樓主| 發表於 2016-6-30 23:22:57 | 顯示全部樓層
尷尬了,剛剛查到,好像vhd只能用來啟動win7旗艦以上的系統?那難怪不能啟動dos了。

因為我手頭沒有U盤了,也不想在硬盤上搞DOS系統(怕搞壞,因為貌似DOS系統還得在第一個分區,還得fat16格式等等),所以還是想有沒有通過鏡像文件啟動系統的辦法。

看到easybcd的add new entry下面的Portable/external Media下面,除了vhd,還有其他的格式,比如:Raw Hard Disk Image可以用img格式,還有winPE下有wim格式(ramdisk),不知道哪個可以用呢?
發表於 2016-6-30 23:42:57 | 顯示全部樓層
bcd --> grldr --> dos.img
發表於 2016-6-30 23:59:06 | 顯示全部樓層
本帖最後由 wusun 於 2016-7-1 19:35 編輯


menu.lst
# 字體/背景 顏色設定
color cyan/blue white/blue

# 多國語言字型檔
# font /boot/grub/unifont.hex.gz

# 預設等待時間(秒)
timeout 5

# 預設啟動的系統(從0開始算)
default 0

title DOS7.1 Discard Changes
find --set-root /dos.vhd
map --mem /dos.vhd (hd0)
map (hd0) (hd1)
map --hook
root (hd0,0)
chainloader +1

title DOS7.1 Save Changes
find --set-root /dos.vhd
map --mem (md)0x800+4 (99)
map /dos.vhd (hd0)
map (hd0) (hd1)
map --hook
write (99) [FiraDisk]\nStartOptions=disk,vmem=find:/dos.vhd;\n\0
root (hd0,0)
chainloader +1


#重新開機
title Reboot
reboot

#關機
title Shutdown
halt






 樓主| 發表於 2016-7-1 10:56:22 | 顯示全部樓層
wusun 發表於 2016-6-30 23:59
menu.lst

title DOS7.1 Discard Changes

用vhd啟動dos系統真的可行嗎?
我在這篇文章

Boot to VHD (Native Boot): Add a Virtual Hard Disk to the Boot Menu
https://technet.microsoft.com/en-us/library/hh825691.aspx

中看到的設定啟動項的關鍵步驟是:
bcdboot v:\windows
僅僅提供了vhd中的系統所在目錄“\windows”。也就是說,這篇文章所提供的方法,是默認vhd上的系統是windows系統(windows系統才有這個windows目錄)。因此dos系統應該不能通過這個方法啟動。

你給出的方法我還看不懂,似乎是用grubloader。難道grubloader就可以啟動vhd上的任何系統,而微軟的bootmgr那一套卻不行?
發表於 2016-7-1 12:09:03 | 顯示全部樓層
本帖最後由 wusun 於 2016-7-1 12:39 編輯
huhiha 發表於 2016-7-1 10:56
用vhd啟動dos系統真的可行嗎?
我在這篇文章


bootmgr --> grldr --> dos.vhd

剛才試了一下,沒問題,可行!
只要你以下設對:
VHD Type:Fixed (Not EXPANDABLE)

MBR:


PBR:


Format:


測試:





本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?我要註冊

x
發表於 2016-7-1 12:58:40 | 顯示全部樓層
本帖最後由 阿達金田一 於 2016-7-1 12:59 編輯

vhd 只是一種映像格式
而 vhd 如果是 固定大小 類型...實際上就是 bin 2進制映像 ... 也就是 Raw Hard Disk Image
所以 grub4dos 可以 map
其實如果要用 grub4dos map ... 做成 軟碟 dos img 就可以
副檔名都是給人看的 .vhd .vfg .img .ima 都可以 ... 重點還是在 檔案本身內部的格式

另外 bootmgr 本來就是針對 NT6 的開機...
雖然也可以支援 NTLDR (NT5) 和 MBR (需要存成檔案) 的載入
但 bootmgr 和 grub4dos 的 掛載 是不太一樣的

首先 bootmgr 只支援幾種格式而以 ( SDI VHD WIM )... 而且並不會做 root 的動作
因為 bootmgr 只是用 vhd 中的檔案開機... root 還是原本的 root

而 grub4dos 通常在 map 後...會去做 root 動作 ( root 為 map 掛載的裝置 )
所以就算 bootmgr 可以掛載 vhd .. 載入 io.sys ( 實際上不行...並不支援 io.sys 載入 )
但因為  boomgr 掛載的 vhd 不是 root ... dos 一樣開不了... 所以只能去用 grub4dos
 樓主| 發表於 2016-7-1 16:13:33 | 顯示全部樓層
感謝兩位大大的詳盡的解釋~

但我實在是受不了這個easyBCD2.2了,功能根本就有殘缺嘛!
這回我準備了一個Fixed的vhd,安好dos系統。
然後進入easyBCD2.2,點Add New Entry,點右邊Portable/External Media下面Disk Image的Type,把它從“Microsoft VHD”改為“Raw Hard Disk Image”,然後設置路徑(設為上面已經獲得的vhd文件)。
試著重啟了一下,進入了某個grub命令行,並沒有進入vhd裡面的dos。我只好退了出來。

感覺我設定的路徑根本就沒用。
軟件在C:\NST生成一個9KB的AutoNeoGrub0.mbr。那個grub應該就來自這裡。

好了,我要放棄easyBCD2.2,去採用bootmgr -> grldr -> DOS這條路了。
但是我想看懂menu.lst裡面的意思啊,所以就得學習grub命令行的語法。但是找了好久也找不到官方的文檔,怎麼辦?
 樓主| 發表於 2016-7-1 20:53:18 | 顯示全部樓層
wusun 發表於 2016-6-30 23:59
menu.lst

請問這個是grub、grub2還是grub4dos?聽說grub2的語法跟grub4dos的語法不一樣。

我現在在虛擬機里,dos下,把grub4dos的文件拷進了虛擬機磁盤,并運行裡面的grub的命令行。

請問怎麼樣把命令行的輸出導出到文件?這樣看起來或許會方便點。我試過“help >help.txt”,不行。

但恐怕光是grub自帶的help命令還是不夠用的。我隨便看了下help install,裡面提到什麼stage 1、2、1.5,我完全是看得不懂不懂的。請問官方的文檔在哪裡能獲取到?我應該搜索什麼關鍵字?
發表於 2016-7-1 21:25:03 | 顯示全部樓層
本帖最後由 wusun 於 2016-7-1 21:32 編輯
huhiha 發表於 2016-7-1 20:53
請問這個是grub、grub2還是grub4dos?聽說grub2的語法跟grub4dos的語法不一樣。

我現在在虛擬機里,dos ...

How to add "Grub4Dos" to bcd: (Assume that: BCD is located in "C:\BOOT\BCD")

1.Get "GRLDR", and put "GRLDR" into "C:\"
http://dl.grub4dos.chenall.net/grub4dos-0.4.6a-2016-06-03.7z

2.Put the "AddGrub4Dos.BAT" into "C:" and Run the "AddGrub4Dos.BAT" to add "Start Grub4Dos" boot item into bcd:
AddGrub4Dos.BAT
set bcd_path=%~d0\BOOT\BCD
for /f "tokens=2 delims={" %%g in ('Bcdedit /store "%bcd_path%" /create /d "Start Grub4Dos" -application bootsector') do set guid=%%g
set guid={%guid:~0,37%
echo {GUID}=%guid%
bcdedit /set %guid% device boot
bcdedit /set %guid% path \GRLDR
bcdedit /displayorder %guid% /addlast
PAUSE

3.Put the "menu.lst" into "C:\"
menu.lst
# 字體/背景 顏色設定
color cyan/blue white/blue

# 多國語言字型檔
# font /boot/grub/unifont.hex.gz

# 預設等待時間(秒)
timeout 5

# 預設啟動的系統(從0開始算)
default 0

title DOS7.1 Discard Changes
find --set-root /dos.vhd
map --mem /dos.vhd (hd0)
map (hd0) (hd1)
map --hook
root (hd0,0)
chainloader +1

title DOS7.1 Save Changes
find --set-root /dos.vhd
map --mem (md)0x800+4 (99)
map /dos.vhd (hd0)
map (hd0) (hd1)
map --hook
write (99) [FiraDisk]\nStartOptions=disk,vmem=find:/dos.vhd;\n\0
root (hd0,0)
chainloader +1

#重新開機
title Reboot
reboot

#關機
title Shutdown
halt

4.Reboot to BootMgr, and test It!
您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

小黑屋|手機版|NoName Team 電腦資訊討論區 |網站地圖

GMT+8, 2025-8-19 00:25 , Processed in 0.094736 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表