taa*_*iti 3 windows usb ntfs partitioning external-hard-drive
我有一个 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 可以正常识别并安装此程序。
我可以重现您的问题并进行解释。并修复它,我想。
出于某种原因,磁盘的第一个扇区在解释为 MBR 时包含半有效分区表。任何一个操作系统都没有理由假设它是超级软盘。
我们使用的大多数磁盘都已分区。在这种情况下,磁盘的前 512 个字节是主引导记录 (MBR)。即使在GUID 分区表 (GPT) 中,出于遗留原因,前 512 个字节也会形成某种 MBR。重要的是:每个现代操作系统都希望在磁盘的最开始找到 MBR。
超级软盘是在创建文件系统时被视为分区的磁盘。在这种情况下,前 512 个字节包含Volume Boot Record (VBR),就像分区的开头通常会做的那样。
一些文件系统利用 VBR 来保存其重要的元数据,NTFS就是其中之一。MBR 和 VBR 都可以包含引导程序代码。在不可启动的设备上,这个“代码”可能是微不足道的、保护性的甚至是疯狂的。没有明确的模式,这就是为什么您不能确定您的 512 字节扇区是 MBR 还是 VBR 或其他什么。
在一般情况下,您可以做的最好的事情是检查适当的片段是否看起来像一个健全的 MBR 分区表。我认为这就是操作系统所做的。不幸的是,有可能通过此测试的 VBR。
让我们将基本 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
???????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我拿了我的 U 盘并用mkntfs -F -f /dev/sdc. 该工具覆盖了整个第一个扇区,包括引导代码区域。Windows 或其他操作系统可以暂时假定它是 MBR 并检查其分区表区域。这是它将得到的:
#fdisk -l /dev/sdc
Disk /dev/sdc: 31.5 GB, 31466323968 bytes
64 heads, 32 sectors/track, 30008 cylinders, total 61457664 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 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/sdc1 ? 6579571 1924427647 958924038+ 70 DiskSecure Multi-Boot
/dev/sdc2 ? 1953251627 3771827541 909287957+ 43 Unknown
/dev/sdc3 ? 225735265 225735274 5 72 Unknown
/dev/sdc4 2642411520 2642463409 25945 0 Empty
Partition table entries are not in disk order
Run Code Online (Sandbox Code Playgroud)
如您所见fdisk,可以看出“这看起来不像分区表”。Windows 会告诉基本相同的事情,然后它会假设扇区是 VBR,在其中找到 NTFS 签名,最后挂载。确实,您以前的 Windows XP 对此没有任何问题。还有我的 Kubuntu 报道dmesg:
sdc:未知分区表
但随后 KDE 提出将其安装为超级软盘。
请注意,任何探测分区表的工具实际上都是从 VBR 读取引导代码片段。NTFS 不需要此代码即可工作。我检查过hexdump该片段不是代码;它看起来像一组文本消息,如果我尝试从该设备启动,则会显示这些消息,例如:
Press Ctrl+Alt+Del to restart
Run Code Online (Sandbox Code Playgroud)
这意味着我可以创建一个半有效的分区表,它只会处理我可能永远不会看到的文本消息。
好吧,我就是这样做的,fdisk我创建了一个看起来有效的分区表。当然,它指向没有文件系统的“分区”,因为唯一的文件系统仍然是超级软盘上的 NTFS。
在 Windows XP 中,驱动器的行为几乎与您的驱动器一样。差不多,因为我得到了一个分配给第一个分区的字母。我真正的(超级软盘)NTFS 文件系统是新的并且是空的,而你的不是。它的一个扇区被解释为第一个假分区的 VBR。我们的部门肯定包含不同的数据,也许这就是原因。尽管如此,我相信我刚刚解开了你的谜团。
看起来好像有人要对您的超级软盘进行分区并在fdisk和之间改变主意mkfs。
在我的情况下,将零写入分区表就足够了:
dd if=/dev/zero of=/dev/sdc bs=1 seek=446 count=64
Run Code Online (Sandbox Code Playgroud)
如果我想恢复我的超级软盘的整个“引导代码”片段,我可以从另一个创建的 NTFS 分区复制它mkntfs:
fallocate -l 2MiB tmp.ntfs
mkntfs -F -f tmp.ntfs
dd if=tmp.ntfs of=/dev/sdc bs=1 skip=84 seek=84 count=426
rm tmp.ntfs
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |