“重复”中的链接太过针对该用户的问题,对我没有任何帮助。当我运行该答案时,我得到:
grub-probe: warning: disk does not exist, so falling back to partition device /dev/sda1.
grub-probe: warning: disk does not exist, so falling back to partition device /dev/sda1.
grub-probe: warning: disk does not exist, so falling back to partition device /dev/sda1.
grub-probe: error: disk `hostdisk//dev/sda1' not found.
首先,我有一台笔记本电脑,虽然已经有几年的历史了,但它与 Windows 8 以外的任何系统配合得都很糟糕:https://www.asus.com/Notebooks/ASUS_ROG_G750JX/overview/
我以前曾尝试过从同一个驱动器进行双重启动,但不知出于什么原因,这台机器没有成功。所以这次,我屈服了,决定将它们分开。
我在 1TB HDD (/dev/sda) 上安装了 Ubuntu 14.04 LTS,在 250GB SSD 上安装了 Windows 7 Ult (x64)(/dev/sdb)。两者都在 BIOS 中作为启动选项出现,Ubuntu 驱动器被设置为默认驱动器。
我唯一的抱怨是,目前进入 Windows 的唯一方法是让笔记本电脑启动到 GRUB,然后选择系统设置,以便它直接重新启动到 BIOS,然后从启动覆盖页面选择我的 Windows SSD。
我已经被告知无数次,在执行“sudo update-grub”后,GRUB 就会找到我的 Windows 操作系统,但事实从未如此。
我只想能够直接从 GRUB 启动到 Win7
是的,我遵循了所有正常的双启动程序,尽管是在单独的驱动器上(即先启动 Windows,然后启动 Ubuntu,确保当时已插入 Windows 驱动器等)。
我将非常感谢任何有帮助的回复。
lsblk 输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 244M 0 part /boot
└─sda3 8:3 0 930.8G 0 part
├─ubuntu--vg-root (dm-0) 252:0 0 914.9G 0 lvm /
└─ubuntu--vg-swap_1 (dm-1) 252:1 0 15.9G 0 lvm [SWAP]
sdb 8:16 0 238.5G 0 disk
├─sdb1 8:17 0 100M 0 part
└─sdb2 8:18 0 238.4G 0 part
sr0 11:0 1 1024M 0 rom
因此不确定这是否重要,但在用于启动修复的 GUI 中,它允许我更改“默认启动的操作系统”下拉栏,其中列出了 Windows 如下:
“Windows(通过 mapper/ubuntu--vg-root 菜单)”
答案1
我可以提供更一步一步的修复方法链接的答案。总体来说,我们将手动将 Windows 条目添加到 grub。此过程的大部分内容是查找执行此操作所需的信息。
- 通过挂载 efi 分区并搜索 bootmgfw.efi 来找到 Windows 引导加载程序所在的位置。
在我的系统(64 位 Win 8.1/Ubuntu 双启动)上,EFI 分区已安装。如果您的系统上没有,请对此发表评论,我会修改答案。
在终端窗口中发出命令来查找 EFI 分区lsblk
。在我的系统上,它安装在/boot/efi
分区上sda2
cd
进入该目录并查找文件bootmgfw.efi
。在我的系统上,它位于/boot/efi/EFI/Microsoft/Boot
似乎有点多余,但无论如何。
- 查找驱动器的 uuid
在终端中输入sudo blkid
并根据提示输入密码。这将列出您的所有驱动器及其 UUID。就我而言,我想要一个sda2
。
- 将其添加到 /etc/grub.d/40_custom
在终端类型中gksudo gedit /etc/grub.d/40_custom
输入你的密码
将此条目添加到文件中。将 UUID 处的文本 UUID 替换为您在步骤 2 中获得的 UUID 值。替换后,将其(${root})
替换/efi/Microsoft/Boot/bootmgfw.efi
为您在步骤 1 中找到的路径。
menuentry "Windows x86_64 UEFI-GPT" {
search --fs-uuid --no-floppy --set=root UUID
chainloader (${root})/efi/Microsoft/Boot/bootmgfw.efi
}
- 最后运行
update-grub
sudo update-grub
在终端中 输入。
答案2
现在有两种可能性:
记录如下:您有 2 个驱动器(1 个是 Windows,分区为 MBR/NTFS;1 个是 Ubuntu,分区为 GPT/ext3-4)。您在 UEFI Bios 下运行,UEFI-Grub 启动 MBR-Windows 时出现问题。
可能性:
- 您正在尝试从 UEFI-Grub 启动 BIOS 模式 Windows 7 引导加载程序。
- 这行不通。因为@oldfred 指出你不能混合启动模式。
- 如果您有文件 (${root})/efi/Microsoft/Boot/EFIMicrosoftBootbootmgfw.efi),那么这不是您的问题,因为 MBR 或 GPT 在这里并不重要,但如果您在 MBR 模式下安装它,Windows 将不会创建 efi 启动文件。
- 在下一步之前备份你的 bootloader 分区(sdb1)(例如克隆)
- 如果您没有此文件,则 Windows 可以创建 efi 引导加载程序。本文对此进行了描述: 如何通过 GRUB 以 UEFI 模式从旧式 MBR 分区启动 Windows 8?
您已经有 efi 启动文件(例如 EFIMicrosoftBootbootmgfw.efi)
如果您已经有 Windows efi 启动文件(例如 (EFIMicrosoftBootbootmgfw.efi),如启动修复日志第 1301 行中指出的那样),则请在 /etc/grub.d/40_custom 中的配置中尝试不同的选项。对您来说,这将是:
menuentry "Windows 7 " --class windows --class os { insmod part_msdos insmod ntfs insmod search_fs_uuid insmod chain set root='hd1,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 06D67F5BD67F4A47 else search --no-floppy --fs-uuid --set=root 06D67F5BD67F4A47 fi chainloader (${root})/efi/Microsoft/Boot/EFIMicrosoftBootbootmgfw.efi }
这些值是从你的启动修复日志中读取的,或者是猜测的。如果你的 efi 启动文件位于不同的位置,请将以下行
chainloader ...
- 最后但并非最不重要的是,您仍然可以擦除第二个硬盘。使用 GPT/NFTS 对其进行分区,然后安装新的 Windows。数据丢失即将发生在这里