我有一块 4TB 的硬盘 /dev/sdb,其中有一个格式化的 NTFS 文件系统,占据了整个硬盘。它似乎没有任何分区表,或者如果有,也是过期或损坏的。
fdisk -l
显示如下:
Disk /dev/sdb: 4000.8 GB, 4000787030016 bytes
255 heads, 63 sectors/track, 486401 cylinders, total 7814037168 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
This doesn't look like a partition table
Probably you selected the wrong device.
Device Boot Start End Blocks Id System
/dev/sdb1 ? 6579571 1924427647 958924038+ 70 DiskSecure Multi-Boot
Partition 1 does not start on physical sector boundary.
/dev/sdb2 ? 1953251627 3771827541 909287957+ 43 Unknown
Partition 2 does not start on physical sector boundary.
/dev/sdb3 ? 225735265 225735274 5 72 Unknown
Partition 3 does not start on physical sector boundary.
/dev/sdb4 2642411520 2642463409 25945 0 Empty
Partition table entries are not in disk order
gdisk -l
表示仅存在 MBR 分区表。
在 Linux 下运行时,驱动器工作正常;我可以毫无问题地挂载 /dev/sdb。但我想使用 Windows 机器上的硬盘驱动器外壳加载驱动器,以便可以chkdsk
在其上运行。然而,Windows 看到此 MBR(如 fdisk 中所示),并显示 4 个分区,其中没有一个可用(甚至没有一个标记为 NTFS)。
是否可以简单地将分区表写入此驱动器而不更改 NTFS 文件系统的内容,以便 Windows 7 可以将其作为占用整个驱动器的单个分区进行访问?如果可以,怎么做?
编辑:如果无法简单地编写分区表,是否有一些非破坏性的方法来实现在 Windows 下使用驱动器的相同目标,也许通过将文件系统缩小几千字节,然后编写分区表?(即使用gparted
)。
答案1
在这种特殊情况下,您无法将 MBR 写入此驱动器,因为您将丢失其中的所有数据。最好的方法是将所有数据复制到其他地方,然后使用 Windows 对驱动器进行分区diskmgmt.msc
。
答案2
原则上,你可以做这样的事情:
- 用于
ntfsresize
将现有文件系统缩小少量(理论上, 2081 个扇区应该足够了,但为了安全起见,我至少会缩小 2 MiB)。 - 将文件系统“移入”磁盘中某个固定量。1 MiB 应该是最佳值。这是比较棘手的部分,因为您将从同一设备读取和写入数据,并且必须以不会在复制之前覆盖数据的方式完成此操作。换句话说,您必须从文件系统的末尾开始复制,而不是从头开始执行更常见的方法。除了 GParted 等分区调整工具之外,我不知道还有什么工具可以做到这一点——据我所知,这些工具都需要存在分区表。用于执行
dd
此操作的脚本是可能的,并且编写起来并不难,但需要仔细测试。 - 在磁盘上创建一个分区表以及一个从文件系统的新起点开始到文件系统结束位置的单个分区。
除非你能找到一个可以安全完成第 2 步的工具,否则按照 pbies 的建议,从磁盘复制数据、创建分区,然后恢复数据可能是最好的解决方案。这甚至可能比尝试移动整个文件系统更快,特别是当文件系统几乎为空时。即使你找到了一个可以一次性完成第 2 步(或整个过程)的工具,我还是强烈建议在继续之前创建备份,因为我在这里概述的过程非常危险。
顺便说一句,听起来你一直在 Linux 中专门使用此 NTFS 磁盘。你发现了一个不这样做的令人信服的理由:Linux 的 NTFS 维护工具充其量只是最基本的。如果你打算专门从 Linux 访问数据,我建议你备份、创建分区、创建Linux 原生文件系统,并将数据恢复到新的 Linux 原生文件系统。这将使您能够更好地从 Linux 内部修复文件系统损坏,而无需 Windows 参与。