调整大小后的分区问题

Dja*_*aal 3 boot partitioning multi-boot grub2

EDIT3
这可能是非常绝望的情况,所以我发布了另一种更简单的方法,但仍然需要一些帮助。
https://superuser.com/questions/706244/will-this-work-backup-partition-contents-of-both-linux-and-windows

我最近在安装了 Windows 8 和 KDE Linux Mint 的磁盘上调整了一个分区的大小(/sda2 以创建另一个分区,/sda1)。很多事情都出错了。

首先,计算机无法通过 BIOS 启动并给了我 grub 救援。使用 Live Linux USB,我使用引导修复应用程序重新安装 grub(在 /sda 上)。幸好 linux 是从新的 grub2 菜单启动的,但是在尝试加载时 Windows 会崩溃。在 linux 上进行更多研究时,我发现 KDE 分区管理器和 GParted 等应用程序都无法读取我的 /sda 磁盘上的分区。

KDE 分区管理器显示“在此设备上未找到有效分区”。GParted 给我整个事情是未分配的,并且“无法满足对分区的所有约束”。

然后我安装了另一个应用程序 FixParts。这给了我以下内容:

Warning: 0xEE partition doesn't start on sector 1. This can cause problems
in some OSes.
Run Code Online (Sandbox Code Playgroud)

Disk size is 250069680 sectors (119.2 GiB)
MBR disk identifier: 0x0FB1A4FB
MBR partitions:

                                                   Can Be   Can Be
Number  Boot  Start Sector   End Sector   Status   Logical  Primary   Code
   1                    63       192779   primary     Y        Y      0x07
   2      *         208839    134062424   logical     Y        Y      0x07
   5             134066176    234067967   logical     Y        Y      0x83
   6             234067968    250068991   primary              Y      0x82
Run Code Online (Sandbox Code Playgroud)

fdisk -l 给了我这个:

Disk /dev/sda: 128.0 GB, 128035676160 bytes
255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0fb1a4fb

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              63      192779       96358+   7  HPFS/NTFS/exFAT
/dev/sda2   *      208839   134062424    66926793    7  HPFS/NTFS/exFAT
/dev/sda3       134066175   250068991    58001408+   f  W95 Ext'd (LBA)
/dev/sda5       134066176   234067967    50000896   83  Linux
/dev/sda6       234067968   250068991     8000512   82  Linux swap / Solaris
Run Code Online (Sandbox Code Playgroud)

其中 sda1 只是一个空的 NTFS 分区,sda2 包含我的 Windows 8,sda5 是 Linux /(root)。/home 在另一个磁盘上。

我想保留我的数据。我希望我的 Windows 8 和 Linux 在同一个磁盘上,因为它是一个 SSD。如果可能的话,我还希望 Grub 和 Windows 启动文件都在同一个磁盘上,但这是一个不同的问题。

编辑
首先我认为问题是“0xEE 分区不在扇区 1 上启动”,但现在我不太确定。我的其他磁盘(我有 3 个)给出了同样的错误,但分区应用程序可以读取它们。但是,我记得看到引导修复应用程序在每个磁盘上都重新安装了 grub2,所以这可能是相关的。另外,现在我看到 Windows 8 分区 (/dev/sda2) 是合乎逻辑的???Windows 无法从逻辑启动,因此以前不可能启动。我怎样才能在不丢失数据的情况下改变它?

EDIT2
来自引导修复应用程序的非常详细的信息:http : //paste.ubuntu.com/6805345/

Jde*_*eBP 6

我的天,这简直是一团糟。

以下是一些突出的问题:

“0xEE 分区不在扇区 1 上启动”

现在,这些光盘上没有 0xEE 类型的分区。如果,如这条消息所示,您确实拥有它,那么在某一时刻,您的磁盘已使用非常不同的分区表机制进行了分区,而您的“修复”似乎已完全破坏了该机制。在这种情况下,您现在看到的可能是“混合”分区表方案(并行 MBR 和 EFI 分区表尽可能描述相同的分区)已被修复到其寿命不到一英寸的结果。或者很可能更远一英寸。

这是 Windows 8 无法启动的一种可能性。Microsoft 错误地假设安装到使用 MBR 分区表分区的磁盘意味着不以 EFI 方式启动,反之亦然。如果您已经从根本上“修复”了您的分区,以至于您已经设法将分区表方案从 EFI 转换为 MBR,那么您可能已经把 Windows 搞糊涂了。

当然,不是从块 #1 开始的类型 0xEE MBR 分区表条目首先是损坏的迹象,所以发生的事情很可能不是这样。另一个可能的解释是 0xEE 分区表条目是一个幽灵。没有迹象表明 Windows 正在或曾经以 EFI 方式在您的计算机上进行引导这一事实支持了这一点。

我记得看到引导修复应用程序在每个磁盘上重新安装 grub2。

这与“修复”类型 0xEE 保护 MBR 记录完全不存在相结合,将擦除任何 EFI 分区表。当然,这首先假设它确实是 EFI 分区的。

=> Grub2 (v1.99) is installed in the MBR of /dev/sda and looks at sector 1 of 
    the same hard drive for core.img.
Run Code Online (Sandbox Code Playgroud)

