NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
12
返回列表 發新帖
樓主: huhiha

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

[複製鏈接]
 樓主| 發表於 2016-7-1 23:04:41 | 顯示全部樓層
wusun 發表於 2016-7-1 21:25
How to add "Grub4Dos" to bcd: (Assume that: BCD is located in "C:\BOOT\BCD")

1.Get "GRLDR", and pu ...

有勞了!

其實我現在其他都搞好了,就差menu.lst的命令還沒搞清楚。我還是保守一點,先看明白了再嘗試。

這是我在虛擬機的截圖。我下的grub4dos是最新版。就是有點不明白,那個是否保存修改,為什麼不用“--read-only”或“--fake-write”呢?


還有
map (hd0) (hd1)
這是什麼意思?為什麼沒有分區編號了呢?

所以我還是希望能找到官方的reff文檔就好了。光靠上面的截圖根本不夠詳細啊。
PS:bcdedit的reff文檔我已經找到了,在microsoft官網上有。Grub4Dos的文檔在哪裡,求指引!
發表於 2016-7-2 00:13:23 | 顯示全部樓層
本帖最後由 阿達金田一 於 2016-7-2 00:30 編輯

如果你是下載官方的 grub4dos ... 解壓後
docs 目錄中有說明文件
sample 目錄中有範例樣本...

grub4dos 原始官方原本是有說明...
不管換網址後...目前 grub4dos 官方好像沒有 所有指令 的 詳細說明 ... 倒是不少別的第3方網站有說明

不過要會用那些指令...也要有點功力...
所以 docs 中的說明... 只說明... 一般會使用的 指令 或 使用方法 (簡單說就是和 開機 比較有關的)

grub4dos 很容易 google 一堆資料... 所以指令 google 一下就好了
對岸 無忧 的教學 http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1

不過很多人學習... 是直接看範例 或是  直接看 grub4dos 中的 help 說明
不過看不太懂英文...又功力不太夠的...可能看不太懂

GrubForDos ... grub4dos ... G4D
https://zh.wikipedia.org/wiki/GNU_GRUB
https://zh.wikipedia.org/wiki/Grub4Dos
不是 grub grub2 也不是 dos ... 更不是 linux 或 windows
而這些平台的指令... 也不是通用的 ... ( 指令後面接 > 那是 dos 或 windows )

不過 grub4dos 本身原始是由 grub 轉變來的... 原本是要給 dos 用的 grub
所以可以看成 dos 版的 grub ( grub.exe 是給 dos 執行的 dos 版的 grub4dos ... 而 grldr 則是給 MBR PBR 加載的 grub4dos )
但後來加入越來越多功能... 所以 grub4dos 可以算是 獨立的 開機管理程式
因為是由 grub 轉變來的... 所以早期的一些指令比較偏類似於 grub / linux ...
例如 ls 指令 ( 類似 dos / win 的 dir )

但後期 G4D 加入很多新功能... 一些 指令習慣 或 功能 也有類似 dos / win 的
像 批次檔功能 , 批次檔指令 , set 指令

不過那也只是 G4D 把一些指令寫的像 dos , win ... 但不是完全一樣

個人建議你先安照範例 邊改邊研究... 會比較快 ...

map 這個指令...要說的話... 應該是 映射裝置
所以它的功能是對 裝置 ...而不是 分區
只是當 映射 來源 是一個 映像檔 時...會做 虛擬裝置 的 映射

map (hd0) (hd1)
是把 原本 (hd0) 映射到 (hd1)

map  指令要在 map --hook 後...才會生效
所以
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
實際上就是把 (hd0) (hd1) 2個 裝置(位置) 做交換
 樓主| 發表於 2016-7-2 10:52:03 | 顯示全部樓層
阿達金田一 發表於 2016-7-2 00:13
如果你是下載官方的 grub4dos ... 解壓後
docs 目錄中有說明文件
sample 目錄中有範例樣本...

真是非常感謝,這正是我想找的!
我自己之前找的教程感覺都不太全,所以就想找官方的資料。這個無憂的教學好像詳細一些!看樣子是沒有所謂“官方”資料了吧。

