与扇区大小无关的分区表

Suz*_*Soy 5 partitioning fdisk advanced-format

剧情

我在IcyBox IB-290StUS-B USB/ esata机箱内有一个WD10JPVT 1Tb 磁盘。

  • 当我通过 USB 连接磁盘时,我得到 512 逻辑/512 物理扇区大小。
  • 当我通过计算机的本机 esata 端口连接磁盘时,我得到 512 逻辑/4k 物理扇区大小。
  • 当我通过AKE Hidden USB 3.0 + eSATA II ExpressCard 54mm的 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
Run Code Online (Sandbox Code Playgroud)

通过计算机的本地 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
Run Code Online (Sandbox Code Playgroud)

通过 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
Run Code Online (Sandbox Code Playgroud)

解决方案?

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

har*_*ymc 3

您对磁盘格式(MBR 和 GPT)进行了非常深入的分析,并且您似乎遇到了这些标准中未考虑到的问题,即独立于逻辑扇区大小的格式。

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

改变这种行为需要:

  1. 磁盘固件的更改
  2. 更改端口使用的协议,即更改 USB 磁盘使用的磁盘驱动程序

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

在 2012 年 6 月发布的以下帖子中也提出了同样的问题:
How will I强制 Debian 使用硬盘上的物理扇区大小?

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

根据http://www.techarp.com/showarticle.aspx?artno=734上发布的对 Western Digital 代表的采访,当前高级格式驱动器上没有禁用 512e 模拟的选项。

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

很不幸的是,不行。当前的高级格式驱动器无法通过固件升级转换为以本机格式运行

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