我的电脑(华硕 N76VM 64 位)预装了 Windows 7(64 位家庭专业版),在从后来安装的 Ubuntu 环境进行分区时出现问题。这导致我运行testdisk
并将每个单独的分区复制到备份硬盘上。
我设法将其全部恢复到原始硬盘上,其状态与出现问题之前的状态相似。
****在所有麻烦开始之前,我能够启动这两个操作系统!****
自从“修复”硬盘后,电脑仍然无法启动 Windows 7。它已经Grub 1.99
安装好了(希望这对我有帮助),rEFInd
但它们都不起作用。我必须注意Grub
做显示 Windows 7 和 Ubuntu 的条目。Ubuntu 启动正常,但当我选择 Windows 时,屏幕显示:无效的 EFI 文件路径。
我尝试的另一个步骤是运行 Windows 7 修复 CD,输入命令提示符,重新分配驱动器号([OS] 为 C:\,[DATA] 为 D:\),以便它们适合原始状态,然后运行以下命令:
Bootrec.exe /FixMbr
Bootrec.exe /FixBoot
Bootrec.exe /ScanOs
Bootrec.exe /RebuildBcd
重新启动
,但它们没有帮助,所以我尝试了以下操作:
bootsect /nt60 c: /force /mbr
bcdboot c:\windows /s c:
再次,没有提示。所以我开始进一步寻找,然后遇到了本网站我有点担心尝试这个建议,因为我不知道可能的结果,而且我不想再次失去任何东西。
运行后boot info script
我得到了以下输出(我知道分区的顺序可能看起来很奇怪,但我认为这没什么大不了的:
Boot Info Script 0.61 [1 April 2012]
============================= Boot Info Summary: ===============================
=> Grub2 (v1.99) is installed in the MBR of /dev/sda and looks at sector
1880670208 of the same hard drive for core.img. core.img is at this
location and looks for (,gpt2)/boot/grub on this drive.
sda1: __________________________________________________________________________
File system: vfat
Boot sector type: FAT32
Boot sector info: According to the info in the boot sector, sda1 starts
at sector 0. But according to the info from fdisk,
sda1 starts at sector 2048.
Operating System:
Boot files: /efi/refind/refind_x64.efi /efi/ubuntu/grubx64.efi
/efi/ubuntu/shimx64.efi
sda2: __________________________________________________________________________
File system: ext4
Boot sector type: Grub2 (v1.99)
Boot sector info: Grub2 (v1.99) is installed in the boot sector of sda2
and looks at sector 1569963600 of the same hard drive
for core.img. core.img is at this location and looks
for (,gpt2)/boot/grub on this drive.
Operating System: Ubuntu 12.04.4 LTS
Boot files: /boot/grub/grub.cfg /etc/fstab
sda3: __________________________________________________________________________
File system: ntfs
Boot sector type: Windows Vista/7: NTFS
Boot sector info: No errors found in the Boot Parameter Block.
Operating System:
Boot files:
sda4: __________________________________________________________________________
File system: ntfs
Boot sector type: Windows Vista/7: NTFS
Boot sector info: No errors found in the Boot Parameter Block.
Operating System: Windows 7
Boot files: /NST/menu.lst /bootmgr /Boot/BCD
/Windows/System32/winload.exe
sda5: __________________________________________________________________________
File system: ntfs
Boot sector type: Windows Vista/7: NTFS
Boot sector info: No errors found in the Boot Parameter Block.
Operating System:
Boot files: /bootmgr /boot/bcd
sda6: __________________________________________________________________________
File system: swap
Boot sector type: -
Boot sector info:
sda7: __________________________________________________________________________
File system: BIOS Boot partition
Boot sector type: Grub2's core.img
Boot sector info:
============================ Drive/Partition Info: =============================
Drive: sda _____________________________________________________________________
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
Partition Boot Start Sector End Sector # of Sectors Id System
/dev/sda1 1 1,953,525,167 1,953,525,167 ee GPT
GUID Partition Table detected.
Partition Start Sector End Sector # of Sectors System
/dev/sda1 2,048 194,559 192,512 EFI System partition
/dev/sda2 1,556,162,560 1,864,286,207 308,123,648 EFI System partition
/dev/sda3 1,233,352,704 1,556,162,559 322,809,856 Data partition (Windows/Linux)
/dev/sda4 194,560 1,233,352,703 1,233,158,144 Data partition (Windows/Linux)
/dev/sda5 1,880,690,688 1,936,979,967 56,289,280 Windows Recovery Environment (Windows)
/dev/sda6 1,864,286,208 1,880,670,207 16,384,000 Swap partition (Linux)
/dev/sda7 1,880,670,208 1,880,690,687 20,480 BIOS Boot partition
"blkid" output: ________________________________________________________________
Device UUID TYPE LABEL
/dev/sda1 E138-2A7D vfat
/dev/sda2 598ab3d1-e1aa-4041-ba78-1de8c6762331 ext4
/dev/sda3 4DFF26211F14E609 ntfs DATA
/dev/sda4 4A814AE3556AE075 ntfs OS
/dev/sda5 1B1666970F6A4336 ntfs Recovery
/dev/sda6 03dc7be8-7682-4219-8ab0-ae5d09caa1b1 swap
================================ Mount points: =================================
Device Mount_Point Type Options
/dev/sda1 /boot/efi vfat (rw)
/dev/sda2 / ext4 (rw,errors=remount-ro)
=========================== sda2/boot/grub/grub.cfg: ===========================
--------------------------------------------------------------------------------
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
set default="0"
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function recordfail {
set recordfail=1
if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
}
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set=root 598ab3d1-e1aa-4041-ba78-1de8c6762331
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=auto
load_video
insmod gfxterm
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set=root 598ab3d1-e1aa-4041-ba78-1de8c6762331
set locale_dir=($root)/boot/grub/locale
set lang=en_US
insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
set timeout=-1
else
set timeout=10
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
if background_color 44,0,30; then
clear
fi
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
set gfxpayload="${1}"
if [ "${1}" = "keep" ]; then
set vt_handoff=vt.handoff=7
else
set vt_handoff=
fi
}
if [ "${recordfail}" != 1 ]; then
if [ -e ${prefix}/gfxblacklist.txt ]; then
if hwmatch ${prefix}/gfxblacklist.txt 3; then
if [ ${match} = 0 ]; then
set linux_gfx_mode=keep
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=keep
fi
else
set linux_gfx_mode=text
fi
export linux_gfx_mode
if [ "${linux_gfx_mode}" != "text" ]; then load_video; fi
menuentry 'Ubuntu, with Linux 3.8.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set=root 598ab3d1-e1aa-4041-ba78-1de8c6762331
linux /boot/vmlinuz-3.8.0-35-generic root=UUID=598ab3d1-e1aa-4041-ba78-1de8c6762331 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.8.0-35-generic
}
menuentry 'Ubuntu, with Linux 3.8.0-35-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set=root 598ab3d1-e1aa-4041-ba78-1de8c6762331
echo 'Loading Linux 3.8.0-35-generic ...'
linux /boot/vmlinuz-3.8.0-35-generic root=UUID=598ab3d1-e1aa-4041-ba78-1de8c6762331 ro recovery nomodeset
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.8.0-35-generic
}
submenu "Previous Linux versions" {
menuentry 'Ubuntu, with Linux 3.8.0-29-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set=root 598ab3d1-e1aa-4041-ba78-1de8c6762331
linux /boot/vmlinuz-3.8.0-29-generic root=UUID=598ab3d1-e1aa-4041-ba78-1de8c6762331 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.8.0-29-generic
}
menuentry 'Ubuntu, with Linux 3.8.0-29-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set=root 598ab3d1-e1aa-4041-ba78-1de8c6762331
echo 'Loading Linux 3.8.0-29-generic ...'
linux /boot/vmlinuz-3.8.0-29-generic root=UUID=598ab3d1-e1aa-4041-ba78-1de8c6762331 ro recovery nomodeset
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.8.0-29-generic
}
menuentry 'Ubuntu, with Linux 3.5.0-18-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set=root 598ab3d1-e1aa-4041-ba78-1de8c6762331
linux /boot/vmlinuz-3.5.0-18-generic root=UUID=598ab3d1-e1aa-4041-ba78-1de8c6762331 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.5.0-18-generic
}
menuentry 'Ubuntu, with Linux 3.5.0-18-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set=root 598ab3d1-e1aa-4041-ba78-1de8c6762331
echo 'Loading Linux 3.5.0-18-generic ...'
linux /boot/vmlinuz-3.5.0-18-generic root=UUID=598ab3d1-e1aa-4041-ba78-1de8c6762331 ro recovery nomodeset
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.5.0-18-generic
}
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda4)" --class windows --class os {
insmod part_gpt
insmod ntfs
set root='(hd0,gpt4)'
search --no-floppy --fs-uuid --set=root 4A814AE3556AE075
chainloader +1
}
menuentry "Windows Recovery Environment (loader) (on /dev/sda5)" --class windows --class os {
insmod part_gpt
insmod ntfs
set root='(hd0,gpt5)'
search --no-floppy --fs-uuid --set=root 1B1666970F6A4336
drivemap -s (hd0) ${root}
chainloader +1
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
set timeout=10
fi
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/30_uefi-firmware ###
### END /etc/grub.d/30_uefi-firmware ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 7" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos4)'
search --no-floppy --fs-uuid --set=root 4A814AE3556AE075
chainloader +1
}
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
--------------------------------------------------------------------------------
=============================== sda2/etc/fstab: ================================
--------------------------------------------------------------------------------
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
proc /proc proc nodev,noexec,nosuid 0 0
tmpfs /tmp tmpfs optional,nodev,noexec,nosuid 0 0
# / was on /dev/sda2 during installation
UUID=598ab3d1-e1aa-4041-ba78-1de8c6762331 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
#UUID=E138-2A7D /boot/efi vfat defaults 0 1
# swap was on /dev/sda3 during installation
UUID=03dc7be8-7682-4219-8ab0-ae5d09caa1b1 none swap sw 0 0
#/dev/sda7 none swap sw,noauto 0 0
#UUID=E138-2A7D /boot/efi vfat defaults 0 1
#UUID=E138-2A7D /boot/efi vfat defaults 0 1
UUID=E138-2A7D /boot/efi vfat defaults 0 1
--------------------------------------------------------------------------------
=================== sda2: Location of files loaded by Grub: ====================
GiB - GB File Fragment(s)
814.208938599 = 874.250190848 boot/grub/grub.cfg 1
765.658302307 = 822.119342080 boot/initrd.img-3.5.0-18-generic 1
743.588668823 = 798.422253568 boot/initrd.img-3.8.0-29-generic 2
769.143566132 = 825.861615616 boot/initrd.img-3.8.0-35-generic 1
765.462841034 = 821.909467136 boot/vmlinuz-3.5.0-18-generic 2
742.506031036 = 797.259780096 boot/vmlinuz-3.8.0-29-generic 2
769.006057739 = 825.713967104 boot/vmlinuz-3.8.0-35-generic 1
765.658302307 = 822.119342080 initrd.img 1
765.658302307 = 822.119342080 initrd.img.old 1
765.462841034 = 821.909467136 vmlinuz 2
765.462841034 = 821.909467136 vmlinuz.old 2
============================== sda4/NST/menu.lst: ==============================
--------------------------------------------------------------------------------
# NeoSmart NeoGrub Bootloader Configuration File
#
# This is the NeoGrub configuration file, and should be located at C:\NST\menu.lst
# Please see the EasyBCD Documentation for information on how to create/modify entries:
# http://neosmart.net/wiki/display/EBCD/
--------------------------------------------------------------------------------
=================== sda4: Location of files loaded by Grub: ====================
GiB - GB File Fragment(s)
?? = ?? NST/menu.lst 0
=============================== StdErr Messages: ===============================
xz: (stdin): Compressed data is corrupt
xz: (stdin): Compressed data is corrupt
已从 EXT4 分区中删除启动标志。现在,下一步是获取需要在 C:\ 而不是 EXT4 分区启动的 Windows 分区。我尝试在“cmd”中的 Windows Live CD 恢复环境中使用“diskpart”几次。但是,每次重新启动时驱动器号都会重新分配。
一切失控之前的设置
编辑:
用原始操作系统分区的副本替换 bootmgfw.efi 文件。现在,当从 rEFInd 启动 Windows 7 时,我得到以下屏幕:
Windows failed to start. A recent hardware or software change might be the cause. To fix the problem:
1. Insert your Windows installation disc and restart your computer.
2. Choose your language settings, and click "Next."
3. Click "Repair your computer."
If you do not have this disc, contact your system administrator or computer manufacturer for assistance.
File: \EFI\Microsoft\Boot\BCD
Status: 0xc000000f
Info: An error occurred while attempting to read the boot configuration data.
编辑于 '14 年 2 月 19 日
我在 Microsoft 网站上找到了 Windows 8.1 试用版 iso。下载后,安装在 64 位虚拟机中。将 iso 复制到虚拟磁盘,然后使用我找到的一些说明使 VM 识别 USB。然后,我使用其他说明找到了使其能够进行 EUFI 启动的方法,并且成功了。
现在我正在等待修复完成。现在需要半个小时,我不知道什么时候才能完成。为了参考,我将添加此操作何时/是否完成的信息来源
答案1
您需要了解 BIOS 模式(又称 CSM 或传统模式)启动和 EFI 模式(又称 UEFI 模式)启动之间的区别。Windows 将这些启动模式与分区表类型紧密联系起来:当且仅当磁盘使用较旧的主引导记录 (MBR)分区表类型,并且当且仅当磁盘使用较新的GUID 分区表 (GPT)分区表类型。你的问题标题暗示你使用的是 GPT,但不清楚你的计算机起初使用 GPT。(大多数 Windows 7 系统使用 BIOS 和 MBR,尽管 2011 年末及以后销售的一些 Windows 7 系统使用 EFI 和 GPT。)如果您的原始安装使用 BIOS/MBR,则需要安装 EFI 模式的 Windows 引导加载程序。此过程描述如下这里。
如果你的电脑原来使用的是 EFI/GPT,你可能还需要重新安装引导加载程序;或者你可能忽略了一些关键细节,比如正确地重新创建EFI 系统分区 (ESP),其中包含 EFI 引导加载程序。
如果您需要更多帮助,请尝试运行启动信息脚本在 Linux 中。这将生成一个名为 的文件RESULTS.txt
。将其发布到 pastebin 网站并在此处发布该文件的 URL。这将为我们提供有关您当前配置的更精确和详细的信息,这可能有助于修复它。
编辑:
您的启动信息脚本输出表明您的计算机上没有安装 Windows 启动加载程序。您必须修复该问题才能启动 Windows。特别是,由于磁盘使用 GPT,您必须安装电喷Windows 的引导加载程序。大多数描述 Windows 引导修复的页面都假设系统是基于 BIOS 的,因此对您来说 100% 没用。这一页描述了如何将 Windows 从 BIOS 模式启动转换为 EFI 模式启动,因此类似这样的方法可能会有用。其他页面可能也会有所帮助;或者您可以在 Windows 论坛上发帖寻求帮助。
还有一点,在尝试安装 Windows 引导加载程序之前,您可能需要处理:您的系统/dev/sda2
使用 ext4 文件系统,但被标记为EFI 系统分区 (ESP)。这是不正确的,可能会导致后续问题,因此您应该修复它。有多种方法可以修复它,具体取决于您使用的分区软件。例如,在gdisk
,您应该使用选项将类型代码从 EF00 更改为 8300 t
,然后通过选项写入更改w
。在parted
或 GParted 中,您将删除“启动标志”(并在 GParted 中应用更改)。
答案2
尝试获取 GPARTED liveCD 并将您的 windows 分区设置为具有“启动”标志。这可能会取代您的 GRUB 安装,但至少您有一个可以工作的点。
答案3
首先,如果您还没有这样做,请按照 Rod Smith 的说明将 EXT4 分区的类型更改为非 ESP。
接下来,我建议您用 重写您的保护性 MBR gdisk
。Bootmgr
似乎不喜欢grub
对 MBR 所做的磁盘签名更改。
本质上,运行gdisk /dev/sda
,然后:
x
n
;确认...这不会影响任何 EFI 引导加载程序。w
如果这不起作用......
此外,每次启动 Windows 安装光盘时确实会重新分配字母。不必担心。在内部,每个驱动器和分区都由唯一的 GUID 标识(在 GPT GUID 之上,这是 Microsoft 的常用风格,以保持与 MBR 系统的一致性)。
让我们重新生成一个合适的BCD
- 使用 diskpart 识别分配给 EFI 系统分区 (
/dev/sda1
:称之为 S:) 和 Windows 启动分区 (/dev/sda3
:称之为 C:)的驱动器号 - 如果 ESP 没有驱动器号,请使用以下方式分配一个
mountvol s: /s
bcdboot C:\windows /s S: /f ALL
答案4
如果磁盘样式是 GPT,则 Windows 7(仅 64 位版本)只能使用 UEFI 启动。
要修复 Windows 7 启动:
1)使用一些磁盘管理工具确保您有一个 EFI 系统分区(通常大小为 FAT32 格式的 100 MB)和一个 Microsoft 保留(128 MB)分区。
EFI 系统分区是放置启动文件的地方。您可以在恢复控制台上使用“diskpart”来检查分区:
C:\Windows\system32>diskpart
Microsoft DiskPart version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
On computer: MTNB
DISKPART> sel disk 0
Disk 0 is now the selected disk.
DISKPART> list vol
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ----- ---------- ------- --------- --------
Volume 0 I DVD-ROM 0 B No Media
Volume 1 D TEMP NTFS Partition 50 GB Healthy
Volume 2 RAW Partition 18 GB Healthy
Volume 3 E DATA NTFS Partition 100 GB Healthy
Volume 4 F W8 NTFS Partition 80 GB Healthy
Volume 5 C W7 NTFS Partition 80 GB Healthy Boot
Volume 6 G VHD NTFS Partition 60 GB Healthy
Volume 7 H W81 NTFS Partition 60 GB Healthy
Volume 8 J W81_src NTFS Partition 5368 MB Healthy
Volume 9 R Recovery NTFS Partition 300 MB Healthy Hidden
Volume 10 EFI SYSTEM FAT32 Partition 100 MB Healthy System
您还必须确保磁盘上有一个 128 MB 的 Microsoft 保留分区!
DISKPART> lis par
Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 1 Recovery 300 MB 1024 KB
Partition 2 System 100 MB 301 MB
Partition 3 Reserved 128 MB 401 MB
Partition 4 Primary 50 GB 529 MB
Partition 5 Primary 18 GB 60 GB
Partition 6 Unknown 2048 MB 78 GB
Partition 7 Primary 100 GB 80 GB
Partition 8 Primary 80 GB 180 GB
Partition 9 Primary 80 GB 260 GB
Partition 10 Primary 60 GB 340 GB
Partition 11 Primary 60 GB 400 GB
Partition 12 Primary 5368 MB 460 GB
此处分区 3 是 Microsoft 保留分区。
如果磁盘开头没有恢复分区,则 EFI 系统分区应该是第一个,然后是 128 MB 的 Microsoft 保留分区。
2)安装卷 s:/s(将 EFI 系统分区挂载到驱动器号 s:)
3)使用恢复 CD/USB 中的 bcdboot:
bcdboot Y:\windows /ss: 其中 Y:是 Windows 7 驱动器。
EFI 启动期间不涉及任何启动扇区(没有 MBR,没有 PBR/VBR),但您可以使用“bootsect”重写 MBR:
bootsect /nt60 全部 /force /mbr
链接到 Microsoft,您可以在那里看到如何使用 diskpart 创建 UEFI 分区。
希望这可以帮助。