零填充可以重置 USB 记忆棒/闪存驱动器的磨损均衡吗?

零填充可以重置 USB 记忆棒/闪存驱动器的磨损均衡吗?

据我了解,磨损均衡USB 记忆棒/闪存盘将要:

  • 有助于延长使用寿命。(减少“磨损”,即物理闪存单元只能写入 XX 次)
  • 只有在有未使用的闪存单元可供切换时才能真正工作。(USB 盘越满,平衡磨损的替代单元就越少)

最糟糕的情况是,在某个时间点,我耗尽了 USB 记忆棒的所有内存。那么,不太可能再发生磨损均衡。我可以/(如何)恢复此状态?

我的意思是,就 U 盘而言,什么是空的

0000 0000 0000 0000(零填充)在我看来就像
1111 1111 1111 11111010 1110 0011 1111或任何其他位模式一样有效数据。

Usb 棒的固件需要以某种方式知道什么被视为“没用过”闪存单元,以便可以再次将其用于磨损均衡。但是在我一次性填满整个 USB 棒之后,我很难理解固件如何能够确定哪些数据可以“覆盖”,因为它不包含数据?

我的问题是:零填充可以成为重置 USB 棒磨损均衡的一种方法吗?

虽然我担心这可能经常取决于实现(“固件”和“制造商”),但我仍然认为这种方法可能存在逻辑,即假设“零填充”可以在某些设计更好的设备上重置 USB 记忆棒 -USB 记忆棒

我想象的逻辑是,固件的磨损均衡将识别出整个块(即 512 字节或 2k 字节)将被设置为仅零。

阻止前:1101 1011 1000 0010 ... 0001 0011
阻止后:0000 0000 0000 0000 ... 0000 0000

当我从这个块读取时,我当然希望收到以下信息:
块后:0000 0000 0000 0000 ... 0000 0000 但是可以通过将块 XYZ= 空存储在仅对固件可用的某个闪存单元中来动态生成此信息。

如果是这种情况,则池在“重置”(通过零填充)时将能够用于其他目的,因为信息存储在棒的 BLOCK XYZ=empty 固件内存部分中。

我读到过应该有一些 USB 棒具有这样的固件,因此可以重置?这是真的吗?我想知道这个问题是否可能是一种“趋势”,并得到了知名制造商的信息支持。也许甚至存在一个列表,列出了可以通过这种方式重置的 USB 棒。这样答案就可以包含指向此类列表的链接。

此外,我假设没有为生产的每款 USB 设备设计“新固件”,也许有一个著名的(经常使用的)USB 固件可以进行这样的磨损均衡。那么这个问题就可以根据该固件来回答。

最好有一些聪明人能够想出一种方法来回答这个问题,其中包含一些指令,使我们用户(超级用户)能够“找出”这种磨损均衡是否启用。

我的问题的一些背景

USB 棒/闪存驱动器确实不错。但问题是它们存储数据的方式会磨损,这意味着在仅向数据单元写入 XX 次后 !BINGO! 您的棒就坏了!

缓解该问题的方法(即闪存单元只能写入很少次数)是“磨损均衡”。这将关注 - 如果可能的话 - 数据并不总是写入相同的闪存单元

其工作原理是,数据(当更改时)不会一直写入相同的物理单元,而是写入其他新的物理单元。这减少了“压力”,因为在最好的情况下,这种情况会一直持续下去。

为了帮助理解磨损均衡的一些基础知识,我在下面加入了这个概念,它展示了“hello”、“salut”、“hola”和“hi”的信息如何存储在名为数据,实际上每次都会写入不同的物理闪存(因此有磨损均衡的一个小“概念”)。

状态 1:
[CELL1:空] [CELL2:空] [CELL3:空]


=> 写入数据“你好”


状态 2:
[CELL1:你好] [CELL2:空] [CELL3:空]
 数据=CELL1

=> 更新数据为“salut”


状态 3:
[CELL1:你好] [CELL2:问候] [CELL3:空]
 数据=CELL2

=> 更新数据为“hola”

状态 4:
[CELL1:你好] [CELL2:你好] [CELL3:你好]
 数据=CELL3