您已经在其通常的 MBR 病毒模式下安装了 grub,core.img它就在 EFI 分区表所在的位置。

现在我看到 Windows 8 分区 (/dev/sda2) 是合乎逻辑的???

不在 的输出中fdisk,你没有。没有任何迹象表明这一点。并且它被分配了次要设备号 2 的事实强烈表明它是一个主分区。辅助分区的编号从 5 开始。

当然,FixParts 可能(而且毫无疑问是)说实话。在这种情况下,你的MBR分区表中没有活动的主分区在所有的Windows 8确实是在扩展分区中的逻辑卷,难怪事情不会启动。VBR 引导程序在辅助分区中不能很好地运行,除非引导管理器即时修复它们的 BPB,而且我相当确定 Grub 不会这样做。您需要在此处撤消从主分区到辅助分区的转换。您的 Windows 8 卷绝对应该是主分区。

/dev/sda1: LABEL="SYSTEM RESERVED" UUID="01CF186FCBFB6340" TYPE="ntfs"
...
/dev/sda2    *        208,839   134,062,424   133,853,586   7 NTFS / exFAT / HPFS
Run Code Online (Sandbox Code Playgroud)

您的第一个主分区显然是您的(穷人的)系统卷。但是您的第二个主分区(或第一个辅助分区,取决于人们是否相信fdisk或 FixParts)是标记为活动的分区。这也会混淆 Windows。首先,它不会将您的第一个主分区识别为“系统”,因为它没有活动标志。

此外(假设fdisk是正确的),当您启动旧的 PC/AT 固件方式(而不是 EFI 方式)时,您的引导程序将从错误的卷加载错误的 VBR,如果这确实是系统保留体积。如果 FixParts 是正确的,您的引导程序将从错误的卷加载错误的 VBR,以及错误的 BPB 值。

这让我想到:

=================== hexdump -n512 -C /dev/sda1
00000000  eb 52 90 4e 54 46 53 20  20 20 20 00 02 08 00 00  |.R.NTFS    .....|
...
000001a0  0d 0a 4e 54 4c 44 52 20  69 73 20 6d 69 73 73 69  |..NTLDR is missi|
000001b0  6e 67 00 0d 0a 4e 54 4c  44 52 20 69 73 20 63 6f  |ng...NTLDR is co|
000001c0  6d 70 72 65 73 73 65 64  00 0d 0a 50 72 65 73 73  |mpressed...Press|
Run Code Online (Sandbox Code Playgroud)

您的Poor Man 系统卷上有旧的Windows NT 5.x VBR 引导程序。

=================== hexdump -n512 -C /dev/sda2
00000000  eb 52 90 4e 54 46 53 20  20 20 20 00 02 08 00 00  |.R.NTFS    .....|
....
000001a0  63 75 72 72 65 64 00 0d  0a 42 4f 4f 54 4d 47 52  |curred...BOOTMGR|
000001b0  20 69 73 20 63 6f 6d 70  72 65 73 73 65 64 00 0d  | is compressed..|
000001c0  0a 50 72 65 73 73 20 43  74 72 6c 2b 41 6c 74 2b  |.Press Ctrl+Alt+|
Run Code Online (Sandbox Code Playgroud)

您已经在第二个主分区上安装了 Windows NT 6.x VBR 引导程序。由于活动标志,这将使它成为一个组合的“引导”和“系统”卷。

sda1: __________________________________________________________________________

    Boot sector type:  Windows 2000/XP: NTFS
    Boot files:        

sda2: __________________________________________________________________________

    Boot sector type:  Windows 8/2012: NTFS
    Boot files:        /bootmgr /Windows/System32/winload.exe
Run Code Online (Sandbox Code Playgroud)

但是微软的启动管理器不正确。BCD 存储完全丢失。第二个主分区中的 VBR 引导程序可以找到 Microsoft 的引导管理器。但是微软的启动管理器在系统卷中没有 BCD 存储。

sdc1: __________________________________________________________________________

    Boot sector type:  Windows 8/2012: NTFS
    Boot files:        /bootmgr /Boot/BCD /NTLDR /ntdetect.com
Run Code Online (Sandbox Code Playgroud)

相反:在您的第三张光盘上,您的第一个主分区被标记为活动的,因此是穷人的系统卷。微软的启动管理器和 BCD 存储都在那里,还有一个 Windows NT 6.x VBR 引导程序。这是我怀疑你的第一张光盘应该是什么样子。但事实并非如此。

我建议:

  • 修复sda2成为二级分区的问题。
  • 标记sda1为活跃。
  • sda1 现在又是你的穷人的“系统”卷,就像以前一样。
  • 将 Windows NT 6.2 VBR 引导程序放在sda1.
  • 将 Microsoft 的启动管理器放在sda1.
  • 在 上创建 BCD 存储sda1
  • 添加用于启动的 BCD 条目sda2,即 Windows 8“启动”卷。
  • sda1 现在至少会以 PC/AT 方式引导。
  • 要做到这一点,要么:
    • 取消 MBR 病毒模式下的 grub,并在sda.
    • 将缺失的条目添加到 grub,因为它目前没有提及hd0,msdos0或根本没有提及hd0,msdos1

剩下的就看你了。