如果我将一个分区与 24MiB 对齐,那么它是否也与此大小的任何分隔符对齐?

das*_*291 5 partitioning alignment usb-flash-drive

假设我想以闪存驱动器上的偏移量开始我的分区,因为:

虽然通常可以写入单个页面,但数据不能没有先擦除的情况下被覆盖,并且擦除只能以更大的单位进行,通常在 128KB 到 2MB 之间。控制器将这些擦除块分组为更大的段,称为“擦除块组”、“分配单元”或简称为“段”。对于数 GB 级别的驱动器,这些段的最常见大小是 4MB,并且驱动器上的所有操作都发生在这些单元中;特别是,驱动器永远不会擦除任何小于段的单元。用便宜的闪存驱动器优化 Linux

我想对齐与上述对应的每个分区,但确定数字并不容易。24MiB 相当大,但根据 flashbench 邮件列表,有6 MiB12 MiB擦除块大小的闪存驱动器。我想确保至少我的分区是对齐的,而不是总是使用 flashbench 执行测试。

因此,如果我在 49152nd + 1(因此它从“第二个 24MiB 部分”开始)512 字节扇区开始我的第一个分区,那么分区也对齐到 1,2,4,6,8 和 12 MiB ? (以此类推,例如到 128k,因为 (24*1024)/128 是整数)

har*_*ymc 5

虽然我没有闪存卡电子方面的第一手知识,但让我尝试详细说明我对该主题的理解。

首先,对齐到 24 MB 确实对齐到它的所有子倍数。但是这是否有用是另一个问题。

其次,将分区与擦除块对齐可能会让您感觉更好,但实际上重要的是文件系统内文件的对齐。由于文件系统以自己的内部表开始,因此必须强制它们占用擦除块大小的倍数,这绝非易事。因此,对齐文件系统是对齐分区后的下一个任务。

例如,阅读Theodore Ts'o为他的 SSD 磁盘实现这一目标所做的努力:
将文件系统与 SSD 的擦除块大小对齐

第三,“擦除块”一词及其对任何特定闪存驱动器的适用性与闪存盘控制器的智能成反比。现代闪存控制器变得越来越智能,甚至使用压缩,因此操作系统确实知道该驱动器背后发生了什么的想法可能只是一个虚构,可能更适用于更便宜或更旧的驱动器。

第四,块尺寸是制造技术的函数。AnandTech 文章 Micron 在 2014 年宣布 16nm 128Gb MLC NAND, SSDs 有一个有趣的汇总表,其中块大小从 512KB 到 8MB :

图片

第五,一些存储技术使用称为单元的 N 状态“位”,因此一个物理单元可能包含 1.5 或 2 个逻辑位或更多。同样,控制器负责将其转换为操作系统可以理解的术语,这当然是纯虚构的。

文章闪存卡的设计有这样一段话:

在所有 SLC 和 MLC 闪存中,擦除块大小是 2 的幂大小。在 TLC 闪存(也称为 MLC3、三位 MLC、8LC 或八级单元)中,有两种可能的布局: 擦除块可以具有三个 2 的幂部分,从而导致总大小为例如1.5MB 或 3MB,或者每个级别可以有非 2 次幂的页面数,43+43+42 个页面,每个擦除块总共 128 个页面。

阅读本文以了解有关闪存盘如何向操作系统报告基本错误的信息的更多信息。

结论:在当前不断发展的技术丛林中,无法可靠地计算擦除块的实际大小。flashbench 之类的工具可能是计算该值的唯一可靠方法,但对于更先进的闪存盘,结果可能是错误的。想象一下,例如 flashbench 写入一个 64MB 的零块,闪存控制器将其压缩为几 KB,因此 flashbench 实际上真正测量到设备的传输速率。

在我个人看来,由于分区对齐被认为是一件“好事”,因此 4 MB 就足够了(到 2014 年底,对于较新的磁盘而言,8 MB 可能会更好),而且我不会为更多而烦恼。如果有疑问,请使用 flashbench,但对结果的有效性保持开放的态度。flashbench 报告的奇怪大小可能是闪存控制器在闪存盘上完成的转换和优化的结果。


Dav*_*ter 1

是的,每个整数都是它所有除数的整数倍。

\n\n

24 MiB = 24 \xe2\x8b\x85 2 20 B = 2 \xe2\x8b\x85 4 \xe2\x8b\x85 3 * 2 24 B = 3 \xe2\x8b\x85 2 27 B = 3 \xe2\x8b \x85 2 18 \xe2\x8b\x85 512 B

\n\n

您可以使用主分隔符将 24 MiB 分割成 512 字节的单元。更具体地说,以 24 MiB 的倍数开始的每个块也将以 12 MiB、8 MiB、6 MiB、4 MiB、2 Mib、1 MiB 和 512 KiB 的倍数开始。

\n\n

现在,对于您的示例问题: 49152 = 3 \xe2\x8b\x85 2 14,它除以 3 \xe2\x8b\x85 2 18。因此,我的上述声明适用于第 49152 个 512 字节块。

\n\n

编辑:我在这里只做了一些数学计算。正如您从其他答案中看到的,您的问题的技术方面要复杂得多。

\n