=> 更新数据为“hi”

状态5
[CELL1:你好] [CELL2:你好] [CELL3:你好]
 数据=CELL1


观察写 4 次之后数据每个单元格平均只被写入 1.33 次。同时观察单元格中包含“逻辑数据“也将被存储和更新(这需要固件来执行此核算 - 为此也使用一些保留的内存)

答案1

有些闪存驱动器可以检查写入的数据是否全为零,然后取消映射该区域,而不是对闪存进行编程。虽然我不知道它有多普遍。

目前我正在研究 MMC 控制器(不能告诉你是谁的,这是个秘密 :-)),它的固件会检查数据内容,不是在写入时,而是在稍后的擦除和 GC 期间。它会取消映射所有发现的零区域。

至于如何

“查明”此磨损均衡是否启用。

您可以尝试比较先前写入的零填充数据块和随机填充数据块的读取速度(最好在写入后关闭驱动器以避免使用缓存)。如果您的闪存驱动器检查传入数据的内容并仅取消映射已写入区域,则读取此区域应该会快得多,因为控制器可以跳过从闪存进行实际读取(这是一个耗时的操作)。

答案2

但是,在我一次性填满整个 USB 棒之后,我很难理解固件如何能够确定哪些数据可以被“覆盖”,因为它不包含数据?

TRIM 旨在解决这个问题,它提供了一种机制,让操作系统可以告诉驱动器它不希望某个扇区保存数据。TRIM 是 SAS/SATA 规范,而不是 USB 规范,因此遗憾的是,它不适用于 USB 闪存驱动器。

如果没有 TRIM,驱动器就认为不需要数据,这是不安全的。

零填充可以成为重置 USB 棒磨损均衡的一种方法吗?

当然,如果固件以这种方式工作的话。没有固件的源代码或开发人员文档,就无法确切知道。闪存芯片以页面和块为单位工作。该芯片一次只能擦除整个块(例如 128KB),这些块由许多页面(例如 2KB)组成,这些页面通常比 USB 驱动器模拟的传统硬盘扇区(512 字节)大。

也许甚至存在一个列表,其中列出了可以通过这种方式重置的 USB 记忆棒。这样答案就可以包含指向此类列表的链接。

考虑到如今 USB 闪存盘非常便宜,制造商很可能没有必要提供此信息。

此外,我假设没有为生产的每款 USB 设备设计“新固件”,也许有一个著名的(经常使用的)USB 固件可以进行这样的磨损均衡。那么这个问题就可以根据该固件来回答。

每个 USB 闪存驱动器都有一个微控制器(微控制器 = CPU + ROM 或固件)。您可以打开闪存驱动器并根据芯片上的编号进行搜索,以尝试找出其类型。与生产的闪存驱动器总数相比,这类微控制器的数量可能有限,但对于少数核心类型会有很多变体,我并不感到惊讶。当然,没有任何单一的标准固件或类似的东西。

有一些芯片实用程序可让您重新编程其中一些芯片上的微控制器,以在某些类型的闪存驱动器上创建虚拟 CD-ROM 等。这是一个没有大量记录的领域,很难找到相关信息。我运气不太好。

但问题是,它们存储数据的方式会磨损,这意味着在仅仅 XX 次向数据单元写入数据之后!BINGO!你的 Stick 就死机了!

不,只是那个单元。SSD(以及 SD 卡和闪存驱动器)配置过多,这意味着它们拥有的闪存比包装上宣传的要多。这个额外的闪存用作“备用”区域,以覆盖磨损的块。它还涵盖了制造商缺陷 - 除了第一个块之外,没有闪存可以 100% 保证工作块。

答案3

USB 存储既不是机械的(如网格上的早期珠子),也不是磁性的(如磁带),也不是光学的(如 CD),而是电子的。将每个位置视为一个小电池单元,随着时间的推移(很长时间)会放电。所有写入都会导致性能下降。零填充只会使情况变得更糟。芯片本身要么有一个使用磨损均衡的控制器,要么没有——用户无法更改这一点。简而言之,磨损均衡只是确保 USB 的不同部分公平地分担存储需求负担。

相关内容