2025-06-22 11:00:29 女排世界杯美国

[转]从零开始:在Linux上覆盖安装WINDOWS通用教程(dd)

完整自制尚不方便,还有许多改进的地方.现在可以达到在单硬盘,无救援模式的情况下安装Winodws.再也不需要强制要求内存大于镜像包大小了.

本例所给的wget后链接均可用,教程是完整的.

(原文链接:https://moeclub.org/2017/08/31/361/)

环境 DigitalOcean 512M Debian8 x64 目标 Windows Think PC (Windows 7 Embedded)

此教程适用于具有以下特征的机器:

宿主机提供的VNC

能够随意更换内核

GURB引导启动

准备工作:

较高版本的WINDOWS主机 (提供高版本的DISM API)

Windwos原版镜像 (个人版,企业版 服务器版)

DISM++ (打补丁,制作镜像)

以下步骤在DigitalOcean上测试成功:

制作可用的镜像文件:

下载镜像:下载地址个人版,企业版 服务器版

提取install.wim文件:解压或挂载都行,提取该文件到’E:\install.wim‘.文件路径\sources\install.wim

创建一个vhd虚拟磁盘:示例:盘符为’V‘,路径为’D:\win.vhd‘,大小为5120M.

以管理员身份打开命令提示符,然后输入:

diskpart

CREATE VDISK FILE=”D:\win.vhd” TYPE=FIXED MAXIMUM=5120

SELECT VDISK FILE=”D:\win.vhd”

ATTACH VDISK

CLEAN

CREATE PARTITION PRIMARY

FORMAT FS=NTFS QUICK

ASSIGN LETTER=V

在D盘创建一个文件夹’D:\MOUNT‘,打开DISM++点文件–>挂载映像–>点第一个浏览,找到’E:\install.wim‘–>点第二个浏览,找到’D:\MOUNT‘–>不选中只读模式–>确定

在DISM++里进行优化,安装语言包,添加VirtIO驱动等操作备份下载VirtIO驱动

完成后,点文件–>另存为映像–>保存在’D:\install.wim‘,等待任务完成

点文件–>释放映像–>点第一个浏览,找到’D:\install.wim‘–>点第二个浏览,找到’V:\‘–>只选中添加引导和格式化–>确定–>在弹出的’引导修复-BIOS’对话框中点击更多–>找到盘符为V的磁盘分区–>确定

等待完成,在资源管理器中,在盘符为V的磁盘分区点击右键–>弹出.如有报错请认真看以上步骤.

使用gunzip工具压缩打包压缩’D:\win.vhd‘用法:gzip.exe -k9 D:\win.vhd.等待压缩完成.可点击gunzip for windows下载工具,或使用备份下载链接下载此工具.解压文件,将’bin‘目录中的文件放置’%WINDIR%/SYSTEM32‘文件夹中,即可方便在命令提示符中使用.实际上刚刚得到的’D:\win.vhd‘就是一个可直接dd的文件.

上传到可用HTTP直接下载的地方,最好不要包含跳转.

更新grub配置文件:

下载 Debian netboot mini.iso 到’/boot‘文件夹内.

1

wget -qO /boot/mini.iso https://moeclub.org/get-deb-livecd

在/boot文件夹/子目录内寻找GRUB配置文件.

如果GRUB的配置文件为’grub.cfg’:在文件的末尾添加

1

2

3

4

5

6

menuentry "Boot mini" {

set isoimage="/boot/mini.iso"

loopback loop (hd0,1)$isoimage

linux (loop)/linux auto=true LANG=en_US.UTF-8 KEYTABLE=us netcfg/dhcp_options="Configure network manually" netcfg/dhcp_failed=note netcfg/get_nameservers=8.8.8.8 hostname=MoeClub domain=MoeClub.org -- quiet

initrd (loop)/initrd.gz

}

如果GRUB的配置文件为’grub.conf’:

获取本机的IP,子网掩码,网关并记录下来.一般控制台最下面有这些参数.如果没办法获取到这三项参数,可以用以下命令获取.代码片段摘自 Debian(Ubuntu)网络安装/重装一键脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

DEFAULTNET="$(ip route show |grep -o 'default via [0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.*' |head -n1 |sed 's/proto.*\|onlink.*//g' |awk '{print $NF}')"

[ -n "$DEFAULTNET" ] && IPSUB="$(ip addr |grep ''${DEFAULTNET}'' |grep 'global' |grep 'brd' |head -n1 |grep -o '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}/[0-9]\{1,2\}')"

IPv4="$(echo -n "$IPSUB" |cut -d'/' -f1)"

NETSUB="$(echo -n "$IPSUB" |grep -o '/[0-9]\{1,2\}')"

GATE="$(ip route show |grep -o 'default via [0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' |head -n1 |grep -o '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}')"

[ -n "$NETSUB" ] && MASK="$(echo -n '128.0.0.0/1,192.0.0.0/2,224.0.0.0/3,240.0.0.0/4,248.0.0.0/5,252.0.0.0/6,254.0.0.0/7,255.0.0.0/8,255.128.0.0/9,255.192.0.0/10,255.224.0.0/11,255.240.0.0/12,255.248.0.0/13,255.252.0.0/14,255.254.0.0/15,255.255.0.0/16,255.255.128.0/17,255.255.192.0/18,255.255.224.0/19,255.255.240.0/20,255.255.248.0/21,255.255.252.0/22,255.255.254.0/23,255.255.255.0/24,255.255.255.128/25,255.255.255.192/26,255.255.255.224/27,255.255.255.240/28,255.255.255.248/29,255.255.255.252/30,255.255.255.254/31,255.255.255.255/32' |grep -o '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}'${NETSUB}'' |cut -d'/' -f1)"

[ -n "$GATE" ] && [ -n "$MASK" ] && [ -n "$IPv4" ] || {

ipNum() {

local IFS='.'

read ip1 ip2 ip3 ip4 <<<"$1"

echo $((ip1*(1<<24)+ip2*(1<<16)+ip3*(1<<8)+ip4))

}

SelectMax(){

ii=0

for IPITEM in `route -n |awk -v OUT=$1 '{print $OUT}' |grep '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}'`

do

NumTMP="$(ipNum $IPITEM)"

eval "arrayNum[$ii]='$NumTMP,$IPITEM'"

ii=$[$ii+1]

done

echo ${arrayNum[@]} |sed 's/\s/\n/g' |sort -n -k 1 -t ',' |tail -n1 |cut -d',' -f2

}

[[ -z $IPv4 ]] && IPv4="$(ifconfig |grep 'Bcast' |head -n1 |grep -o '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' |head -n1)"

[[ -z $GATE ]] && GATE="$(SelectMax 2)"

[[ -z $MASK ]] && MASK="$(SelectMax 3)"

}

PubIPv4="$(wget -qO- checkip.amazonaws.com)"

[ -n "$IPv4" ] && [ -n "$PubIPv4" ] && {

[ "$IPv4" != "$PubIPv4" ] && IPv4="$(echo "$IPv4; $PubIPv4")"

}

[ -n "$GATE" ] && [ -n "$MASK" ] && [ -n "$IPv4" ] && {

echo -e "IPv4:\t\033[33m$IPv4\033[0m\nMASK:\t\033[33m$MASK\033[0m\nGATE:\t\033[33m$GATE\033[0m"

} || {

echo "Error! Not found network config. "

}

进入VNC界面,然后在SSH终端输入重启命令.在VNC界面中可以看到启动菜单,选择’Boot mini‘

安装WINDOWS镜像:

此时进入Debian的安装界面,注意对话框顶部.

如果出现的是Download debconf preconfiguration file请按两次ESC键,选择倒数第二个:Execute a shell选中Continue,并按回车

如果出现的是Configure the network请按要求填入网络参数,等待出现Download debconf preconfiguration file按两次ESC键,选择倒数第二个:Execute a shell选中Continue,并按回车

使用ls /dev命令可查看硬盘状况可知DigitalOcean机器的硬盘为’/dev/vda‘

接下使用dd命令进行应用镜像,也可以使用自己的镜像.

1

wget -qO- https://moeclub.org/get-win7embx86 |gunzip -dc |dd of=/dev/vda

待完成后,输入reboot命令就可看到久违的WINDOWS启动界面.按照正常步骤安装.

安装完成后,如果没有网络,你需要自行完善网络配置.

远程桌面服务如果没有意外,我提供的镜像会自动打开.

提示:在安装步骤时鼠标位置不好找,可能不太适应.请尝试使用空格键回车键Tab键方向键进行操作.

在磁盘管理中,点击’C‘盘,右键选择’扩展卷‘,可以直接’增加‘C盘的空间.

后记:

你可以在装有Hyper-V的机器上,挂载这个vhd镜像,然后完成安装步骤,优化.再进行压缩vhd镜像,然后dd安装.可能效果更佳.

文章只是提供一个思路,和实现的例子.更多期待你们去尝试.

提供一些可直接使用的镜像

Windows Embedded 8.1 x86

1

wget -qO- https://moeclub.org/get-win8.1embx86 |gunzip -dc |dd of=/dev/vda

他因《哥只是个传说》一夜爆红,为救女友废了一条腿,如今成这
十大好用的手机克隆APP 一键换机助手排名 手机搬家软件哪个好→MAIGOO生活榜
top