我想对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/sdb
MBR 的引导代码区域。在我对链接问题的回答中,有一张图表比较了 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