剧情
我有一个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,但根据所连接的端口,会伪装成不同的扇区大小(逻辑扇区和物理扇区)。实际上,它还会伪装成不同的柱面/扇区配置,尽管这种映射至少是一致的。
改变此行为需要:
- 磁盘固件的变化
- 更改端口上使用的协议,这意味着 USB 磁盘使用的磁盘驱动程序发生变化
在我看来,这两个选项都不可能自己做到。我在 Western Digital 网站上没有找到任何适用于您的磁盘的固件更新,也没有搜索更好的磁盘驱动程序(部分原因是我不知道到底要搜索什么,但即使我知道,我也不会太乐观)。
2012 年 6 月的以下帖子也提出了同样的问题,
我该如何强制 Debian 使用硬盘上的物理扇区大小?
这是令人沮丧的公认答案(引用了 2011 年 7 月的一篇文章):
根据西部数据代表的采访,http://www.techarp.com/showarticle.aspx?artno=734当前高级格式驱动器上没有禁用 512e 仿真的选项。
[...] 西部数据是否会提供固件升级,将当前以仿真模式运行的高级格式驱动器转换为原生格式?
很遗憾,不行。当前的高级格式硬盘无法通过固件升级转换为以原生格式运行
我希望其他人能给出更好的答案,但我自己的答案往往是否定的。如果您希望保证数据安全,我不会建议尝试制作非标准的 GPT/MBR 格式。