无忧启动论坛
标题:
比较困扰的问题,如何不用wimtool或者win$man安装install.wim
[打印本页]
作者:
atmouse
时间:
2014-8-30 18:19
标题:
比较困扰的问题,如何不用wimtool或者win$man安装install.wim
本帖最后由 atmouse 于 2014-8-30 20:13 编辑
我是个linux用户,对于pe有所了解,windows的引导过程也有所了解。
按照我的理解,bios模式的win7安装。 grub引导bootmgr,找到bcd,bcd里面指明磁盘分区以及 winload.exe 就可以启动系统。
前几步好做,但是到了我从install.wim解压后发现里面没有BCD,系统盘镜像boot下的bcd也只是启动到boot.wim这个windows 初始环境pe,这边应该是用bcdboot C: 这样的命令来修复windows的引导吧? 问题来了,我linux系统下无法修复BCD,所以我手动安装windows nt6就卡在这一步。
或者我如何脱离想要安装的机器,在别的地方利用bootice这种工具编辑一个bcd复制进去?
add:
我从网上搜到一个相同的问题,但是没有解决,不过提到了BCD是windows 注册表格式,这应该如何操作
https://neosmart.net/forums/showthread.php?t=4818
作者:
2013gdh
时间:
2014-8-30 20:55
为什么非要在linux下? linux下能解开wim?
作者:
2013gdh
时间:
2014-8-30 21:00
本帖最后由 2013gdh 于 2014-8-30 21:07 编辑
如果实在没条件, 最简化的修复引导:
假设Win7系统盘在C盘, 或者是linux下的某个文件夹, 比如/media/sda1, 看做C盘就行
把安装光盘根目录的bootmgr 复制到C:\, 别的版本的bootmgr也行, 不用纠结版本或者32/64位的问题, 对于win7来说没区别 (不过win7的bootmgr貌似不能引导win8)
然后在C:\建立文件夹Boot, 复制一个bcd文件到C:\Boot\, 也就是, 复制后, C:\Boot\BCD是个256K或者20K/24K等大小的未知格式文件
理论上这时候bcd文件对了就能启动
BCD需求: 在WinPE或者别人的机子里, 用bootice创建一个bcd文件, 添加win7/vista/8启动项, 设备类型选Partition, 启动磁盘Boot,
启动文件\Windows\system32\winload.exe, 系统路径\Windows, 然后保存设置
注意设置C盘为活动分区, 同时设置mbr为NT6, pbr为bootmgr引导程序, 就好了
这要求C盘是主分区, 如果是C盘是逻辑分区, 那\bootmgr和\BOOT\BCD这两个文件要放到活动主分区里,
然后用U盘进winPE, 用bootice指定bcd文件的启动磁盘为具体看到的硬盘名字, 启动分区选C盘(看分区卷标比较容易认)
作者:
captain_g
时间:
2014-8-30 21:16
不行的!
BCD文件中的启动配置是与机器一一对应的,见其中的GUID一项,不仅仅是路径要正确那么简单。将BCD从一台机器复制到另一台机器上根本没有用,需要重新配置。
当然你可以将其他预启动文件(如BOOTMGR文件,BOOT文件夹及其所属文件)先弄进INSTALL.WIM,但在文件解开后你必须先用BOOTICE等配置好BCD再重启完成安装。
你完全可以在PE中线解开INSTALL.WIM,然后用BCDBOOT命令创建预启动文件,再重启继续安装过程,这样就不必手动配置BCD了。
作者:
atmouse
时间:
2014-8-30 21:18
本帖最后由 atmouse 于 2014-8-30 21:23 编辑
谢谢你们的回答
我不是要修复windows,我已经有winpe了,我主要是想整理一个纯linux环境安装windows的方法,wim可以用7z解压
3楼的方法肯定不可以会提示 "/boot/BCD 0x00000225" 错误,因为BCD的硬盘启动方式,启动分区是要指定UUID也就是唯一分区标识,不同硬盘是不一样的, 但是winpe就不用指定,因为winpe是从ramdisk启动。
根据我的折腾, 知道了 BCD是windows注册表单元格式(我不知道什么结构以及怎么读取),
而编辑BCD其实我是卡在 APPLICATION 跟 OSDEVICE这两个键值, 因为 windows下,每个磁盘分区盘符都对应一个UUID,而这个UUID是二进制的,在注册表HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices下。
那些修改BCD工具的比如 bcdedit set {default} osdevice=C: 其实这里的值是从windows读取注册表得到的,然后写入BCD,
但是我不知道BCD的数据结构,而且也不知道windows是注册表是如何获取那个唯一表示UUID。
测试的时候,我用bootice工具创建一个空bcd,两个数值大概在偏移1ab4 跟 1ba4 左右,数据结构也许某大神比如bootice作者能告诉我。
uuid的话,linux下 blkid命令可以看到,不过貌似跟windows二进制uuid有点不一样, linux下是 PARTUUID="067facbe-01", 而windows有12个字节
BE AC 7F 06 00 00 10 00
00 00 00 00
作者:
atmouse
时间:
2014-8-30 21:31
嗯, 确实 如果从别人那边复制BCD的话,还需要在本台机器在windows下修复这个BCD的。
作者:
atmouse
时间:
2014-8-30 22:28
本帖最后由 atmouse 于 2014-8-30 22:30 编辑
我终于知道 那个windows这个 二进制值是怎么出来的。 12个字节,
前4个字节是分区的UUID已经知道了,是硬盘的UUID,硬盘偏移是 0x1b8 读取到的是 0x067facbe ,跟blkid一样
root@ArchCC /home/atmouse # hexdump -C -n $((64*512)) /dev/sdc | grep -i "be ac"
000001b0 65 6d 00 00 00 63 7b 9a be ac 7f 06 00 00 80 20 |em...c{........ |
后面8个字节是 那个分区所在的便宜,通过二进制算的 因为我上面那个分区的头是从2048开始,
root@ArchCC /home/atmouse # fdisk -l /dev/sdc
Disk /dev/sdc: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x067facbe
Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 2048 104890369 104888322 50G 7 HPFS/NTFS/exFAT
复制代码
就是hex(2048*512) = 0x100000 前面补零就是 0x0000000000100000
所以,完整的
"BE AC 7F 06 00 00 10 00
00 00 00 00"
好有成就感。。。都是靠猜跟实验得来
作者:
atmouse
时间:
2014-9-2 15:30
我又来了。
上次那个 BCD引导算是进去了, 但是进去系统安装的时候,到了“更新注册表...” 的时候,提示安装失败,然后重启了。
重启后又继续重新开始安装系统,还是在更新注册表的时候失败。
我ntfs是用 ntfsprog 格式化的, linux下虽然可以解压,但是无法设置ntfs权限以及系统跟隐藏属性。会不会跟这个有关
作者:
mdyblog
时间:
2014-9-4 06:09
atmouse 发表于 2014-8-30 21:18
谢谢你们的回答
我不是要修复windows,我已经有winpe了,我主要是想整理一个纯linux环境安装windows的方 ...
对于MBR UUID只有4个有效字节(即磁盘上存储的), 如 BE AC 7F 06 (书写顺序可能不同)
其余字节是OS自己按自己的规则追加的。
作者:
2013gdh
时间:
2014-9-4 12:27
我觉得ntfs权限很重要, 系统/隐藏属性还好吧, 应该没事
作者:
peterpanheaven
时间:
2014-9-4 20:08
樓主對細節部分瞧得真仔細...
回到主題所要求...
可試試完全不同的方法...
yaojy大的新版RamOS...
[原创] [中秋贺礼]最新版Win8.1Update2的PE(RamOS)网络加强版
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
在此RamOS下...直接對windows安裝光碟.setup.exe就能安裝了...
參考!!
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/)
Powered by Discuz! X3.3