如何阻止 Windows 在启动过程中放错辅助 GPT?

如何阻止 Windows 在启动过程中放错辅助 GPT?

我的台式机有一块(也是唯一一块)3TB 硬盘,有 5 个分区:1. EFI,2. Windows 7 SP1(64 位),3. HP Factory Recovery 分区,4. 用于数据存储的 NTFS,以及 5. Ubuntu 18.04.2(64 位)。GRUB(v.2.02)是引导加载程序。

只要我启动 Windows 7,我总是会收到“辅助分区表与最后一个分区重叠 4,294,966,385 个块”的警告,并且最后一个可用扇区被重置为 1,565,565,838(这比硬盘驱动器的最后一个扇区 5,860,533,168 早得多)。无论我让 Windows 7 修复它还是在 Ubuntu 中使用 gparted 修复它,同样的警告都会不断出现。

我需要您帮助的问题有两个:

  1. 有什么解决方案或方法可以防止 Windows 7 在加载 Windows 过程中错误地重置辅助 GPT?

  2. 第二个 GPT 放错位置导致我的某些文件现在文件大小为零字节。有没有办法恢复这些文件,因为这些文件的内容仍然存在?

以下是详细的错误信息:

(1. Ubuntu 阶段)
假设最后启动的操作系统是 Ubuntu,并且 Gparted 和 Gdisk 没有检测到任何分区错误。

(2. Windows 阶段)
重新启动。在加载 Windows 7 期间并在显示 Windows 桌面之前,它会显示:

Checking file system on E:
The type of the file system is NTFS.
Volume label is NTFS_DATA

One of your disks needs to be checked for consistency. You 
may cancel the disk check, but it is strongly recommended 
that you continue. To skip disk checking, press any key...

我继续并完成了推荐的磁盘检查。进入 Windows 后,我运行 CHKDSK.exe 再次检查磁盘,没有收到任何错误报告。(顺便说一句,我发现在 Windows 加载阶段进行磁盘检查后,一些文件的文件大小现在为零字节。)

我打开 Windows 的磁盘管理。它可以正确识别硬盘的全部容量为 2794.52GB。它还可以识别除最后一个分区之外的所有分区(因为最后一个分区是 ext4)。

但是,我运行 gdisk64.exe(Windows 64 位版本的 GPT fdisk),它发出警告信号:

c:\gdisk>gdisk64 -l 0:
GPT fdisk (gdisk) version 1.0.4

The protective MBR's 0xEE partition is oversized! Auto-repairing.

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Warning! Secondary partition table overlaps the last partition by
4294966385 blocks!
You will need to delete this partition or resize it in another utility.
Disk 0:: 1565565872 sectors, 746.5 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1565565838
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          206847   100.0 MiB   EF00  EFI system partition
   2          206848      1925441535   918.0 GiB   0700  
   3      1925441536      1953521663   13.4 GiB    0700  
   4      1953523712      5650817023   1.7 TiB     0700  
   5      5650817024      5860532223   100.0 GiB   8300  

我关闭电脑,再次启动 Windows 7。它不再像上面提到的那样在加载 Windows 时要求进行磁盘检查。进入 Windows 后,我打开 Windows 的磁盘管理,它仍然可以正确识别硬盘的全部容量和分区。然而,gdisk64.exe 仍然报告相同的警告,即辅助分区表与最后一个分区重叠 4,294,966,385 个块,最后一个可用扇区是 1,565,565,838,它比最后一个分区的结束扇区(5,860,532,223)早得多。

(3. Ubuntu 阶段)
重启。在 Ubuntu 18.04.2 中,我在终端中打开 gdisk 和 fdisk。它们确认存在同样的问题:

$ sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Warning! Secondary partition table overlaps the last partition by
4294966385 blocks!
Try reducing the partition table size by 17179865540 entries.
(Use the 's' item on the experts' menu.)
Disk /dev/sda: 5860533168 sectors, 2.7 TiB
Model: TOSHIBA DT01ACA3
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1565565838
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          206847   100.0 MiB   EF00  EFI system partition
   2          206848      1925441535   918.0 GiB   0700  
   3      1925441536      1953521663   13.4 GiB    0700  
   4      1953523712      5650817023   1.7 TiB     0700  
   5      5650817024      5860532223   100.0 GiB   8300  


$ sudo fdisk -l /dev/sda
Disk /dev/sda: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Device          Start        End    Sectors  Size Type
/dev/sda1        2048     206847     204800  100M EFI System
/dev/sda2      206848 1925441535 1925234688  918G Microsoft basic data
/dev/sda3  1925441536 1953521663   28080128 13.4G Microsoft basic data
/dev/sda4  1953523712 5650817023 3697293312  1.7T Microsoft basic data
/dev/sda5  5650817024 5860532223  209715200  100G Linux filesystem

我打开 gparted,它弹出一条警告消息:

Not all of the space available to /dev/sda appears to be 
used, you can fix the GPT to use all of the space (an extra 
4294967296 blocks) or continue with the current setting?
[Fix] [Ignore]

我选择让 gparted 修复 GPT。然后我再次运行 gdisk,它没有给出任何警告。错误已修复,最后一个可用扇区是 5,860,533,134:

$ sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 5860533168 sectors, 2.7 TiB
Model: TOSHIBA DT01ACA3
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 4973 sectors (2.4 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          206847   100.0 MiB   EF00  EFI system partition
   2          206848      1925441535   918.0 GiB   0700  
   3      1925441536      1953521663   13.4 GiB    0700  
   4      1953523712      5650817023   1.7 TiB     0700  
   5      5650817024      5860532223   100.0 GiB   8300

我重新启动电脑并再次启动 Ubuntu。gdisk 和 gparted 没有检测到任何 GPT 错误。

(4. Windows 阶段)
然后我尝试启动 Windows 7。上述 Windows 阶段发生的情况再次发生。在启动 Windows 期间,它会执行“检查 E: 上的文件系统”并请求检查磁盘的一致性。此后,chkdsk 和磁盘管理都显示正常结果而没有任何警告,但 gdisk64 仍然再次报告相同的警告,因为辅助分区表与最后一个分区重叠了 4,294,966,385 个块。最后一个可用扇区恢复到 1,565,565,838,并且提前到达了磁盘的最后一个扇区(5,860,533,168),尽管在上次重新启动(Ubuntu 阶段)中,gparted 已将其修复并设置为 5,860,533,134。

我认为这里的根本问题似乎在于 Windows 7 在硬盘的中间位置设置了辅助/备份 GPT,而不是让备份保留在最后一个分区之后。据我所知,“最后一个可用扇区”是辅助/备份 GPT 的起始位置。硬盘总共有 5,860,533,168 个扇区。在 gparted 修复后,最后一个可用扇区为 5,860,533,134,但在加载 Windows 7 后又变回了 1,565,565,838。我的 Windows 7(SP1,64 位)可以在磁盘管理中识别硬盘的全部容量,但这并不能帮助它避免将备份 GPT 重置到错误的位置。我知道如何将辅助 GPT 重置到它应该在的位置,但我不知道如何防止我的 Windows 7 在加载操作系统阶段将其放错位置。

以下是我的问题:次级 GPT 放错位置导致我的某些文件现在文件大小为零字节。有没有办法恢复这些文件,因为这些文件的内容仍然存在?

有没有办法可以防止 Windows 7 在加载 Windows 的过程中错误地重置辅助 GPT?

请帮忙。

答案1

5860533168(Ubuntu 认为)是逻辑扇区的实际数量。这需要 33 位,如果您尝试将其存储在 32 位中,则最高有效位将丢失,数字将变为1565565872(Windows 使用它)。

看起来您的 Windows(或其某些部分)使用了 32 位,而它应该使用更多。Windows 和 Ubuntu 争论应该把辅助分区表放在哪里。Ubuntu 是对的。

据微软称[强调我的]:

微软调查了 Windows 如何支持这些大磁盘。调查结果揭示了适用于 2010 年和 2011 年之前所有版本的 Windows 的几个问题。包括 Windows 7 Service Pack 1以及带有 Service Pack 1 的 Windows Server 2008 R2。

到目前为止,已知当 Windows 处理大于 2 TB 的单磁盘存储容量时会出现以下不正确的行为:

  • 超过 2 TB 的数字容量溢出。这导致系统只能处理超过 2 TB 的容量。例如,在 3 TB 的磁盘上,可用容量可能只有 1 TB。
  • 超过 2 TB 的数字容量将被截断。这会导致可寻址空间不超过 2 TB。例如,在 3 TB 的磁盘上,可用容量可能只有 2 TB。
  • 存储设备未被正确检测到。在这种情况下,它不会显示在设备管理器或磁盘管理窗口中。

我猜您之所以遇到这种情况,是因为克隆的磁盘足够小,不会在 Windows 7 SP1 中引起问题。可能是 1 GB(根据 HP Factory Recovery 分区位于旧磁盘末尾的位置判断)。

当前 Windows 系统分区上的文件系统已损坏。可能可以修复其结构,但您不能确定损坏是否会影响重要文件。即使现在可以使用,损坏的文件也可能会在未来造成问题。

警告:以下步骤可能不是最佳解决方案。我从未遇到过您的问题,因此我从未尝试过从中恢复。这只是我想尝试的方法。您可能需要等待其他答案(或评论)出现。

如果您仍拥有包含旧数据的旧磁盘,并且愿意放弃对 Windows 克隆副本所做的任何更改,那么您可以按以下步骤操作:

  1. 断开新磁盘(以避免 UUID 冲突),连接旧磁盘。
  2. 启动旧版 Windows。
  3. 安装更新,这样你的 Windows 就可以完全支持 3 TB 磁盘了。(尽管本文提到“错误配置的系统设置、注册表中的不规则条目或英特尔® 快速存储技术”也可能会干扰)。
  4. 再次克隆。我只会将旧的 Windows 分区克隆到大磁盘上已经存在的分区;Ubuntu 将保持不变;大磁盘上的 GRUB 或/和 EFI 启动项可能需要更新才能正确启动 Windows。

如果您无法恢复到旧 Windows,您可以尝试以下操作:

  1. 如果可能的话,不要让 Windows 写入辅助分区表。
  2. chkdsk在包含 Windows 的文件系统上运行(通常C:\)。我不确定这有多安全。请注意,Windows 分区的一部分位于 Windows 认为的最后一个扇区之外,因此该工具可能无法正常工作。将磁盘连接到其他(全面更新)Windows 上并chkdsk在那里运行可能会更安全(但如果你想为此使用 USB 外壳,请注意有些外壳可能会引起麻烦)。
  3. 安装更新,以便您的 Windows 可以完全支持 3 TB 磁盘。

相关内容