不過這個g4d是怎麼回事,我無論是在
sourceforge.net
https://sourceforge.net/projects/grub4dos/files/GRUB4DOS/
還是
gna.org
http://download.gna.org/grub4dos/
看到的最新版都是0.4.4。從2009年之後就沒有更新了。

經循wusun大大給出的網址,我才找到0.4.6a版本。而經過試驗,我自己在sourceforge下載的那個0.4.4不能使用,在開機時會黑屏,顯示“狀態:0xc000007b 信息:無法加載所選項,因為應用程序丟失或損壞”。而換成0.4.6a版本,就好了。

看樣子,grub4dos從2009年末至今的更新都只有在 grub4dos.chenall.net 進行,然而這個網站上面也沒有明顯的文檔。
我在下載來的文檔夾里看到了readme:grub4dos-0.4.6a\docs\README_GRUB4DOS_CN.txt,但這裡面的內容有一點亂,不是很系統。比方說,微軟的bcdedit的ref文檔就比較好,
http://download.microsoft.com/do ... a/BCDedit_reff.docx
它在開頭有一些概念性、術語的介紹(Terminology),能幫助我們更好地理解。
但是在README_GRUB4DOS_CN.txt中,比方說,我想知道“map --mem (md)0x800+4 (99)”這一句什麼意思,我搜索了“(md)”,只能搜到一些例子,要自己再琢磨清楚比較困難。

問個題外話,大大們對grub2有接觸嗎?將來會不會是grub2更好用、更兼容呀?(我暫時還沒有對grub2多做了解,只是捕風捉影)
發表於 2016-7-2 13:13:51 | 顯示全部樓層
我之前說了... 原本是有...
但有換過網址... 所以之後沒有了...
目前更新是 http://grub4dos.chenall.net/

G4D 中 () 是用來表示裝置

() ... 目前(root)裝置

(fdx) ... 軟碟
(hdx) ... 硬碟
(hdx,x) ...  硬碟 和 分區
(cd) ... cd-rom
(xxx) ... 裝置位置 ... 上面的 fd hd cd 等 ... 實際上都有 裝置位置 像 hd0 大多是 0x80

下面是比較特殊的
(bd) ... 初始啟動裝置
(ud) ... ud區
(md) ... 記憶體
(rd) ... 隨機記憶體 或是 可以看成 ramdisk

詳細可以看...
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=374097

grub4dos 和 grub2 都是由 grub 轉變來的
grub4dos 基本上... 可以獨立看待... 和 grub grub2 分開來看
因為 grub4dos 增加了很多 grub grub2 未必有的功能...
grub grub2 有的功能是要靠 外部指令 ... 而 grub4dos 有些功能指令都內建了
例如 ... ramdisk
grub2 可能要用 syslinux 的 memdisk 這個外部指令(功能)
https://www.librehat.com/grub2-boot-windows-pe-and-otheriso-file/

所以實際上個人覺的 grub4dos 比較好用 (而且一樣可以執行外部指令)

不過 由於 grub4dos 只有 Legacy Bios 版
所以想用 UEFI ... 只能用 grub2 或是 其它 UEFI 開機管理
 樓主| 發表於 2016-7-4 17:37:58 | 顯示全部樓層

RE: 【討論】怎樣啟動vhd內的DOS系統?

阿達金田一 發表於 2016-7-2 13:13
我之前說了... 原本是有...
但有換過網址... 所以之後沒有了...
目前更新是 http://grub4dos.chenall.net/

grub4dos的命令太難了!實在是沒有那麼多精力去研究。我個人來說,最多只能是在有空的時候,通過看文檔這樣學習。若要通過嘗試來摸索,那將會花費多得多的精力!偏偏又沒有文檔!

感謝各位大大提供的幫助,我已經成功啟動dos系統了!

