deepin 与 Windows 双系统硬盘安装方法总结
Tofloor
poster avatar
走钢丝
deepin
2019-09-05 19:06
Author
本帖最后由 lidanger 于 2019-10-12 23:20 编辑

本文主要是网上搜索到的信息经过多次试验得到的结果,文末包含部分 U 盘安装工具的测试。另外,UEFI 模式下安装 deepin 时发现,deepin 15.11 对 efi 分区的要求没那么高,300 M 足够了。


测试环境

操作系统:deepin 15.11
宿主环境:主要为 VirtualBox 虚拟机,部分为物理机(戴尔笔记本)。

deepin 中安装 deepin

可以直接通过 grub2 引导 ISO 文件:

  • 将 ISO 文件放在非安装分区
  • 修改 /etc/grub.d/40_custom,在最后添加引导菜单定义
  • 终端执行 sudo update-grub,更新 grub 引导项

其中 /etc/grub.d/40_custom 中添加的内容如下:

Legacy 模式

直接安装

  1. menuentry 'deepin installer' {
  2.     set root=(hdx,y)
  3.     set isofile="/deepin-15.11-amd64.iso"
  4.     loopback loop $isofile
  5.     linux (loop)/live/vmlinuz findiso=${isofile} boot=live components quiet splash union=overlay livecd-installer locales=zh_CN.UTF-8
  6.     initrd (loop)/live/initrd.lz
  7. }
Copy the Code

failsafe 模式

  1. menuentry 'deepin installer' {
  2.     set root=(hdx,y)
  3.     set isofile="/deepin-15.11-amd64.iso"
  4.     loopback loop $isofile
  5.     linux (loop)/live/vmlinuz findiso=${isofile} boot=live components memtest noapic noapm nodma nomce nolapic nomodeset nosmp nosplash vga=normal union=overlay locales=zh_CN.UTF-8
  6.     initrd (loop)/live/initrd.lz
  7. }
Copy the Code

这里默认为 MBR 分区表,如果为 GPT,菜单项定义第一行应为 set root=(hdx,gpty)。其中 x 从 0 开始,y 从 1 开始。即第一个块硬盘第一个分区。具体的可以在重启出现 grub 菜单时按 c 键进入控制台,输入命令 ls 即可得知。
第二行,以第一行定义的 root 分区为根目录,为 ISO 文件位置定义了一个可复用的变量,此变量在下面两行都有引用。
第四行,内核启动参数参考了 deepin ISO 中 isolinux 文件夹下的 live.cfg 。

UEFI 模式

将 Legacy 模式下内核启动那一行中的 /live/vmlinuz 改为 /live/vmlinuz.efi 即可。

测试结果

当前系统测试系统UEFI 模式Legacy 模式备注
deepindeepin

deepin 中安装 Windows

  • 将 ISO 中的内容复制到某个 ntfs 分区的根目录(似乎 ISO 格式不兼容,所以无法直接引导)。目标分区最好不是安装分区,否则安装后文件会混在一起,不好区分。当然,如果提前截图的话就没问题。安装过程中有冲突的文件会被放到 Windows.old 文件夹中。
  • 修改 /etc/grub.d/40_custom,在最后添加引导菜单定义
  • 终端执行 sudo update-grub,更新 grub 引导项

其中 /etc/grub.d/40_custom 中添加的内容如下:

Legacy 模式

  1. menuentry "Windows Installer" --class windows --class os {

  2.     insmod part_msdos
  3.     insmod ntfs
  4.     insmod ntldr

  5.     set root=(hdx,y)

  6.     ntldr /bootmgr
  7. }
Copy the Code

UEFI 模式

  1. menuentry "Windows Installer" --class windows --class os {

  2.     insmod part_msdos
  3.     insmod ntfs

  4.     set root=(hdx,y)

  5.     chainloader /efi/boot/bootx64.efi
  6. }
Copy the Code

测试结果

当前系统测试系统UEFI 模式Legacy 模式备注
deepinWin 7xxUEFI 到 Starting Windows 就不动了,Legacy 则 Windows Boot Manager 报错
deepinWin 10xLegacy 模式 Windows Boot Manager 报错

重启后会直接进 Windows,似乎看不到 deepin 的引导菜单,但关机后再启动还是会进入 deepin。如果又没有 Windows 的引导项,可以在终端执行 sudo update-grub,更新下引导项,就出现 Windows 的引导项了。

