我正在尝试对 USB 3 驱动器进行分区,但由于某种原因,parted 无法正确设置起始扇区。该驱动器与多个其他 SATA 驱动器相同,唯一的区别是它位于集成了 2 端口集线器的 USB 3 外壳内。我不会,尽管这很重要。
以下是我之前经常使用的步骤:
sudo parted /dev/sd?
mklabel gpt
mkpart primary 0% 100%
quit
以下是最后 2 个驱动器的 fdisk -l 输出:
Disk /dev/sdk: 7.3 TiB, 8001563222016 bytes, 15628053168 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
Disklabel type: gpt
Disk identifier: DB93D173-858A-475C-81CD-DB616E91C110
Device Start End Sectors Size Type
/dev/sdk1 2048 15628053134 15628051087 7.3T Linux filesystem
Disk /dev/sdl: 7.3 TiB, 8001563221504 bytes, 15628053167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: B3791850-76F8-4CE2-B1CC-DF40886292CE
Device Start End Sectors Size Type
/dev/sdl1 65535 15628000379 15627934845 7.3T Linux filesystem
Partition 1 does not start on physical sector boundary.
第二个驱动器是有问题的。
性能似乎确实受到了很大的影响,因为格式化为 ext4 需要很长时间(从来没有等到完成),而通常只需要几秒钟。为什么会发生这种情况?我怎样才能得到正确的对齐?
我能想到的唯一的另一个区别是它最初被格式化为 ntfs 并带有一些未分区的空间。我还运行了这个命令来清除任何剩余的分区:dd if=/dev/zero of=/dev/sdl bs=512 count=10000
但没有运气。
使用最佳对齐方式也不起作用:
sudo parted -a optimal /dev/sdl mkpart primary 0% 100%
Warning: You requested a partition from 0.00B to 8002GB (sectors 0..15628053166).
The closest location we can manage is 17.4kB to 1048kB (sectors 34..2047).
Is this still acceptable to you?
答案1
第二个驱动器的最佳 I/O 大小远大于第一个驱动器;这可能就是导致问题的原因。这篇文章来自2013年建议从(最佳 I/O + 对齐偏移)/物理块大小 = 起始切片开始手动对齐分区,并阅读如今如何分离的单词,这似乎已融入到默认情况下分离的工作方式中。现在,对参数执行数学运算会返回 8191.875 作为起始切片,这可能不是有效的扇区地址。
在我看来,您的 USB 外壳很可能歪曲了驱动器的最佳 I/O。当您使分区尝试使用mkpart primary 2048s 100%
.这应该可以解决它。
如果有机会,您可以预先检查这一点,方法是将驱动器插入没有 USB 外壳的计算机,然后检查/sys/block/[drive]/queue/optimal_io_size
它是否存在。如果不匹配,则 USB 外壳可能错误报告了驱动器的功能。
答案2
fdisk
这是util-linux 中的一个问题。我很早之前向上游报告过,它已经修复了:
https://github.com/karelzak/util-linux/commit/acb7651f8897ae73d0f45dd75bc87630001c61b9
因此,如果您在 util-linux v2.27-rc1 或更高版本中使用 fdisk创建分区,您不会遇到该问题。
我不确定是否parted
有同样的问题,如果有,它可能应该引入类似的 hack。 (因此,如果您想修复它,请向上游提交错误报告:http://savannah.gnu.org/projects/parted/)
编辑:请注意,您在两个磁盘上都使用 GPT。 IIRCgdisk
不会遇到这个问题,因为它不使用最佳 i/o 大小来计算对齐,而是静态默认为 2048,并允许您将其设置为 1 - 65536 ( x
-> l
) 之间的任何值范围。