wusun給出的menu.lst我嘗試了“Discard Memory”那個選項,成功了。但“Save Memory”的還不敢嘗試。因為我看過這種文章:
终于知道ramdisk 4g是如何使用4G以上内存了,慎用!-远景论坛-微软极客社区
http://bbs.pcbeta.com/viewthread-413990-1-1.html
所以像這種修改內存地址的指令,我是不敢輕易嘗試的。就算在虛擬機中試了一次,成功了,也不能排除所有出錯的可能性。所以一定需要官方的文檔的理論支持才可以。但現在沒有文檔,所以我就不折騰了。反正我的目的已經達到了。

但是還有一些小問題:
1.這個vhd內的系統暫時還不能訪問我硬盤上的分區,只能識別他自己。是因為dos系統不能識別ntfs?還是因為它不能訪問vhd映像文件之外的分區?
2.在虛擬機內,shutdown命令正常,關機和重啟都行。但是作為vhd文件直接由電腦啟動(虛擬機外),只能正常重啟。當我關機時(也就是輸入shutdown,并按s之後),會顯示“couldn't shutdown no ATX maybe”。這應該是因為虛擬機的硬件驅動跟我實體機的硬件驅動不同的原因吧?(我這個vhd映像是在虛擬機內安裝的)
3.bootmgr是不是也可能引導vhd的任意系統呢?既然bootmgr可以引導grldr,那麼它是不是也可以以binary引導vhd呢?引用《bcdedit官方說明》上的一段話:
Boot Sector Application
Boot sector application allows the Windows Boot Manager to start a 16-bit real-mode loader application associated with a non-Windows operating system. There are no additional BCDEdit options for boot sector applications.
注:上面這個Boot Sector Application就是bootmgr引導grldr的方法。如下所示,我當前系統引導grldr的啟動項就是這樣的:
Real-mode Boot Sector
---------------------
identifier              {08fd13b3-3f96-11e6-ae44-005056c00008}
device                  partition=C:
path                    \grub\grldr
description             grub4dos
所以問題就是,那個“16-bit real-mode loader application”跟vhd(二進制硬盤鏡像)是不是一回事?bootmgr引導grldr難道不是映像?
難道bootmgr加載vhd只能加載當中的文件(mbr什麼的都被忽略了)?(僅僅是純理論探討)

關於您說的,“那些文件格式都是一樣的”,我覺得不太對呃。我參看了OSFMount官網上的一個表格:
Raw Image (.IMG, .DD)
Raw CD Image (.ISO, .BIN)
System Deployment Image (.SDI)
VMWare Image (.VMDK)
VHD Image (.VHD)
這些都是不同的。只有少數相同。
我還查到,光盤用的是cdfs。也就是說,如果要引導iso鏡像,引導程序一定要支持相應的格式才行。

再請教一個問題,就是各個win版本的pe有什麼區別?
目前有:xpe、03PE、win7pe、win8pe、win10pe等。
按我理解,是分別對應winxp、win2003、win7、win8、win10。
前面兩個太老了,從win7說起吧。
就我所知,win7比之前版本的優勢,比如:支持從vhd啟動(這其實就是用bootmgr替代了ntldr的結果)。再比如:fsutil的命令多了querycluster。
win8,由於我沒用過,只知道win8開始,支持vhdx,也就支持差分虛擬硬盤。而win7不支持。
win10,我就完全不知道了。求大神介紹~




發表於 2016-7-4 20:41:46 | 顯示全部樓層
本帖最後由 阿達金田一 於 2016-7-4 21:20 編輯
huhiha 發表於 2016-7-4 17:37
grub4dos的命令太難了!實在是沒有那麼多精力去研究。我個人來說,最多只能是在有空的時候,通過看文檔這 ...

你貼的那個 ramdisk 4g
我覺的主要是針對 windows 中使用 ramdisk 時 ( 它裡面都說 api 了...那就是在 win )

簡單的說...就是 XP ( x86 win ) 時... 因為只吃到 4G
所以早期有一種用 ramdisk 來吃(使用) 4G 後記憶體的方法