Windows 中安装 deepin

  • 将 ISO 文件以及其中的 initrd.lz 和 vmlinuz 文件复制到 C 盘(非安装分区,非 C 盘也是可以的,但修改起来麻烦)根目录。
  • 下载 grub4dos,将其中的 grldr、menu.lst(可自建)放到 C 盘根目录。
  • XP 在 c:\boot.ini 中添加 x:\grldr="Deepin Installer" 引导项,这里 x 为盘符,如 C 盘。
  • Win7 以上下载 bootice。在 bootice 的 bcd 智能编辑功能中添加一个 grub/linux 引导项,选择启动磁盘和启动分区为当前的 C 盘,将引导内容从 grldr.mbr 改为 grldr 即可。
  • 在 menu.lst 中添加如下内容

Legacy 模式

  1. title deepin installer

  2. root (hdx,y)

  3. kernel /vmlinuz findiso=/deepin-15.11-amd64.iso boot=live components quiet splash union=overlay livecd-installer locales=zh_CN.UTF-8
  4. initrd /initrd.lz
Copy the Code

其中 x 从 0 开始,y 从 0 开始。即第一个块硬盘第一个分区。

UEFI 模式

  • 创建一个临时的 Fat32 分区(非安装分区),将 ISO 文件内容复制到此分区根目录。
  • 下载 bootice。通过 bootice 添加临时分区中的 \EFI\BOOT\BOOTX64.EFI 或 \EFI\BOOT\GRUBX64.EFI 为 UEFI 引导项。
  • 重启开机时按 DEL、ESC 等键进入 UEFI BIOS 设置界面,选中刚才添加的引导项确定即可。

Win 10 下如果需要其他开机启动操作,注意重启时按 Shift,否则可能无法操作。

测试结果

当前系统测试系统UEFI 模式Legacy 模式备注
win xpdeepin-
win 7deepin
win 10deepin若重启后还是进 win 10,可以关机再启动

其他

主要包括收尾工作和 grub 控制台模式。另外,这里也测试了 deepin 应用商店里的两款 U 盘安装工具。

收尾工作

最后,记得删除 /etc/grub.d/40_custom 中添加的内容,在终端执行 sudo update-grub,消除引导项。

如果添加了临时分区,记得删除并将空间合并到其他分区。

grub 控制台

以上 grub2 菜单定义过程也可以通过进入 grub 界面后(重启电脑会看到这个节面)按 c 进入 grub 控制台,然后一句一句执行 grub 引导命令来实现,而不需要修改 /etc/grub.d/40_custom 文件。如:

  1. insmod part_msdos
  2. insmod ntfs
  3. set root=(hdx,y)
  4. chainloader /iso/efi/boot/bootx64.efi
  5. boot
Copy the Code

深度启动盘制作工具

deepin 官方的 U 盘启动盘制作工具对自家的兼容性肯定是不错的,不过对 Windows 的支持不太好。

当前系统测试系统UEFI 模式Legacy 模式备注
-win 8 pe-x使用的 ISO 文件未集成 UEFI 引导模式
-win xp-x
-win 7x
-win 10x
-deepin
-ubuntu
-fedoraxx都是选择菜单后一片黑,U 盘无读写信号

woeusb

woeusb 主要面向 Windows 系统,所以对 Windows 的支持比较好。但比较逗逼的是,制作启动 U 盘时不会自动卸载磁盘,需要手动卸载才能继续下去。

当前系统测试系统UEFI 模式Legacy 模式备注
-win 8 pe-使用的 ISO 文件未集成 UEFI 引导模式
-win xp-x
-win 7
-win 10
-deepinx
-ubuntux
-fedoraxxUEFI 模式选择菜单后一片黑,U 盘无读写信号

UEFI 模式因为是通用的,看起来都支持得不错。

Reply Favorite View the author
All Replies
1 / 2
To page
funtoo
deepin
2019-09-05 19:38
#1
Windows 7对UEFI支持不完整,必须开启CSM才能在UEFI模式下顺利安装,否则就会卡在disk.sys加载。
Reply View the author
走钢丝
deepin
2019-09-05 20:58
#2
https://bbs.deepin.org/post/182429
Windows 7对UEFI支持不完整,必须开启CSM才能在UEFI模式下顺利安装,否则就会卡在disk.sys加载。 ...

喔,原来这样。。不过这块儿在 vb 虚拟机中好像没有设置的地方,看来是没法测了。
Reply View the author
走钢丝
deepin
2019-09-10 23:46
#3
grub4dos 和 bootice 网上能搜到,这里分享下过去下载的版本:

链接: https://pan.baidu.com/s/15JPXDDC9agLZAbqdSIM7tQ  密码: 5sep
Reply View the author
走钢丝
deepin
2019-09-20 19:45
#4
本帖最后由 lidanger 于 2019-9-20 12:27 编辑

主贴基本已经总结了相关方法,但其中 deepin 中安装 Windows 部分的方法,只在 UEFI 模式下有效,似乎不太普遍适用。最近想到可以用其他方法来处理此问题。


测试环境

