无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4509|回复: 12
打印 上一主题 下一主题

[求助] 比较困扰的问题,如何不用wimtool或者win$man安装install.wim

[复制链接]
跳转到指定楼层
1#
发表于 2014-8-30 18:19:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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
2#
发表于 2014-8-30 20:55:22 | 只看该作者
为什么非要在linux下? linux下能解开wim?

点评

linux可以解开wim的,有个开源项目叫wimlib  发表于 2014-9-4 11:31
回复

使用道具 举报

3#
发表于 2014-8-30 21:00:25 | 只看该作者
本帖最后由 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盘(看分区卷标比较容易认)
回复

使用道具 举报

4#
发表于 2014-8-30 21:16:03 | 只看该作者
不行的!

BCD文件中的启动配置是与机器一一对应的,见其中的GUID一项,不仅仅是路径要正确那么简单。将BCD从一台机器复制到另一台机器上根本没有用,需要重新配置。

当然你可以将其他预启动文件(如BOOTMGR文件,BOOT文件夹及其所属文件)先弄进INSTALL.WIM,但在文件解开后你必须先用BOOTICE等配置好BCD再重启完成安装。

你完全可以在PE中线解开INSTALL.WIM,然后用BCDBOOT命令创建预启动文件,再重启继续安装过程,这样就不必手动配置BCD了。

点评

笔趣阁http://www.bookdg.com  发表于 2014-9-3 14:23
回复

使用道具 举报

5#
 楼主| 发表于 2014-8-30 21:18:30 | 只看该作者
本帖最后由 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

点评

对于MBR UUID只有4个有效字节(即磁盘上存储的), 如 BE AC 7F 06 (书写顺序可能不同) 其余字节是OS自己按自己的规则追加的。  详情 回复 发表于 2014-9-4 06:09
回复

使用道具 举报

6#
 楼主| 发表于 2014-8-30 21:31:34 | 只看该作者
嗯, 确实 如果从别人那边复制BCD的话,还需要在本台机器在windows下修复这个BCD的。
回复

使用道具 举报

7#
 楼主| 发表于 2014-8-30 22:28:36 | 只看该作者
本帖最后由 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"



好有成就感。。。都是靠猜跟实验得来
回复

使用道具 举报

8#
 楼主| 发表于 2014-9-2 15:30:41 | 只看该作者
我又来了。

上次那个 BCD引导算是进去了, 但是进去系统安装的时候,到了“更新注册表...” 的时候,提示安装失败,然后重启了。

重启后又继续重新开始安装系统,还是在更新注册表的时候失败。
我ntfs是用 ntfsprog 格式化的, linux下虽然可以解压,但是无法设置ntfs权限以及系统跟隐藏属性。会不会跟这个有关
回复

使用道具 举报

9#
发表于 2014-9-4 06:09:56 | 只看该作者
atmouse 发表于 2014-8-30 21:18
谢谢你们的回答

我不是要修复windows,我已经有winpe了,我主要是想整理一个纯linux环境安装windows的方 ...

对于MBR UUID只有4个有效字节(即磁盘上存储的), 如 BE AC 7F 06   (书写顺序可能不同)
其余字节是OS自己按自己的规则追加的。



回复

使用道具 举报

10#
发表于 2014-9-4 12:27:16 | 只看该作者
我觉得ntfs权限很重要, 系统/隐藏属性还好吧, 应该没事
回复

使用道具 举报

11#
发表于 2014-9-4 20:08:53 | 只看该作者
樓主對細節部分瞧得真仔細...

回到主題所要求...
可試試完全不同的方法...

yaojy大的新版RamOS...
[原创] [中秋贺礼]最新版Win8.1Update2的PE(RamOS)网络加强版
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
在此RamOS下...直接對windows安裝光碟.setup.exe就能安裝了...
參考!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 07:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表