但因為該主題說的 ramdisk 4G 問題... 所以很有可能會導致不可預期的錯誤
該問題...簡單說的就是 ramdisk 程式 佔用到 硬體 或 其它程式 使用的 記憶體 部份 ... 而造成衝突
其實這個問題發生的機率不大...
要細說的話有點小複雜
x64 系統... 基本上可以使用超過 4G ... 所以沒必要用 ramdisk 去吃 4G 後... 而且應該也吃不到
ramdisk 吃 4G後... 主要是針對 系統 只能吃 4G 的情況 (多為 XP 或 x86 系統)
而 ramdisk+PAE 會去使用無法直接使用的 4G後 記憶體 (通常這是可選擇的...)
而 硬體 佔用 記憶體 是從 後到前 ... http://coolpc.com.tw/phpBB2/view ... 2249&st=0&sk=t&sd=a
也就是 記憶體大於 4G + 系統只吃4G + 發生重疊(overlap) ... 時... ramdisk 佔用 4G 後... 才有可能會出問題

另外 Win 虛擬裝置 和 grub4dos 虛擬裝置 並不一樣 ...
而且 grub4dos 應該也會避開 硬體佔用的部份...因為它不是用 win api 去處理
而是用 Bios 去存取 記憶體 ...

至於小問題
1.
dos 本來就不支援 ntfs ... 不過是有讓 dos 支援 ntfs 的程式
只是 ntfs 有版本問題... 所以支援 ntfs 的 dos 程式 也不知道是否可以支援較新的 NTFS
目前另外 dos ... 大多是給一些 dos 上跑的工具 ... 而這些工具大多的磁碟工具
像 spfdisk ghost diskgen MHDD 等等
而通常 這些 工具程式 ... 是直接處理 磁區 ... 而不是檔案
而能 處理檔案 的是 工具程式 本身自帶的 檔案系統 判斷... 而不是依懶 dos

2.
shutdown 指令 是指 windows 的那個 shutdown
還是你 dos 中自帶的 shutdown 程式
如果是後者... 硬體有關係(但不是驅動)... 那個 dos 的 shutdown 也有關係
dos 本身其實並沒有太多驅動
除了 記憶體相關的 主要是 himem.sys emm386.exe
和 基本 io ( keyboard )... io.sys 外...
其它則是大都是外部指支援 ... 像要支援 滑鼠 可能就是執行一個 mouse.com
所以... dos 本身並沒有 電源管理 ...
所以 dos 如果要 shutdown 功能... 就是去執行外部的 shutdown 程式
而 shutdown 程式 就要看 程式 本身的支援 ( 這可能是調用 bios )

3.
覺的你最好先去 新手村 看一下開機的概念

這個其實我前面有提到一點... 就是 root
bootmgr 並不能 引導 vhd 任意系統 ... 因為 bootmgr 不會 root 到 vhd

bootmgr 去載入 grub4dos ... 只是把 開機管理 換成 grub4dos
所以實際就是 grub4dos 在開機... 因此

bootmgr -> grldr -> dos ... 實際上 dos 是用 grub4dos 來 載入+開機 ... 而不是 bootmgr
grub4dos 倒是可以引導 vhd 的任意系統 ( 前題是 固定大小 的 vhd )
因為 grub4dos 可以重新 root

bootmgr 的真實模式 其實和 grub4dos 的 chainloader 有點像
其實就是換個 開機程序
例如 ... 在一個 硬碟 上 ... 先裝 linux ... PBR 是被寫入 Linux 的 開機程序
如果把 PBR 存成一個檔案(例如 Linux.PBR ) ...再灌 win ... PBR 會被寫入 win 的 開機程序
但可以用 win 的 bootmgr 去載入 Linux.PBR ... 使用 Linux 的 PBR 開機程式
這樣就可以用 Linux 開機

那重點來了...前面說的... 開機 都是指 root
(hd0,0) 開機... root 就是 (hd0,0)
grub4dos 可以重新 root 所以...在 map vhd 時 ... 最後可以用 root
例如 ...
假設先用 (hd0,0) 開機進入 grub4dos
而 grub4dos 執行以下指令
map (hd0,0)/dos.vhd (hd32)
map --hook
root (hd32,0)
chainloader +1
boot