操作系统:deepin 15.11
宿主环境:主要为 VirtualBox 虚拟机,部分为物理机(戴尔笔记本)。

deepin 中安装 Windows(续)

Legacy 模式

将 Windows ISO 文件中的内容复制到 ntfs 分区(主分区,fat32 分区也可以)根目录。稍后系统也将安装在此分区。当然,若担心混淆,可另建分区用来安装系统。

下载 grub4dos,将其中的 grldr 和 menu.lst(可自建)放到 ntfs 分区根目录。这里不再直接用 grub2 引导安装文件,而是通过 grub2 引导 grub4dos(适用于 MBR 分区表),再由 grub4dos 引导安装文件。

在 menu.lst 文件中写入如下内容:

  1. title Windows Installer
  2. root (hdx,y)
  3. chainloader /bootmgr
Copy the Code

root 定义为 ntfs 分区。其中 x 从 0 开始,y 从 0 开始。

在 /etc/grub.d/40_custom 中添加如下内容:

  1. menuentry "grub4dos" {  
  2.     insmod part_msdos
  3.     insmod ntfs
  4.     insmod ntldr

  5.     set root=(hdx,y)

  6.     ntldr /grldr
  7. }
Copy the Code

root 定义为 ntfs 分区。其中 x 从 0 开始,y 从 1 开始。

终端执行 sudo update-grub,更新引导项。

重启选择引导项 grub4dos 即可。

修复引导项

如果安装 Windows 后 deepin 引导项丢失,也可以反过来用 grub4dos 引导 grub2。

将 grldr 和 menu.lst 放到 Windows 所在分区根目录。
在 bootice 的 bcd 智能编辑功能中添加一个 grub/linux 引导项,将引导内容从 grldr.mbr 改为 grldr 即可。

在 menu.lst 文件中写入如下内容:

  1. title grub2
  2. root (hdx,y)
  3. kernel /boot/grub/i386-pc/core.img
Copy the Code

root 为 deepin 所在分区。其中 x 从 0 开始,y 从 0 开始。

重启,选择 deepin。进入系统后,终端执行

  1. sudo update-grub
  2. sudo grub-install /dev/sda
Copy the Code

更新引导项,修复主引导记录。

重启即可看到 grub 中 Windows 的引导菜单了。

收尾工作

最后,记得删除 /etc/grub.d/40_custom 中添加的内容,在终端执行 sudo update-grub,消除引导项。

如果添加了临时分区,记得删除并将空间合并到其他分区。

UEFI 模式

将 Windows ISO 文件中的内容复制到 FAT32 分区(临时分区)根目录。

这里不再直接用 grub2 引导安装文件,而是改用 efibootmgr 来添加 UEFI 引导项。当然了,效果是一样的,这里只是换个思路而已。efibootmgr 在 deepin 中默认已安装 。

  1. sudo efibootmgr -c -w -L “Windows” -d /dev/sda -p 1 -l \\efi\\boot\\bootx64.efi
Copy the Code

其中
  • -L 输入引导项的显示名称
  • -d 输入引导项所在磁盘的设备文件名称,例如 /dev/sda、/dev/sdb。
  • -p 输入引导项所在分区的编号,/dev/sda1 用 -p 1,/dev/sda2 用 -p 2。(可以先用 df -h 看下)
  • -l 输入引导项指向的 efi 启动文件在分区上的位置。请注意使用“\\”来表示目录的分级。

重启开机时按 DEL、ESC 等键进入 UEFI BIOS 设置界面,选中刚才添加的引导项确定即可开始安装。

安装后通过重启开机按 DEL、ESC 等键进入 deepin,在终端执行 update-grub 更新 grub2 引导项。这样 grub 菜单中就有 Windows 的引导项了。以后从 Windows 重启可能还是启动 Windows,但关机的话就看到 grub 菜单了。

收尾工作

最后删除刚添加用于安装系统的 UEFI 引导项

  1. efibootmgr
  2. sudo efibootmgr -b 0001 -B
Copy the Code

其中 0001 是要删除的引导项编号。

删除刚才创建的临时分区,将空间合并到其他分区。

测试结果

当前系统测试系统UEFI 模式Legacy 模式备注
deepinWin 7xUEFI 到 Starting Windows 就不动了
deepinWin 10


Reply View the author
走钢丝
deepin
2019-09-21 18:53
#5
本帖最后由 lidanger 于 2019-9-21 10:59 编辑

突然想起来,Linux 下可能一般用户没办法从 Windows ISO 中复制出文件来。毕竟 Windows 的 ISO 多是 UDF (iso-13346)格式镜像,而 Linux 一般默认为 iso-9660,所以无法直接解压,需要特别的压缩软件才行。

