我之前使用的是 WD20EARS 硬盘,其 7 针和 8 针已跳线,以便在不支持 4k 扇区的操作系统上使用。但现在,我想将该硬盘转移到支持 4k 扇区的操作系统。
我拔下跳线,将其连接到 Windows Server 2008 R2,并执行了快速格式化。然而,磁盘检查报告“每扇区字节数”属性仍为 512。
为了将此驱动器用作 4k 扇区驱动器,我还需要做什么?
答案1
我认为这是正确的行为。4k 磁盘在接口端仍报告 512 字节扇区。尽管它们在内部以 4k 块的形式寻址扇区。
大多数驱动器中的跳线仅用于启用扇区移位。在大多数驱动器上,它将扇区寻址移位 1。原因是非 4k 感知操作系统,如 Winodws XP。为了理解,您需要知道 Windows XP 确实会创建第一个从扇区 63 开始的分区(是的,这不是拼写错误)。
在大多数情况下,Windows 将使用具有 4k 分配单元(NTFS 簇)的文件系统。因此,您可以假设当您从传统驱动器读取 NTFS 簇时,它只需读取 8 个物理块。非常简单。
现在驱动器也将使用 4k 扇区大小。这完全没问题,因为操作系统永远不会读取小于 4k 的簇,因为这是最小的分配单元(假设您在格式化期间没有强制使用较小的 FS 簇)。正如我所写,出于兼容性原因,驱动器仍然在接口级别公开 512 字节扇区。但是,如果您只读取一个 512 字节块,那么驱动器内部无论如何都会读取 4k 扇区,然后将其拆分为仅通过电缆接口发送 512 字节。
那么现在问题出在哪里?###
Windows XP 的问题在于,分区默认与块 63 对齐。这导致 NTSF 簇与物理块不对齐。我创建了一个小图来说明这一点:
正如您在 Windows XP 上看到的图片所示,逻辑簇与物理 4k 块不对齐。因此,如果 Windows 读取逻辑 NTFS 簇,它要求驱动器读取两个块,而不仅仅是一个。更糟糕的是,如果您只需要一个 NTFS 簇,它会读取两个扇区并必须合并它们,以便仅将请求的数据返回给操作系统。
对于写入操作,情况更糟。在这种情况下,驱动器必须读取两个物理 4k 扇区,然后将其内容与新 NTFS 簇的内容合并,然后才能将两个扇区保存回磁盘。这意味着驱动器必须读取 8k,在缓冲区中合并并写入 8k,而不是仅仅通过覆盖来替换 HDD 上的扇区。这会大大减慢写入操作的速度。
为了防止不必要的合并,HDD 制造商添加了一个“兼容性”黑客,可以通过跳线启用。它只是将每个 512 字节扇区地址增加 1。因此,Windows 创建的第一个分区将从扇区 64 开始,映射如下所示:
现在,对逻辑 4k NTFS 块的任何读/写都会导致一个物理扇区的读/写。
当然,如果您已经创建了与 4k 扇区边界对齐的分区,则根本不需要此解决方法。例如,在 Linux 上,您可以简单地使用它fdisk
来定义分区从哪个块开始。因此,在这里使用 8 的倍数是个好主意。
据我所知,自 Vista 以来,Windows 将从扇区 2048 开始启动第一个分区。因此,此问题不再发生。
警告:如果您仍在 Vista、Win7 或 Win2k8 R2 等支持 4k 的操作系统上使用跳线解决方法,那么这实际上可能会破坏扇区对齐。原因是驱动器将再次将扇区地址增加 1,导致第一个分区与扇区 2049 对齐,这又会导致性能大幅下降。
因此,如果您使用的是支持 4k 的操作系统,请确保在对驱动器进行分区之前移除跳线。对于您的具体情况,我认为只要您在移除跳线的情况下对驱动器进行重新分区,一切都应该没问题。格式化驱动器与扇区对齐和 4k 寻址无关。格式化期间唯一需要确保的是不要使用小于 4k 的簇大小,因为 2k NTFS 簇只会导致需要从操作系统读取每个 HDD 访问的完整 4k 扇区。顺便说一句:使用 8k NTFS 簇仍然完全没问题,因为磁盘只会为每个 NTFS 读/写操作读取 2 个扇区。