我已经知道我需要做什么来解决这个问题;我只是不知道该怎么做。我希望有一些现成的工具可以自动执行此操作 - 但找不到任何工具。我接受 Rod 的回答,因为尽管没有直接解决我的问题,但它为扇区大小问题提供了非常好的背景,并使我相信该问题确实是分区对齐和寻址。对于那些遇到同样问题的人,在做任何事情之前,请彻底仔细地阅读它,包括评论。
我有一台电脑,需要更多空间,我买了一个新的 500GB 驱动器和一个 USB 外壳。很快我就注意到,如果我对机箱上的驱动器进行分区并将其移动到计算机上,它就无法识别这些分区(反之亦然)。我认为这是外壳的问题,并没有担心。
美好的一天,我的电脑决定不再打开。结果发现主板(没有品牌,只是上面印着一个很大的 MADE IN CHINA)已经死了。我一直将它用作文件服务器,而那个 500GB 的驱动器现在充满了我不能丢失的数据。我现在破产了,买不起新电脑,所以我唯一的希望是“有缺陷的”USB 外壳。
配备了几个 Linux 发行版、一台笔记本电脑、VirtualBox 和机箱,我对这个问题进行了取证分析。dmesg 报告分区大小超出驱动器末端。所以我查看了硬盘数据表,从头开始计算扇区数,用 dd 手动测试驱动器边界,一切看起来都很好,直到我启动 fdisk 并说:
Note: Sector size is 4096 (not 512).
Run Code Online (Sandbox Code Playgroud)
多么谦虚的fdisk。这个“笔记”是所有问题的根源。经过一番折腾,得出了以下结论:
USB 外壳没有缺陷。
至少现在已经死了的主板上的 SATA 控制器是一个“奇怪的”控制器。它没有向操作系统报告 4096 字节的扇区,因此操作系统愉快地使用 512 字节的扇区地址创建了 MBR。
现在,当我尝试访问分区时,操作系统会尝试在 4096 字节的扇区驱动器上使用基于 512 字节的地址,当然,这是行不通的。
那么,除了在十六进制编辑器上手动编辑 MBR 之外,如何更正 MBR 中的地址,使它们在 4096 字节扇区大小上有效,以及
分区未针对 4096 字节扇区对齐。除了复制进出另一个驱动器之外,还有一些工具可以用来对齐它们吗?(我没有备用驱动器),或者我是否需要创建一些工具将数据一次“转移”到一边一小块?分区是ext3。
谢谢!
我发现有一种聪明的方法可以使用 dd 在这个问题中就地移动分区:How to move a partition in GNU/Linux? …
我有一个 Transcend Storejet 外置 USB 硬盘。这不是SSD,而是带有旋转板的机械磁盘。我已将整个磁盘格式化为 NTFS,没有分区。我mkntfs在 Linux 下使用过工具。
当插入 Linux 机器时,系统会看到一个带有两个分区的驱动器 ( /dev/sdc /dev/sdc1 /dev/sdc2)。但是,我知道它是一个无分区磁盘,我可以挂载整个设备 ( mount -t ntfs /dev/sdc /mnt) 并且它可以正常工作。
当插入 MS Windows XP 机器时,系统会看到一个带有两个未格式化分区的磁盘,它既不会为整个磁盘分配驱动器号,也不会为任何分区分配驱动器号。
有谁知道如何让 MS Windows 将我的磁盘安装为 NTFS 超级软盘?
我已经尝试使用“DriveCleanup”删除旧的 USB 安装点和残留设备。它没有帮助。
顺便说一句,我还有一个外置的金士顿USB SSD,也格式化为NTFS超级软盘,没有分区。但是,MS Windows 可以正常识别并安装此程序。