分区软件工具中分区表显示不正确

分区软件工具中分区表显示不正确

我想对sdb3分区做一些工作:

sudo fdisk -l

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
16 heads, 63 sectors/track, 1938021 cylinders, total 1953525168 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
Disk identifier: 0x2052474d

   Device Boot      Start         End      Blocks   Id  System 
   /dev/sdb1              63   549971855   274985896+   7  HPFS/NTFS/exFAT 
   Partition 1 does not start on physical sector boundary.
   /dev/sdb2       549971856  1470063167   460045656    7  HPFS/NTFS/exFAT 
   /dev/sdb3   *  1470063168  1810175471   170056152    7  HPFS/NTFS/exFAT

但是,我尝试过的两个分区工具(gParted 和 KDE Partition Manager)都无法找到该分区:

截屏

我是如何陷入这种境地的

我正在从 KDE 分区管理器执行分区大小调整操作。10 秒后,我想起我还想将该分区移动到另一个驱动器。单击“取消”,2 小时后 KDE 分区管理器仍在尝试取消该操作。我已强制停止它,然后在 Testdisk 的帮助下,我能够恢复 的 3 个分区sdb。进入 Windows XP 并成功chkdsk /f在 的所有 3 个 NTFS 分区上运行sdb。现在它们都可以在 Linux 和 Windows 中安装和使用,显然一切正常。

我该如何让这 3 个分区再次显示在分区软件中?

编辑1

kellogs-PC kellogs # lsblk /dev/sdb
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdb      8:16   0 931,5G  0 disk 
├─sdb1   8:17   0 262,3G  0 part /media/kellogs/downloads 2
├─sdb2   8:18   0 438,8G  0 part /media/kellogs/para backup
└─sdb3   8:19   0 162,2G  0 part /media/kellogs/Win8

编辑2

Kamil 的回答@https://superuser.com/a/1225632/60373对我没什么用。

忘记提一个重要的事情。这台机器有 3 个操作系统

/dev/sda - Windows XP,Linux /dev/sdb - Windows 8.1

在此处输入图片描述 在此处输入图片描述

/dev/sda1 是 Win XP 分区,显然上面有 Win8 的加载程序:

kellogs-PC kellogs # update-grub
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-3.13.0-24-generic
Found initrd image: /boot/initrd.img-3.13.0-24-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
  No volume groups found
Found Windows 8 (loader) on /dev/sda1
done

我觉得这很好,但是... Windows 8.1 无法加载。同样,Win8(又名sdb3) 分区在 Win XP 和 Linux 中安装正常。在互联网上搜索错误代码“0xc000000e”并没有给我的问题提供明确的答案。

答案1

我认为 MBR 分区表已损坏。虽然 fdisk 能够识别分区,但 parted 本身却卡住了。KDE 分区管理器和 GParted 都依赖 libparted 进行分区检测,因此显示的信息不正确。

我建议重新创建一个具有与以前完全相同的分区边界的分区表。

您可以在这里检查我的尝试:https://stikonas.eu/files/sdb.mbr.new

还请注意,您的分区未沿 MiB 边界对齐。对于旧 HDD 磁盘来说,这可能不是太大问题,但对于 SSD 来说,这很重要。

答案2

编辑:
不幸的是这个答案不能解决 OP 的问题。不过我不会删除它(至少现在不会)。它记录了一次失败的尝试,具有一定的教育价值。它还可以防止其他人发布相同的可能解决方案。

(编辑到此结束,原始答案如下)。


你的情况可能类似于,但有些不同。我承认我无法准确解释你所描述的行为是如何导致这种情况的,但我认为我的以下理论是合理的

在链接的问题中确实存在一个超级软盘(即整个设备上的文件系统,没有分区表)但大多数程序(包括 Windows)首先检测到它的(无效的)分区表。

您有一个有效的分区表,大多数程序都应该能检测到它(就像 Windows 一样)。但 KDE 分区管理器仍然认为您的磁盘是一个超级软盘,整个设备上都是 NTFS 文件系统。它似乎首先尝试检测超级软盘文件系统,如果成功,它会跳过其他测试。我猜测MBR的某些部分/dev/sdb会误导您的分区管理器。

如果你没有从/dev/sdb(即那里的引导代码完全没用,你/dev/sda只能从那里引导,而且是肯定的)你可以将零写入/dev/sdbMBR 的引导代码区域。在我对链接问题的回答中,有一张图表比较了 MBR 和 NTFS VBR:

    MBR    │ byte offset │  NTFS VBR
           │  hex / dec  │
───────────┼─────────────┼─────────────
           │ 0x000 / 000 │ mainly NTFS
 bootstrap │      …      │  metadata
   code    ├─────────────┼─────────────
           │ 0x054 / 084 │
           │      …      │  bootstrap
───────────┼─────────────┤    code
 partition │ 0x1BE / 446 │
   table   │      …      │
───────────┼─────────────┼─────────────
   0x55    │ 0x1FE / 510 │    0x55
   0xAA    │ 0x1FF / 511 │    0xAA
───────────┴─────────────┴─────────────

将零写入磁盘的前 84 个字节就足以防止任何工具在(所谓的)超级软盘上找到 NTFS 签名。

在 Linux 中:

# making backup of the entire MBR just in case
dd if=/dev/sdb of=~/sdb.mbr.backup bs=512 count=1

# zeroing alleged NTFS metadata, use 'bs=446' to zero the entire bootstrap code of MBR
dd if=/dev/zero of=/dev/sdb bs=84 count=1
sync

然后(重新)启动 KDE 分区管理器,看看是否有帮助。如果没有帮助,最好恢复更改,以防您错误地认为引导代码/dev/sdb不重要。

# reverting
dd if=~/sdb.mbr.backup of=/dev/sdb
sync

相关内容