分区错位了 512 字节

use*_*904 3 hard-drive partitioning

我刚买了一台新笔记本电脑。而且我一直在设置新的分区。我通常插入一个 Linux liveboot 操作系统,创建分区,然后将操作系统安装到硬盘上。

但是在安装操作系统后,我打开“磁盘工具”,警告:

The partition is misaligned by ###bytes. This may result in very poor performance. Repartitioning is suggested
Run Code Online (Sandbox Code Playgroud)

为驱动器中的每个选定分区显示。即使我对整个磁盘进行了大约 2-3 次分区和重新分区,警告仍然存在。

一开始我以为是因为一些错误。但这种错位拒绝消失。我上次分区时,一个分区最终没有任何错位。所有其他人都错位了。

这就是我通常对驱动器进行分区的方式:

    |--Part1--|--Part2--|--Part3--|----Extended Partition----|
    |---------|---------|---------|---swap---part5---part6---|
Run Code Online (Sandbox Code Playgroud)

在我早期的笔记本电脑上,我多次使用这个方案。但它在这个新硬盘上不能很好地工作。我尝试过 Mint 和 Ubuntu。我目前正在使用 Mint,它的分区没有错位

更新 1

运行时sudo fdisk -l /dev/sda输出如下:

/dev/sda1              63    80276804    40138371   83  Linux
Partition 1 does not start on physical sector boundary.
/dev/sda2        80277504   136921087    28321792   83  Linux
/dev/sda3   *   136921995   215046089    39062047+   7  HPFS/NTFS/exFAT
Partition 3 does not start on physical sector boundary.
/dev/sda4       215046151   976768064   380860957    5  Extended
Partition 4 does not start on physical sector boundary.
/dev/sda5       215046153   220909814     2931831   82  Linux swap / Solaris
Partition 5 does not start on physical sector boundary.
/dev/sda6       220909878   390829319    84959721    b  W95 FAT32
Partition 6 does not start on physical sector boundary.
/dev/sda7       390829383   976768064   292969341    b  W95 FAT32
Partition 7 does not start on physical sector boundary.
Run Code Online (Sandbox Code Playgroud)

更新 2

/sys/block/sda/queue/physical_block_size 表示 4096。

硬盘是华硕 X55C 上的 Hitachi HTS5。所以我猜它是 2009 年后的版本。

我在使用 Linux Mint Cinnamon 实时启动 USB 安装操作系统时对该驱动器进行了分区。看到警告后,我再次使用 Ubuntu 12.04 实时启动 USB 对驱动器进行了完全分区。我有一段时间同时使用 Linux Mint 和 Ubuntu 12.04。然后我删除了 Ubuntu。

更新 3 - 问题的解决方案

如前所述,只有一个分区正确对齐。所以,我跑了GParted,删除了未对齐的分区,然后再次创建了它们。我注意到的一些事情:

  1. 如果我尝试在 中创建分区Disk Utility,则会发生错位。但是,如果我在创建的分区GParted,它有力地放入最小preceding 1 MiB freespace。现在没有错位。
  2. 我有一个NTFS分区,我在其中安装了 Windows。但它错位了大约 2000 个字节。因此,我尝试在可用空间之前使用 1 MiB 移动它。一切都很好,但是当我不看屏幕时 GParted 崩溃了。但我几乎可以肯定,如果该过程完成,错误就会得到纠正。

我删除了所有以前的分区,除了 /dev/sda2 并使用GParted. 这是现在的输出sudo fdisk -l /dev/sda

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    80277503    40137728   83  Linux
/dev/sda2        80277504   136921087    28321792   83  Linux
/dev/sda3       136921088   200579071    31828992   83  Linux
/dev/sda4       200579072   976773119   388097024    5  Extended
/dev/sda5       200581120   206725119     3072000   82  Linux swap / Solaris
/dev/sda6       206727168   413573119   103422976    7  HPFS/NTFS/exFAT
/dev/sda7       413575168   620421119   103422976    7  HPFS/NTFS/exFAT
/dev/sda8       620423168   976773119   178174976    7  HPFS/NTFS/exFAT
Run Code Online (Sandbox Code Playgroud)

我的问题

请帮助我理解这个问题。由于我还没有收到完整的答案,以下是我的问题:

  1. 之前用过的工具我也用过。那为什么分区错位了呢?
  2. 这可能是由于硬盘驱动器中的物理问题造成的吗?
  3. Ubuntu 和 Linux Mint 实时引导安装程序中的分区工具是否会出现此类问题?

使用磁盘工具对驱动器进行分区是不可能的,但是使用 GParted 和1 MiB freespace preceding aligned to MiB.

Rod*_*ith 5

一些工具会在此问题上产生误报。要验证该问题,您必须使用一个工具来显示扇区中的分区起始点。对于 MBR 磁盘,您可以使用fdiskparted及其unit s选项。对于 GPT 磁盘,您可以使用gdiskparted及其unit s选项。例如:

fdisk -l /dev/sda
parted /dev/sda unit s print
gdisk -l /dev/sda
Run Code Online (Sandbox Code Playgroud)

您需要将这些命令键入root或使用sudo. 输出的细节与一个程序和另一个程序略有不同,但它看起来像这样:

$ sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): B322E151-7686-4B94-ACDF-F8F4CC2E9813
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 8-sector boundaries
Total free space is 6690 sectors (3.3 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          390625   189.7 MiB   EF00  EFI System
   2          390626          803249   201.5 MiB   8300  Gentoo /boot
   3          803256         1212850   200.0 MiB   8300  Unused
   4         1212851       976768064   465.2 GiB   8E00  Linux LVM data (nessus)
   5       976768065       976768464   200.0 KiB   EF02  BIOS boot partition
Run Code Online (Sandbox Code Playgroud)

(请注意,如果你使用fdisk和看到的代码分区ee的下Id栏,您已经有了一个GPT磁盘,它的输出是没用的。你必须使用partedgdisk非常最近fdiskGPT磁盘上。)

检查起始扇区值。正确对齐的分区的起始扇区值是 8 的倍数。在此示例中,分区 1 和 3 正确对齐,但分区 2、4 和 5 未对齐。对于 MBR 磁盘,请忽略扩展分区的任何“错位”;只有主分区和逻辑分区需要正确对齐。

另请注意,8 扇区对齐仅对高级格式 (AF) 磁盘很重要。(SSD 和某些类型的 RAID 阵列有其自身的对齐问题。细节各不相同,但对齐 2048 个扇区适用于大多数磁盘。)如果您的磁盘是较旧的非 AF 磁盘,则无需担心这个问题。AF 于 2009 年底首次推出,但即使在 2010 年,许多新磁盘也不是 AF 型号。今天,大多数新磁盘都使用 AF,但我不知道有多少(如果有)非 AF 磁盘正在销售。

有关更多信息,请参阅我关于该主题的文章


编辑:你的大部分分区都没有对齐;只有分区 #2 从 8 扇区边界开始。我的预感是,您的分区最初是使用旧的分区工具进行布局的——一种使用柱面对齐而不是 1-MiB 对齐的工具。

这可能重要也可能不重要;这取决于磁盘是否使用高级格式化技术。确定这一点的最可靠方法是检查制造商的技术规格表;但是,该/sys/block/sdX/queue/physical_block_size文件(其中sdX是驱动器标识符,例如sdasdb可能包含可靠的信息。

当然。如果显示为4096,则该磁盘几乎可以肯定是高级格式模型。如果它具有 值512,则您可能没有高级格式磁盘——或者内核可能会误报此数据。如果磁盘早于 2009 年 12 月,则它不是高级格式磁盘。

有关这方面的更多信息,请阅读我的 IBM developerWorks 文章


编辑 2:请参阅上面引用的文章。该问题是由使用过时的分区软件引起的。除非您使用高级选项来更改对齐策略,否则最近的 Linux 工具(包括 Ubuntu 和 Mint 的安装程序)应该不会产生此问题。此问题不是由有缺陷的硬件引起的,但您应该确定某些 Western Digital 驱动器上的“Windows XP 兼容性”跳线设置。