文章目录
- 一、序
- 二、机械硬盘和固态硬盘的物理结构与工作原理
- 2.1 机械硬盘
- 2.11 基本结构
- 2.12 工作原理
- 2.2 固态硬盘
- 2.21 基本结构
- 2.22 工作原理
- 三、机械硬盘和固态硬盘的垃圾回收机制
- 3.1 机械硬盘GC
- 3.2 固态硬盘GC
- 3.3 TRIM指令开启和关闭
- 四、做好数据备份
一、序
周末电脑突然关机,开机进入UEFI,发现启动项全部丢失(我有2快固态硬盘,分别安装了win11和Ubuntu22.04)。
原因猜测:固态可能有所损坏;平时有一些非正常关机(独显直连的情况下有时候不手动息屏,自动息屏后无法唤醒屏幕,一直黑屏,只能重启);其它。
由于Ubuntu安装简单,没有什么资料,于是我重新安装了Ubuntu(我有一个ventory启动盘,里面放了几个镜像,装系统很方便),想通过Ubuntu修复Windows引导,用了一些软件(比如什么testdisk),发现win11那块固态的分区丢失了,整个硬盘表现为没有分区的状态(这种原因相比应该是固态损坏导致分区表丢失了)。
在Ubuntu上用testdisk对这块硬盘进行修复,可以检测到丢失分区,但是只能恢复EFI分区,这肯定是无法正常启动Windows的。
于是我又使用Windows PE
进行修复(我去无忧下载了几个PE的ISO,直接放在ventory里面启动的),使用DiskGenius
恢复了硬盘的分区。
再次启动Windows,又报错0e,01,0f等错误。修复了半天,没搞好,遂使用华硕UEFI里面的云端还原功能来还原系统。
结果,它还原的时候把我电脑所有的硬盘都格式化了,还没提示😤😤,还是第一次遇到(通常只会格式化安装系统的硬盘)。
接着就是想着恢复数据了,以前使用的是机械硬盘,使用DiskGenius就可以恢复数据,这次发现不行。又使用了Disk Drill
,Recuva
等等(国产软件不用想)。
均无果,拿winhex软件看了一下硬盘,发现硬盘数据全变0,无法恢复。
winhex
:是一款功能强大的磁盘编辑和数据恢复工具。可以用来磁盘编辑和数据恢复、磁盘和文件分析、数据处理和编辑、安全和取证。实用用途举例:你要出售一块机械硬盘,它是比较容易恢复删除、格式化之前的数据的,你可以使用winhex进行多次清理。
现在民间最好数据恢复工具应该是PC3000吧(价格好几万,不是很了解,国内好像有chao板的),由俄罗斯的 ACE Laboratory 公司开发。它包括专业硬件和专用软件,可以直接和硬盘的控制器通信。
但是问了淘宝商家,固态硬盘格式化后也无法借此恢复(能的话,我的数据也不值恢复的费用)。
所以本文就做知识记录与分享吧。
二、机械硬盘和固态硬盘的物理结构与工作原理
2.1 机械硬盘
2.11 基本结构
HDD 是一种使用旋转磁盘(盘片)的存储设备,它利用磁性材料在盘片表面上创建磁场,以存储和读取数据。
其主要部件包括:
- 盘片(Platter):通常是由铝合金、陶瓷或玻璃制成的圆形盘片,数据存储在其表面上。
- 磁头(Read/Write Head):位于磁盘上方或下方的读写头部件,负责在盘片上读取和写入数据。
- 马达:用于旋转盘片的电动马达,使盘片以高速旋转。
- 传动臂(Actuator Arm):带有磁头的传动臂,负责在盘片上移动,定位到正确的磁道读取或写入数据。
体积大、读写慢、数据不易丢失(硬件损坏也能较大程度恢复数据)。
2.12 工作原理
磁场表示数据:
- 磁性材料被分成许多微小的区域,每个区域称为一个位(Bit)。
- 当磁头写入数据时,它会改变盘片表面上每个位的磁性状态,即改变磁场的方向。
- 如果磁场朝向上,表示二进制 1;
- 如果磁场朝向下,表示二进制 0。
数据读取:
- 当计算机需要读取数据时,控制器发送指令给磁头。
- 传动臂定位磁头到正确的磁道,并旋转盘片找到数据所在的扇区。
- 磁头测量磁场变化,将数据转换为电信号,传输给计算机进行处理。
数据写入:
- 计算机将要写入的数据转换为磁场变化。
- 磁头定位到目标位置,将数据的磁场模式写入盘片表面。
旋转速度:
- 机械硬盘的性能受到旋转速度的影响。通常以每分钟转数(RPM)来衡量,常见的速度为 5400 RPM、7200 RPM,甚至更高。
2.2 固态硬盘
2.21 基本结构
固态硬盘是一种使用闪存存储数据的硬盘,其主要部件包括:
- 存储芯片(NAND Flash Chips):由多个存储单元组成的芯片,用于存储数据。
- 控制器(Controller):管理芯片、数据传输和读写操作的主要部件。
- DRAM 缓存:用于临时存储数据和加速访问的缓存器件。
NAND 闪存的基本组成:
- 晶体管:NAND 闪存中的存储单元是由晶体管构成的,每个存储单元包含一个或多个晶体管。
- 控制门(Control Gate):晶体管中有一个控制门,用于控制存储单元是否写入电荷。
- 浮动栅(Floating Gate):控制门和晶体管之间有一个浮动栅,用于存储电荷。当存储单元需要写入数据时,电荷会被注入到浮动栅中。
-
SSD体积小,速度快,数据不易恢复。
2.22 工作原理
SSD和HDD原理不同,简单来说一个是利用磁场一个是利用电场。
写入数据:
- 当需要写入数据时,控制器会向特定的存储单元发送写入信号。
- 存储单元中的控制门会打开,允许电荷通过,并存储到浮动栅中。
- 通过在浮动栅中存储电荷的数量和状态来表示数据的位,通常是高电荷表示1,低电荷或无电荷表示0。
擦除数据:
- SSD 中的存储单元不能直接覆盖写入数据,因此在需要擦除数据时,需要将存储单元中的浮动栅的电荷状态清除为初始状态。
- 擦除操作会将浮动栅中的电荷全部释放,将存储单元恢复为无电荷状态。
读取数据:
- 当需要读取数据时,控制器会向特定的存储单元发送读取信号。
- 存储单元中的电荷状态会影响到控制门的电流流动,通过检测电流的大小来判断存储单元中的电荷状态。
- 这样就实现了读取操作,读取数据的过程不会改变存储单元中的电荷状态。
三、机械硬盘和固态硬盘的垃圾回收机制
机械硬盘(HDD)和固态硬盘(SSD)在垃圾回收(GC
)(Garbage Collection)机制上有显著的区别,因为它们的存储技术不同。
3.1 机械硬盘GC
机械硬盘(HDD)没有明确的垃圾回收机制。
- 机械硬盘通常不涉及垃圾回收的概念,因为数据的存储是基于磁场的,而不是像固态硬盘那样基于电场。
- 覆盖写入:
- 当文件被删除时,操作系统只是将其标记为可用空间,而不会立即擦除原始数据。
- 新的数据可能会覆盖已删除的数据,使其不再可访问,但实际的数据擦除不会立即发生。
- 数据恢复:
- 由于机械硬盘不涉及垃圾回收,删除的文件仍然可能在磁盘上存在,只是不再被操作系统所识别。
- 数据恢复工具可以通过扫描磁盘表面来找回已删除的数据,即使被覆盖也有可能部分或完全恢复。
3.2 固态硬盘GC
-
擦除操作的限制:
- 固态硬盘中的 NAND 闪存存储单元需要在写入新数据之前进行擦除操作。
- 由于 NAND 闪存的特性,无法直接在单个存储单元上执行擦除操作(将存储单元中的浮动栅的电荷全部释放,将其恢复为初始状态,即无电荷或低电荷状态。),而是需要对整个块(
Block
)进行擦除,这可能涉及多个存储单元。 - 擦除会减少SSD寿命,尤其是全盘格式化。
-
垃圾回收策略:
- 固态硬盘通常具有内置的垃圾回收策略,以确保可用空间的最大化和数据写入性能的最优化。
- 当文件被删除时,固态硬盘可能不会立即擦除相应的存储单元,而是将其标记为垃圾数据。
- 垃圾回收器定期执行擦除操作,将标记为垃圾的存储单元擦除为可用状态,以便存储新的数据。
-
写入放大问题:
- 垃圾回收操作可能导致写入放大(Write Amplification)问题,即实际写入到 NAND 闪存中的数据量可能大于应用程序实际写入的数据量。
- 写入放大效应的原因:SSD写入前需要确保该存储单元是无电荷状态,但擦除要以Block为单位,写于少量数据却可能擦除较大区域;NAND flash的性能维护问题。
- 写入放大可能会影响固态硬盘的性能和寿命。
-
TRIM命令:
- 操作系统可以通过发送 TRIM 命令来通知固态硬盘已删除的数据块,以加速垃圾回收过程。
- TRIM 命令告诉固态硬盘哪些存储单元不再被使用,并在空闲时间进行擦除 (
立即擦除
的说法时不准确的)。 - 没有 TRIM 支持时,固态硬盘可能需要在写入新数据才先擦除旧数据,这会降低写入速度。
比较2和4,可知:固态硬盘开启TRIM指令后,删除的数据会在较短时间内被擦除,不开启TRIM时短时间内则有机会恢复删除的数据(没有写新数据)。擦除操作会在短时间内进行,但并不是马上进行,这还与操作系统、GC算法、SSD控制器设计等有关。但无论如何,都比不开启TRIM指令时的写数据时擦除快。
3.3 TRIM指令开启和关闭
win7及其之后的系统支持TRIM指令。
Windows查看状态:
fsutil behavior query DisableDeleteNotify
开启和关闭用管理员身份运行命令。
开启TRIM:
fsutil behavior set DisableDeleteNotify 0
关闭TRIM(不建议):
fsutil behavior set DisableDeleteNotify 1
TRIM指令开启和关闭状态下文件恢复测试:
拿一个Samsung的256G固态来做测试。
原来的文件:
先关闭TRIM指令,并格式化硬盘。
使用winhex可以看到底层数据并没有被删除(注意winhex应该使用管理员身份运行,选项-常规设置里面第一个):
这表明,不开启TRIM指令时,SSD不会马上进行GC,数据是可以恢复的。
现在使用winhex或者其他任何数据恢复软件都可以恢复的。
比如:
浪费时间,我就不恢复了,注意恢复的文件应该保存到其他硬盘,避免恢复的文件覆盖未恢复的文件。
现在开启TRIM指令,随便复制个文件到硬盘,再格式化。
数据完全擦除。
注意,开启TRIM指令,也有可能在短时间内成功恢复数据。因为它是在“合适的时间”擦除,可能几秒,也可能是几分钟后。
开启TRIM时,SSD的文件删除、快速格式化、慢格式化,都会在较短时间内擦除相应的存储单元。
四、做好数据备份
我通常会将编程项目push到GitHub,编辑文档也会开启云端同步。所以这次SSD被意外格式化,损失不大,不过可惜了好多好看的视频😊.
可以单独拿一个机械硬盘做备份,定期做好备份,备份可能遇到一些情况,比如主机要备份的文件时常增减,需要移动硬盘与之同步(或者进行历史多版本备份),可以借助一些软件来实现这种同步,比如:
FreeFileSync
:这是一个开源免费的文件夹和文件同步工具,具有直观的用户界面和强大的功能。它支持双向同步、增量备份、过滤器等功能,可以满足各种同步需求。SyncToy:这是由微软开发的免费文件同步工具(不过官网下架了,可以去第三方下载),适用于Windows系统。它可以帮助用户在不同位置的文件夹之间同步文件,并提供了多种同步模式,包括复制、更新、合并等。
rsync:对于Linux和macOS用户,rsync是一个非常强大的命令行工具,可以实现本地和远程文件夹之间的同步。它支持增量同步、压缩传输等功能。虽然是命令行工具,但具有丰富的选项和灵活性。在终端中输入
man rsync 可以查看其详细用法和选项。GoodSync:这是一个跨平台的同步工具,支持Windows、macOS、Linux以及移动设备等多种平台。它提供了实时同步、备份、文件版本控制等功能,同时具有直观的界面和强大的配置选项。
重要存储使用RAID
:
- RAID 0:数据被分割成多个块,并且在多个硬盘上同时写入,以提高性能。RAID 0没有冗余,因此不提供数据容错能力。
- RAID 1:数据在两个硬盘上完全镜像备份,提供冗余以增强数据的可靠性。RAID 1的容量等于单个硬盘的容量。
- RAID 5:数据被划分成多个块,并且每个块及其校验信息被分布式地存储在所有硬盘上,以提高性能和容错能力。RAID 5至少需要三块硬盘,并且可以容忍一块硬盘的故障。
- RAID 6:类似于RAID 5,但提供更高的容错能力。RAID 6至少需要四块硬盘,并且可以容忍两块硬盘的故障。
- RAID 10:也称为RAID 1+0,是RAID 1和RAID 0的组合。数据被分割并复制到多个硬盘上,以提高性能和容错能力。