有很多与磨损均衡相关的问题。似乎我们很多人都无法理解这项有点新技术,因为我们已经使用机械磁盘驱动器这么久了。
共识是自由空间,即未使用的空间,将被用来“平衡”使用,这样单个单元就不会像没有这种转移利用那样快地退出。
我确实发现一篇文章表明SSD磨损均衡功能对分区不感兴趣;它将利用设备上任何可供使用的单元。但它很模糊,没有回答我的问题。
我的问题是,是否会利用未分配的空间以及任何其他分区来实现磨损均衡功能?
附加信息:保留一些空间的目的是为了将系统映像恢复到较小的驱动器。某些备份软件会忽略可用空间,因此这不会成为问题,但逐位映像除外,其中包括可用空间,因此恢复过程将失败。即时 Windows 设置是 500GB SSD,由于所有文件都存储在其他地方,因此仅使用 100GB;换句话说,我的系统驱动器。我更愿意更换为 240 至 250GB 驱动器,而不用担心可能的尺寸问题。我使用 Acronis TIH 和 Windows 内置系统映像软件。我没有对 Acronis 进行过一点一点的设置,我也不确定 Windows 是做什么的。
预先感谢大家提出的任何意见、建议或明确答案的指示。
r2d*_*2d3 16
我的问题是,是否会利用未分配的空间以及任何其他分区来实现磨损均衡功能?
是的。但你问问题的方式暗示了对SSD操作的错误理解。
驱动器固件的工作是管理存储单元,而不考虑其用途。这意味着无论驱动器是否已分区、是否已格式化或可能具有某种专有的组织结构。
分区、文件系统和未分配空间等内容由操作系统处理,而不是驱动器的固件。
即使人们可以对能够读取分区和文件系统的固件进行编程,但这并不是固件的目的,而且这是一种危险。
ATA TRIM 命令是操作系统级别和固件级别之间的一扇门。指示不再使用的扇区使固件有机会在操作系统将来向这些扇区发出写入命令之前删除其内容。
通过尽早通知固件有关这些扇区的信息,对该扇区的下一个写入命令不需要固件在写入新内容之前删除这些扇区,因为固件之前有时间删除这些扇区。
这样您就可以节省删除扇区所需的时间,这是在扇区上写入新内容之前的先决条件。
您说得对,SSD 不理解分区表 - 对于它们来说这些都只是字节 - 因此它们无法可靠地判断哪些空间应被视为未使用。一旦某个扇区被写入,SSD 就必须认为它已被使用。
这就是TRIM存在的原因。计算机可以发送“修剪”命令将区域标记为未使用。这意味着 SSD 对正在使用哪些扇区的理解不仅仅是知道它们是否属于某个分区。即使属于分区的区域(其上具有有效的文件系统)也可以被修剪以回收现在已删除的文件占用的扇区。
您的操作系统很可能会定期修剪驱动器(出于性能原因不会立即完成)。
修剪不会立即删除数据。首先,因为这通常是不可能的:SSD 上的数据被组织成擦除块,并且对存储在此类块中的数据的每次更新都需要重写整个块。因此,整个擦除块必须被修剪才能真正被视为未使用。其次,因为 SSD 的使用寿命(以写入次数衡量)有限。主动销毁未使用的数据会不必要地消耗写入周期并缩短驱动器的使用寿命。相反,驱动器只会认为此类块中的数据已过时。它将可用于磨损均衡的覆盖,并且不会主动保留数据。
值得注意的是,如果您使用全盘加密,TRIM 可能会产生安全隐患。正确加密的磁盘看起来就像随机的乱码,即使在没有存储数据的区域也是如此。因此,修剪可能会揭示空白区域,因为这些乱码可能会变成实际的零,或者可能变成其他一些可识别的模式。这是否是一个问题取决于一个人的明智判断。
请记住,使用较新的 GPT 分区方案,备份分区表头存储在磁盘的末尾。因此,将完整图像写入较小的驱动器会将其切断。使用某些分区工具在恢复后重新创建它可能是一个好主意。
未分配的空间
逻辑块(范围)是否在分区表中标记为已分配(或者换句话说,分区的一部分)与是否将其视为“已使用”/“已占用”/“已映射”没有直接关系“(到实际存储)。
这与文件系统级别非常相似,并非分区(或驱动器,如果“无分区”)的每个逻辑块都被视为已使用。然而,文件系统跟踪/记录的内容与驱动器固件的功能也不直接相关,这就是为什么它需要由操作系统“通知”(通过“TRIM”的方式)才能了解哪些逻辑块可以被视为“自由”(例如,它所包含的数据可以被视为“可忘记的”)。
此类通知可以在文件删除时触发(例如discard
Linux中的挂载选项,或Windows中的删除通知“行为”),根据分区/驱动器上的文件系统中的当前记录(例如fstrim
在Linux中)或“文件系统-”定期触发。忽略”(即整个分区/驱动器)“TRIM”(例如blkdiscard
在 Linux 中)。
如果您对编程有所了解,您还可以将驱动器(现在不一定是 SSD)上的逻辑块视为指针。TRIM 有点像设置一个(一堆)指针NULL
(这与释放“实际”内存也不完全相同,就像 TRIM 不会立即擦除存储单元一样)。分区只不过是逻辑块的集合,而逻辑块又只是告诉文件系统可以使用哪个以及最多可以使用多少个的一种方法。(逻辑块的“位置”,或者分区中块的连续性质,并不反映数据在场景后面的位置/方式。)文件系统驱动程序可以告诉操作系统哪个“指针”“分配给”文件系统可以设置为NULL
,但文件系统本身不负责保存该记录。
“分配”空间作为分区表中的分区只不过是向其中添加一个记录条目,该记录条目由起始和结束逻辑块的从零开始的地址(当然还有一些其他信息)组成。它不会告诉固件将范围内的所有块“设置”为“to NULL
”。(但是,在 Linux 中,许多mkfs
实用程序默认情况下都会这样做。不确定 Windows 的情况,但据我所知,它不会在形成时触发完整的分区/驱动器 TRIM。)
PS 对于您的克隆问题,不同的克隆软件可以有不同的克隆方式。如果软件以逐个分区的方式执行此操作(即仅克隆分区表和所有分区,而不克隆“未分配的空间”),那么只要“已分配的”空间不存在,就不会出现驱动器大小方面的问题。 /partitioned 空间不大于目标驱动器。然而,它也可能以“分区不感知”(即逐块完整驱动器)的方式进行。在这种情况下,如果目标驱动器大小小于源驱动器大小,则会出现问题。由于这些方式中的任何一种都会克隆所有相关的逻辑块(即“文件系统不知道”),因此所有相应的块将被视为被目标驱动器上的固件“占用”,无论它们是否在源驱动器上也是如此,直到您可能fstrim
在目标驱动器上运行。(正如您可能已经注意到的,没有一种方法可以“获取”/“读取”某个块是否“已设置为” NULL
。即使在特定驱动器上,某个块将“在 TRIM 后读取零”,但它不会暗示“读零意味着 TRIM'd”或“写零相当于 TRIM”。)
归档时间: |
|
查看次数: |
3100 次 |
最近记录: |