上一篇文章基本已经总结了相关方法,但其中 deepin 中安装 Windows 部分的方法,只在 UEFI 模式下有效,彷佛不太广泛适用。最近想到能够用其余方法来处理此问题。linux
操做系统:deepin 15.11oop
宿主环境:主要为 VirtualBox 虚拟机,部分为物理机(戴尔笔记本)。测试
将 Windows ISO 文件中的内容复制到 ntfs 分区(主分区,fat32 分区也能够)根目录。稍后系统也将安装在此分区。固然,若担忧混淆,可另建分区用来安装系统。操作系统
下载 grub4dos,将其中的 grldr 和 menu.lst(可自建)放到 ntfs 分区根目录。这里再也不直接用 grub2 引导安装文件,而是经过 grub2 引导 grub4dos(适用于 MBR 分区表),再由 grub4dos 引导安装文件。.net
在 menu.lst 文件中写入以下内容:code
title Windows Installer root (hdx,y) chainloader /bootmgr
root 定义为 ntfs 分区。其中 x 从 0 开始,y 从 0 开始。blog
在 /etc/grub.d/40_custom 中添加以下内容:get
menuentry "grub4dos" { insmod part_msdos insmod ntfs insmod ntldr set root=(hdx,y) ntldr /grldr }
root 定义为 ntfs 分区。其中 x 从 0 开始,y 从 1 开始。虚拟机
终端执行 sudo update-grub,更新引导项。it
重启选择引导项 grub4dos 便可。
若是安装 Windows 后 deepin 引导项丢失,也能够反过来用 grub4dos 引导 grub2。
将 grldr 和 menu.lst 放到 Windows 所在分区根目录。
在 bootice 的 bcd 智能编辑功能中添加一个 grub/linux 引导项,将引导内容从 grldr.mbr 改成 grldr 便可。
在 menu.lst 文件中写入以下内容:
title grub2 root (hdx,y) kernel /boot/grub/i386-pc/core.img
root 为 deepin 所在分区。其中 x 从 0 开始,y 从 0 开始。
重启,选择 deepin。进入系统后,终端执行
sudo update-grub sudo grub-install /dev/sda
更新引导项,修复主引导记录。
重启便可看到 grub 中 Windows 的引导菜单了。
最后,记得删除 /etc/grub.d/40_custom 中添加的内容,在终端执行 sudo update-grub,消除引导项。
若是添加了临时分区,记得删除并将空间合并到其余分区。
将 Windows ISO 文件中的内容复制到 FAT32 分区(临时分区)根目录。
这里再也不直接用 grub2 引导安装文件,而是改用 efibootmgr 来添加 UEFI 引导项。固然了,效果是同样的,这里只是换个思路而已。efibootmgr 在 deepin 中默认已安装 。
sudo efibootmgr -c -w -L “Windows” -d /dev/sda -p 1 -l \\efi\\boot\\bootx64.efi
其中
重启开机时按 DEL、ESC 等键进入 UEFI BIOS 设置界面,选中刚才添加的引导项肯定便可开始安装。
安装后经过重启开机按 DEL、ESC 等键进入 deepin,在终端执行 update-grub 更新 grub2 引导项。这样 grub 菜单中就有 Windows 的引导项了。之后从 Windows 重启可能仍是启动 Windows,但关机的话就看到 grub 菜单了。
最后删除刚添加用于安装系统的 UEFI 引导项
efibootmgr sudo efibootmgr -b 0001 -B
其中 0001 是要删除的引导项编号。
删除刚才建立的临时分区,将空间合并到其余分区。
当前系统 | 测试系统 | UEFI 模式 | Legacy 模式 | 备注 |
---|---|---|---|---|
deepin | Win 7 | x | √ | UEFI 到 Starting Windows 就不动了 |
deepin | Win 10 | √ | √ |
忽然想起来,Linux 下可能通常用户没办法从 Windows ISO 中复制出文件来。毕竟 Windows 的 ISO 可能是 UDF (iso-13346)格式镜像,而 Linux 通常默认为 iso-9660,因此没法直接解压,须要特别的压缩软件才行。
其实能够将 ISO 文件做为 loop 设备挂载到系统目录中,挂载时加入格式参数就能够了。例如,在文件管理器中 ISO 文件所在目录,右键打开终端,用以下命令挂载:
mkdir ./iso sudo mount -t udf -o loop filename.iso ./iso
挂载后就能够复制了。