允许 Windows 10 升级使用 SSD 的双启动 PC 后,它无法启动。我运行了启动修复,现在发现 bootmgr 丢失了。因此,我从实时 CD 运行了 testdisk,所有分区都显示为已删除。
TestDisk 7.0, Data Recovery Utility, April 2015
Christophe GRENIER <[email protected]>
http://www.cgsecurity.org
Disk /dev/sdf - 120 GB / 111 GiB - CHS 14593 255 63
Partition Start End Size in sectors
>D HPFS - NTFS 0 32 33 63 221 30 1024000
D HPFS - NTFS 63 221 31 8111 174 63 129288192
D HPFS - NTFS 8111 175 1 8218 229 11 1722368
D Linux 8219 39 13 13616 190 14 86712320
D Linux Swap 13616 190 15 14593 66 1 15687680
一个类似(但不相同)的问题和响应要求提供磁盘的分区列表(我已经将分区数据备份到 txt 文件中)。虽然我已将 /dev/sda 包含在内,但它用作数据,但我确实看到它确实有一个引导记录,可能是前世遗留下来的。
ubuntu@ubuntu:~$ sudo parted /dev/sda unit s print
Model: ATA WDC WD15EARS-00Z (scsi)
Disk /dev/sda: 2930275055s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 206848s 976814079s 976607232s primary ntfs
2 976814080s 2766430207s 1789616128s primary ntfs boot
ubuntu@ubuntu:~$ sudo parted /dev/sdf unit s print
Model: ATA SanDisk SDSSDA12 (scsi)
Disk /dev/sdf: 234441648s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2048s 1026047s 1024000s primary ntfs boot
2 1026048s 130313813s 129287766s primary ntfs
3 130314240s 132036607s 1722368s primary ntfs diag
4 132040702s 234440703s 102400002s extended
5 218753024s 234440703s 15687680s logical linux-swap(v1)
parted 中的分区似乎是正确的,那么为什么 testdisk 显示它们已删除?软件不正确?我需要做什么才能让我的机器从 SSD (/dev/sdf) 启动?我怀疑 Windows 10 尚未完成升级,因此在让 grub 重新控制之前,我可能需要让它运行。我不想通过在 testdisk 中选择错误的设置使情况变得更糟。
尽管我已经使用 Linux 很多年了,但我对其内部结构并不熟悉。
我也对太多有时似乎相互矛盾的信息感到困惑。我希望有一个明确的、简单易行的程序来恢复这个反复出现的双重启动/升级错误,只要微软拒绝“支持”双重启动并通过清除启动记录来阻止升级过程,这个错误似乎就不会消失。
答案1
我确实设法使用 parted 解决了这个问题,但正如我所表达的,我对选项感到不知所措,而且由于粘贴内容消失了,一些引用的帖子现在不完整了。我将尝试发布带有完整输出的解决方案,希望它能帮助某人清楚地看到和诊断问题。
正如我在问题中所述,Windows 更改了分区表,我无法再进行双启动,它进入了 grub-rescue。我在 grub-rescue 中所做的一切(我不记得了)都没有用,但现在我确信恢复分区表是成功的第一步(也许是唯一一步)。以下是我遵循的步骤。
0) 获取 livecd/usb 来运行 Ubuntu,因为显然它无法从硬盘启动。我发现 boot-repair-cd 包含修复此问题所需的一切。请参阅https://sourceforge.net/projects/boot-repair-cd/
1) 按照 oldFred 上面所说备份分区表:
在任何更改之前备份分区表,这样如果更改不正确,您可以回到当前状态 sudo sfdisk -d /dev/sda > PT_sda.txt 因此您知道扇区: sudo parted /dev/sda unit s print
2) 分析输出以确定丢失了什么。观察到的是表中有重叠的分区。请参阅下面的示例。 3) 由此确定包含 Ubuntu 分区的起始和结束扇区 4) 运行 parted rescue 5) 重新启动
从 boot-repair-disk 启动机器并运行 parted 后的示例输出(带注释)<==:
(parted) select /dev/sdf <== my OS's are on sdf an SSD
Using /dev/sdf
(parted) print
Model: ATA SanDisk SDSSDA12 (scsi)
Disk /dev/sdf: 120GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 525MB 524MB primary ntfs boot
2 525MB 66.7GB 66.2GB primary ntfs
3 66.7GB 67.6GB 882MB primary ntfs diag
4 67.6GB 120GB 52.4GB extended
5 112GB 120GB 8032MB logical linux-swap(v1)
(parted) unit s <== set parted to use sectors to simplify entering parameters
(parted) print
Model: ATA SanDisk SDSSDA12 (scsi)
Disk /dev/sdf: 234441648s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2048s 1026047s 1024000s primary ntfs boot
2 1026048s 130313813s 129287766s primary ntfs
3 130314240s 132036607s 1722368s primary ntfs diag
4 132040702s 234440703s 102400002s extended <== note partitions 4 & 5 have same end so 4 must be ubuntu
5 218753024s 234440703s 15687680s logical linux-swap(v1)
(parted) rescue <== run the rescue option specifying the start and end sectors from 4 & 5 above
Start? 132040702
End? 218753020
Information: A ext4 logical partition was found at 132040704s -> 218753023s.
Do you want to add it to the partition table?
Yes/No/Cancel? y <== Whoo Hooo Found it
(parted) print <== print the results after rescue
Model: ATA SanDisk SDSSDA12 (scsi)
Disk /dev/sdf: 234441648s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2048s 1026047s 1024000s primary ntfs boot
2 1026048s 130313813s 129287766s primary ntfs
3 130314240s 132036607s 1722368s primary ntfs diag
4 132040702s 234440703s 102400002s extended
6 132040704s 218753023s 86712320s logical ext4 <== This looks much better
5 218753024s 234440703s 15687680s logical linux-swap(v1)
现在我只需重新启动,无需启动修复磁盘,grub 就会出现在 Microsoft 面前,因此很有帮助地帮我升级了 Windows。
我在使用 UEFI 的笔记本电脑上也遇到了这个问题。随着越来越多的计算机采用 UEFI,这个问题会有所改变,但我怀疑它是否会消失——我仍然无法在不使用功能键进入启动顺序的情况下让 grub 在 UEFI 笔记本电脑上运行,但这是另一种解决方法。另外,我认为 Ubuntu 用户非常节俭,将继续使用较旧的硬件,因为 Ubuntu 不需要像 Windows 那样多的硬件资源。而且,似乎几乎不可能阻止 Windows 定期用“升级”替换自己。因此,对于我们这些需要仅在 Windows 上运行的软件的人来说,双启动选项很有吸引力,升级/“grub-rescue”的惨败将继续发生。
感谢那些评论和帮助过的人。我对这个修复很担心,直到它真的起作用了!