其实可以将 ISO 文件作为 loop 设备挂载到系统目录中,挂载时加入格式参数就可以了。例如,在文件管理器中 ISO 文件所在目录,右键打开终端,用如下命令挂载:

  1. mkdir ./iso
  2. sudo mount -t udf -o loop filename.iso ./iso
Copy the Code

挂载后就可以复制了。
Reply View the author
bigben446
deepin
2019-09-21 19:08
#6
https://bbs.deepin.org/post/182429
突然想起来,Linux 下可能一般用户没办法从 Windows ISO 中复制出文件来。毕竟 Windows 的 ISO 多是 UDF ( ...

现在U盘那么便宜,直接刻一个启动盘就好了
Reply View the author
走钢丝
deepin
2019-09-21 19:11
#7
https://bbs.deepin.org/post/182429
现在U盘那么便宜,直接刻一个启动盘就好了

搞着玩呗,毕竟生命在于折腾。说不定哪天谁用上了呢。
Reply View the author
浪云
deepin
2019-09-22 03:18
#8
厉害,
EFI下用xorboot很简单
mbr下搞过几次没成功,以后有机会再折腾
Reply View the author
abudu
deepin
2019-10-10 06:08
#9
您好,楼主。我用您Windows中安装Deepin的方法,在设置完启动项重启时能出deepin的logo,但是过一会儿会报错unable to find a medium containing a live file system,不知道什么原因
Windows版本:win10 1909
BIOS类型:uefi
安装的deepin版本:15.10.1
Reply View the author
走钢丝
deepin
2019-10-10 06:36
#10
本帖最后由 lidanger 于 2019-10-9 22:39 编辑
https://bbs.deepin.org/post/182429
您好,楼主。我用您Windows中安装Deepin的方法,在设置完启动项重启时能出deepin的logo,但是过一会儿会报 ...

看错了。。UEFI 的话我还真不知道,不是有两种吗?bootx64.efi 和 grubx64.efi 都试试。。
Reply View the author
abudu
deepin
2019-10-11 05:37
#11
https://bbs.deepin.org/post/182429
看错了。。UEFI 的话我还真不知道,不是有两种吗?bootx64.efi 和 grubx64.efi 都试试。。 ...

试过了,都不行。。。
Reply View the author
abudu
deepin
2019-10-11 05:37
#12
https://bbs.deepin.org/post/182429
看错了。。UEFI 的话我还真不知道,不是有两种吗?bootx64.efi 和 grubx64.efi 都试试。。 ...

试过了,都不行。。。
Reply View the author
abudu
deepin
2019-10-11 05:38
#13
https://bbs.deepin.org/post/182429
看错了。。UEFI 的话我还真不知道,不是有两种吗?bootx64.efi 和 grubx64.efi 都试试。。 ...

试过了,都不行。。。
Reply View the author
走钢丝
deepin
2019-10-11 05:51
#14
https://bbs.deepin.org/post/182429
试过了,都不行。。。

没道理啊,uefi 是最简单的方式,是不是哪一步搞错了?也许是因为你的分区是非主分区?
Reply View the author
走钢丝
deepin
2019-10-11 05:56
#15
https://bbs.deepin.org/post/182429
试过了,都不行。。。

看来方案还是不完善,还得你自己多折腾。。
Reply View the author
abaca
deepin
2019-11-20 23:34
#16
有个疑问:您在说明windows10中安装deepin时,menu.lst文件中添加一下内容
title deepin installer

root (hdx,y)

kernel /vmlinuz findiso=/deepin-15.11-amd64.iso boot=live components quiet splash union=overlay livecd-installer locales=zh_CN.UTF-8
initrd /initrd.lz
这里的磁盘分区是指FAT32格式的临时盘,还是C盘还是准备安装deepin的盘?
Reply View the author
abaca
deepin
2019-11-20 23:35
#17
关键是很多关键地方没说清楚。
Reply View the author
走钢丝
deepin
2019-11-20 23:37
#18
https://bbs.deepin.org/post/182429
有个疑问:您在说明windows10中安装deepin时,menu.lst文件中添加一下内容
title deepin installer

root (hdx,y) 这个是指 fat32 临时盘,因为接下来要在这个盘中找 deepin-15.11-amd64.iso

menu.lst 这个文件应该是放在 C 盘,跟 grldr 放一起。
Reply View the author
走钢丝
deepin
2019-11-20 23:39
#19
https://bbs.deepin.org/post/182429
有个疑问:您在说明windows10中安装deepin时,menu.lst文件中添加一下内容
title deepin installer

还有你的 BIOS 中是 UEFI 引导还是 legacy,这个得搞清楚。
Reply View the author
abaca
deepin
2019-11-20 23:49
#20
如果把ISO文件事先解压到临时盘可以吗?还是必须把ISO文件作为一个单体文件拷贝进去
Reply View the author
1 / 2
To page