剧情

剧情

剧情

我有一个WD10JPVT1Tb 磁盘位于IcyBox IB-290StUS-BUSB/esata 外壳。

  • 当我通过 USB 连接磁盘时,我得到 512 逻辑/512 物理扇区大小。
  • 当我通过计算机的本机 esata 端口连接磁盘时,我得到了 512 逻辑/4k 物理扇区大小。
  • 当我通过AKE 隐藏式 USB 3.0 + eSATA II ExpressCard 54 毫米的 esata 端口,我得到了 4k 逻辑/4k 物理扇区大小。

问题

问题在于,在 MBR 分区表中,分区的开始和结束以 (逻辑) 扇区数表示。这意味着,如果我在通过 expresscard 的 esata 端口插入磁盘时对其进行分区,然后将其插入 USB 端口或本机 esata 端口,则分区将具有错误的偏移量和错误的大小,反之亦然。

fdisk输出

下面的命令fdisk是使用 Ubuntu 11.04(natty)运行的,并且对于 expresscard 上的 USB 和 esata,使用 XUbuntu 12.04 得到相同的结果,但我无法测试原生 esata,因为这是我启动 Ubuntu 12.04 的方式。

通过 USB 连接:

> sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c2664

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       15201   122095104    7  HPFS/NTFS

通过计算机原生的 esata 端口连接:

> sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000c2664

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       15201   122095104    7  HPFS/NTFS

通过 expresscard 的 esata 端口连接:

> sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 15200 cylinders
Units = cylinders of 16065 * 4096 = 65802240 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000c2664

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       15201   976760832    7  HPFS/NTFS

解决方案?

  • 有没有办法将“真实”扇区大小(4k)存储在 MBR 分区表内?
  • 使用 GPT 分区表可能有效,但 GPT 头存储在磁盘的第 1 扇区中...并且扇区大小会有所不同,因此,除非有办法将 GPT 头存储在以字节为单位的固定位置,否则它是无用的。
  • 格式化没有任何分区的原始驱动器是可行的,但在 ubuntu 11.04 下,我必须手动挂载磁盘(/dev/sdb),因为 Hal 尝试挂载不存在的分区(/dev/sdb1、/dev/sdb2、...),尽管它正确检测到文件系统标签。
  • 我可以手动创建两个重叠的分区,一个使用 4k 扇区,另一个使用 512 扇区,每次我插入磁盘时,一个分区将无效,而另一个分区将被使用,但这感觉很丑陋和脆弱。

答案1

您对 MBR 和 GPT 等磁盘格式进行了深入的分析,似乎遇到了这些标准中未曾想到的一个问题,即独立于逻辑扇区大小的格式。

问题在于,USB 磁盘的内部扇区大小为 4K,但根据所连接的端口,会伪装成不同的扇区大小(逻辑扇区和物理扇区)。实际上,它还会伪装成不同的柱面/扇区配置,尽管这种映射至少是一致的。

改变此行为需要:

  1. 磁盘固件的变化
  2. 更改端口上使用的协议,这意味着 USB 磁盘使用的磁盘驱动程序发生变化

在我看来,这两个选项都不可能自己做到。我在 Western Digital 网站上没有找到任何适用于您的磁盘的固件更新,也没有搜索更好的磁盘驱动程序(部分原因是我不知道到底要搜索什么,但即使我知道,我也不会太乐观)。

2012 年 6 月的以下帖子也提出了同样的问题,
我该如何强制 Debian 使用硬盘上的物理扇区大小?

这是令人沮丧的公认答案(引用了 2011 年 7 月的一篇文章):

根据西部数据代表的采访,http://www.techarp.com/showarticle.aspx?artno=734当前高级格式驱动器上没有禁用 512e 仿真的选项。

[...] 西部数据是否会提供固件升级,将当前以仿真模式运行的高级格式驱动器转换为原生格式?

很遗憾,不行。当前的高级格式硬盘无法通过固件升级转换为以原生格式运行

我希望其他人能给出更好的答案,但我自己的答案往往是否定的。如果您希望保证数据安全,我不会建议尝试制作非标准的 GPT/MBR 格式。

相关内容