fdisk 扇区大小和对齐问题

Sir*_*ack 10 partitioning maintenance fdisk

我执行了命令:

# fdisk /dev/sda1
Run Code Online (Sandbox Code Playgroud)

输出是:

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

Command (m for help): p

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xe0c5913d

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              63    40965749    20482843+  1c  Hidden W95 FAT32 (LBA)
Partition 1 does not start on physical sector boundary.
/dev/sda2   *    40966144   334567423   146800640    7  HPFS/NTFS/exFAT
/dev/sda3       334567424   753997823   209715200   83  Linux
/dev/sda4       753999870  1953525167   599762649    5  Extended
Partition 4 does not start on physical sector boundary.
/dev/sda5       753999872  1949376511   597688320   83  Linux
/dev/sda6      1949378560  1953525167     2073304   82  Linux swap / Solaris
Run Code Online (Sandbox Code Playgroud)

我遇到了麻烦,因为以下项目:

  • 设备呈现的逻辑扇区大小小于物理扇区大小。建议对齐物理扇区(或最佳 I/O)大小边界,否则性能可能会受到影响。

  • 分区 1 不在物理扇区边界上开始。

  • 分区 4 不在物理扇区边界上开始。

如何在不丢失文件和分区的情况下解决其中一项或多项问题?

保持原样我会有什么问题?

Rod*_*ith 11

对于大多数现代磁盘来说,逻辑扇区大小小于物理扇区大小是正常的。这就是最常见的高级格式化磁盘的实现方式。一些外部磁盘对物理和逻辑扇区使用相同的(4096 字节)扇区大小,我听说一些高端内部磁盘现在也这样做,但现在大多数磁盘都是具有 512 字节的高级格式模型逻辑扇区和 4096 字节物理扇区。对此您无能为力(或应该尝试)。

也就是说,正确对齐高级格式磁盘的分区很重要。我在高级格式磁盘上运行了一些测试,以确定当它们的分区未对齐时会发生什么,并在此处发布结果简而言之,从一个文件系统到另一个文件系统,从一个磁盘到另一个磁盘,问题的程度差异很大,但几乎总是与未对齐的分区相关的显着(有时是巨大的)性能损失。

/dev/sda4但是,您的不直接保存文件系统;它是一个扩展分区,这意味着它只是其他分区的容器。直接关联的数据/dev/sda4只是两个(逻辑)扇区,它们甚至可能彼此都不相邻,因此它们无法正确对齐。真正的性能损失将来自/dev/sda4. 在您的情况下,/dev/sda4持有/dev/sda5/dev/sda6,两者都正确对齐。因此,您无需担心/dev/sda5. 您看到的警告只是代码过于热衷于报告不存在的“问题”。

/dev/sda1,在另一方面,没有正确对齐-它开始段63,这是不整除8.关于是否取决于有多少你使用的分区,你如何使用它(文件大小,你应该做的事情,读取与写入等),从中获得最佳性能有多重要,是否有足够的备份等。我建议您阅读我之前引用的文章,然后决定是否解决问题。(由于篇幅原因,我没有在那篇文章中报告 FAT 结果,但 FAT 性能受到了相当大的影响——IIRC,不像 ReiserFS 那样糟糕,但至少与大多数其他 Linux 原生文件系统一样糟糕。)

如果您决定要修复/dev/sda1,则应从备份开始。完成后,修复它的一种方法是删除它,在其位置创建一个新分区,然后恢复其文件。另一种方法(备份后)是在 GParted 中调整分区大小。对起点做一个微小的改变;任何最新版本的 GParted 都应该四舍五入到 2048 个扇区的倍数,你会没事的。移动分区的起点总是比移动终点风险更大,花费的时间也更长。由于分区只有 19GiB 大小,所以操作应该不会花费太多时间,甚至移动起点,但它不会是瞬时的。

作为旁注和背景,只有相当老的工具才能使现代高级格式磁盘上的分区不对齐。我的猜测是,你使用这样的工具(旧版本的Linux年代fdisk或DOS FDISK,也许)创建/dev/sda1,然后用更现代的工具(更近fdiskparted或的gparted,可能)来创建分区的其余部分。