无忧启动论坛

标题: 比较困扰的问题,如何不用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开始,

  1. root@ArchCC /home/atmouse # fdisk -l /dev/sdc

  2. Disk /dev/sdc: 298.1 GiB, 320072933376 bytes, 625142448 sectors
  3. Units: sectors of 1 * 512 = 512 bytes
  4. Sector size (logical/physical): 512 bytes / 512 bytes
  5. I/O size (minimum/optimal): 512 bytes / 512 bytes
  6. Disklabel type: dos
  7. Disk identifier: 0x067facbe

  8. Device     Boot Start       End   Sectors Size Id Type
  9. /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