把 dos.vhd 掛到 (hd32)
設定 root 為 (hd32,0)
chainloader +1 載入 (hd32,0) 的 PBR
如果沒有 root 可能開機就會失敗...

也就是上述的流程就是
root (hd0,0) -> grub4dos -> root (dos.vhd) -> dos.vhd PBR

但 bootmgr 並不會做 root ...
那怕你把 vhd 的 PBR 存成檔案 (例如 dos.pbr) 然後 bootmgr 用真實模式載入
root (hd0,0) -> bootmgr -> dos.vhd -> dos.pbr
由於沒有 root dos.vhd ... 所以無法 dos vhd 開機

而 bootmgr 轉 grub4dos 其實還是 grub4dos 在開機
root (hd0,0) -> bootmgr  -> grub4dos -> root (dos.vhd) -> dos.vhd PBR

真實模式 ... 是執行一個 Bios 程式
Bios 程式大多為開機程式... 但也有一些是工具程式 像 bootmgr 也有 memtest.exe

16-bit real-mode loader application 你或可翻成
16位元 真實模式 加載 應用程序

所以 真實模式 和 vhd 是2回事
grldr 就是 grub4dos 本體... grub4dos 就是一個 bios程式

另外我並沒有說 “那些文件格式都是一樣的”
只是說 vhd .vfg .img .ima 都可以 ...
主要是 檔案內容... 實際上 vhd .vfg .img .ima 都可以是 2進制映像
所以如果都是 2進制映像...那其實不就是都一樣
只是 vhd 也有 動態大小 的格式... 使用 動態大小 時...就不是 2進制映像

所以我說 副檔名 是給人看的
例如
.iso 是代表這個檔案是 iso 的映像
但 .bin 只是代表這個檔案是 2進制映像
.img 只是代表這個檔案是 映像(image)
.ima 只是代表這個檔案是 軟碟映像(image)
.vhd  只是代表這個檔案是 MS 的 虛擬HD
.vmdk 只是代表這個檔案是 VM 的 虛擬HD
.vdi 只是代表這個檔案是 vbox 的 虛擬HD

.vdi .vmdk 是 虛擬PC程式 在用的 就不討論
基本上 .bin .iso .img .ima ...其實大多是 2進制映像(bin)
.vhd 則看是用那個儲存類型... 固定大小 類型...也是用 bin 來儲存 (只是檔案尾會有額外的資料)

而 bin ... 2進制映像...說穿了
就是以 磁區 來儲存... 依磁區順序(LBA) 儲存 全部磁區
所以是什麼東西的 映像 一點也不重點
像 光碟bin 硬碟bin 軟碟bin ... 都是 bin
副檔名要取什麼都可以...你要取 .ABC 也可以
grub4dos 照樣可以掛載
主要還是 檔案內容 是不是 bin

例如
光碟bin ... 副檔名常用的就是 .bin .iso .img
硬碟bin ... 副檔名常用的就是 .bin .img ... (整顆硬碟...也就是包含 分割表)
分割區bin(軟碟bin) ... 副檔名常用的就是 .bin .img .ima ... (也就是單一 磁碟 的 bin)

而 grub4dos map ... 可以 虛擬裝置 並 映射到 bin ( 而 bin 也可以加載到 ram )
而各種裝置有自己的 開機流程 ... 當然也有各自的 開機引導
開機光碟 (iso) ... 開機引導 自然在 光碟(iso) 中

CDFS ...
https://zh.wikipedia.org/wiki/ISO_9660

CDFS 其實就是 CD FS ... CD File System ... 光碟檔案系統
而實際上 光碟 也有別的 FS ... 例如 UDF ... ( NT6 的 Win 官方光碟大多是用 UDF 格式 )
https://zh.wikipedia.org/wiki/%E ... F%E6%A0%BC%E5%BC%8F

但對 bin 來說...都只是 2進制映像 ... 對 grub4dos 來說就是把 bin 掛載上去而以...
您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

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

GMT+8, 2025-11-4 13:37 , Processed in 0.803695 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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