在Linux VPS上DD安装Windows通用教程

本文是萌咖大大写的《从零开始:在Linux上覆盖安装WINDOWS通用教程(dd)》,教程非常简单易懂,相信对于从来没有接触过的新手也能很快上手,在Linux VPS上DD安装Windows系统。以下为原文。


本例所给的wget后链接均可用,教程是完整的.
环境 DigitalOcean 512M Debian8 x64
目标 Windows Think PC (Windows 7 Embedded)

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

  1. 宿主机提供的VNC
  2. 能够随意更换内核(OpenVZ构架无法更换内核)
  3. GURB引导启动

一、准备工作

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


二、制作可用的镜像文件(这一步不喜欢折腾的可以直接用下面现场的镜像):

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

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

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

  1. 以管理员身份打开命令提示符,然后输入:
  2. diskpart
  3. CREATE VDISK FILE="D:\win.vhd” TYPE=FIXED MAXIMUM=5120
  4. SELECT VDISK FILE="D:\win.vhd”
  5. ATTACH VDISK
  6. CLEAN
  7. CREATE PARTITION PRIMARY
  8. FORMAT FS=NTFS QUICK
  9. ASSIGN LETTER=V

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

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

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

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

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

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

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


三、更新grub配置文件

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

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

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

  • 如果GRUB的配置文件为’grub.cfg’,在文件的末尾添加:
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’:

3.3 获取本机的IP,子网掩码,网关并记录下来,一般控制台最下面有这些参数,如果没办法获取到这三项参数,可以用以下命令获取:

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. "
}

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


四、安装WINDOWS镜像:

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

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

4.2 使用ls /dev命令可查看硬盘状况

可知DigitalOcean机器的硬盘为’/dev/vda

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

wget -qO- https://moeclub.org/get-win7embx86 |gunzip -dc |dd of=/dev/vda
    • 待完成后,输入reboot命令
      就可看到久违的WINDOWS启动界面.按照正常步骤安装.
    • 安装完成后,如果没有网络,你需要自行完善网络配置.
    • 远程桌面服务如果没有意外,我提供的镜像会自动打开.

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

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


五、一点补充

用这个教程DD了Windows系统后,我们就可以使用nt6 hdd installer重装任何你想安装的纯净Windows系统了。

nt6 hdd installer教程可以看这里:http://www.iplaysoft.com/nt6-hdd-installer.html

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: