【随笔】固态硬盘数据删除无法恢复(开启TRIM),注意数据备份

文章目录

  • 一、序
  • 二、机械硬盘和固态硬盘的物理结构与工作原理
    • 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 DrillRecuva等等(国产软件不用想)。

均无果,拿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)没有明确的垃圾回收机制。

  1. 机械硬盘通常不涉及垃圾回收的概念,因为数据的存储是基于磁场的,而不是像固态硬盘那样基于电场。
  2. 覆盖写入:
    • 当文件被删除时,操作系统只是将其标记为可用空间,而不会立即擦除原始数据。
    • 新的数据可能会覆盖已删除的数据,使其不再可访问,但实际的数据擦除不会立即发生。
  3. 数据恢复:
    • 由于机械硬盘不涉及垃圾回收,删除的文件仍然可能在磁盘上存在,只是不再被操作系统所识别。
    • 数据恢复工具可以通过扫描磁盘表面来找回已删除的数据,即使被覆盖也有可能部分或完全恢复。

3.2 固态硬盘GC

  1. 擦除操作的限制:

    • 固态硬盘中的 NAND 闪存存储单元需要在写入新数据之前进行擦除操作
    • 由于 NAND 闪存的特性,无法直接在单个存储单元上执行擦除操作(将存储单元中的浮动栅的电荷全部释放,将其恢复为初始状态,即无电荷或低电荷状态。),而是需要对整个块(Block)进行擦除,这可能涉及多个存储单元。
    • 擦除会减少SSD寿命,尤其是全盘格式化。
  2. 垃圾回收策略:

    • 固态硬盘通常具有内置的垃圾回收策略,以确保可用空间的最大化和数据写入性能的最优化。
    • 当文件被删除时,固态硬盘可能不会立即擦除相应的存储单元,而是将其标记为垃圾数据
    • 垃圾回收器定期执行擦除操作,将标记为垃圾的存储单元擦除为可用状态,以便存储新的数据。
  3. 写入放大问题:

    • 垃圾回收操作可能导致写入放大(Write Amplification)问题,即实际写入到 NAND 闪存中的数据量可能大于应用程序实际写入的数据量。
    • 写入放大效应的原因:SSD写入前需要确保该存储单元是无电荷状态,但擦除要以Block为单位,写于少量数据却可能擦除较大区域;NAND flash的性能维护问题。
    • 写入放大可能会影响固态硬盘的性能和寿命。
  4. 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:

  1. RAID 0:数据被分割成多个块,并且在多个硬盘上同时写入,以提高性能。RAID 0没有冗余,因此不提供数据容错能力。
  2. RAID 1:数据在两个硬盘上完全镜像备份,提供冗余以增强数据的可靠性。RAID 1的容量等于单个硬盘的容量。
  3. RAID 5:数据被划分成多个块,并且每个块及其校验信息被分布式地存储在所有硬盘上,以提高性能和容错能力。RAID 5至少需要三块硬盘,并且可以容忍一块硬盘的故障。
  4. RAID 6:类似于RAID 5,但提供更高的容错能力。RAID 6至少需要四块硬盘,并且可以容忍两块硬盘的故障。
  5. RAID 10:也称为RAID 1+0,是RAID 1和RAID 0的组合。数据被分割并复制到多个硬盘上,以提高性能和容错能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/493282.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HQYJ 2024-2-26 作业

1.整理链表的代码 link.stack.h文件 #ifndef __LINK_STACK_H__ #define __LINK_STACK_H__ #include<stdio.h> #include<stdlib.h> typedef int datatype; typedef struct link_stack {datatype data;struct link_stack *next;}link_stack,*link_p; typedef struc…

【Java程序设计】【C00283】基于Springboot的校园志愿者管理系统(有论文)

基于Springboot的校园志愿者管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园志愿者管理系统 本系统分为系统功能模块、管理员功能模块以及志愿者功能模块。 系统功能模块&#xff1a;用户进入到系统…

vue3.0 ref的使用

一.在vue2中定义变量 在使用vue2的时候,我们定义变量会在data中进行定义&#xff0c;那么我们在vue3中是如何定义变量的呢&#xff1f;我们会使用ref来进行定义。 (1)我们通过一个简单的案例来看 代码&#xff1a; <template> <div><button click"coun…

matlab 凸轮轮廓设计

1、内容简介 略 46-可以交流、咨询、答疑 2、内容说明 略 4 取标段的分析 取标装置是贴标机的核心部件之一&#xff0c;是影响贴标质量和贴标精度的重要因素&#xff0c;取标段是通过取标板与标签的相切运动使得涂有胶水的取标板从标签盒中粘取标签纸[4]&#xff0c;理论…

DP读书:《半导体物理学(第八版)》(一)绪论 3min速通

DP读书&#xff1a;《半导体物理学&#xff08;第八版&#xff09;》刘恩科 3min速通半导体物理之绪论 DP读书&#xff1a;《半导体物理学&#xff08;第八版&#xff09;》刘恩科绪论第一章 半导体中的电子状态1.1 半导体的晶格结构和结合性质1.1.1 金刚石型结构和共价键1.1.2…

电子科技大学课程《操作系统原理与实践》(持续更新)

前言 本人学习采用的是学校老师出版的课本&#xff0c;教学顺序与部分内容可能有所不同&#xff0c;具体以自己老师的教学为准&#xff0c;适合同学期中和期末考试的复习。重点内容用#标记&#xff0c;#数量越多&#xff0c;越重要&#xff0c;电子科技大学学生可以先看附言&a…

C++ 学习之函数对象

C 函数对象基本概念 在C中&#xff0c;函数对象&#xff08;Function Objects&#xff09;是一种类或结构体&#xff0c;它重载了函数调用运算符operator()&#xff0c;因此可以像函数一样被调用。函数对象有时也被称为仿函数&#xff08;Functor&#xff09;。 以下是关于C函…

线性表——单链表的增删查改(上)

本节复习链表的增删查改 首先&#xff0c; 链表不是连续的&#xff0c; 而是通过指针联系起来的。 如图&#xff1a; 这四个节点不是连续的内存空间&#xff0c; 但是彼此之间使用了一个指针来连接。 这就是链表。 现在我们来实现链表的增删查改。 目录 本节函数接口列表…

【大厂AI课学习笔记NO.54】2.3深度学习开发任务实例(7)数据标注和数据集拆分

数据标注 有时我们会把特征工程和数据集的标注弄混淆&#xff0c;在普通的机器学习项目中&#xff0c;我们需要进行特征工程&#xff0c;但是在深度学习项目过程中&#xff0c;我们需要进行数据标注工作。 标注工具 在本案例中&#xff0c;使用的是开源的标注工具Labelme&am…

详解三种网络适配器:HBA、NIC 和 CNA

目录 前言&#xff1a; 一、主机总线适配器 (HBA) HBA的特点 二、网络接口卡 (NIC) NIC的特点 三、并发网络适配器 (CNA) CNA的特点 四、HBA、NIC 与 CNA的区别 五、结论 前言&#xff1a; 网络中的主机总线适配器 (HBA)、网络接口卡 (NIC) 和并发网络适配器 (CNA) 是…

软件项目需求开发和管理指南

1.需求获取的方式 2.需求分析的准则 3.需求分析的方法 4.需求开发考虑的方面 5.需求确认的方法 6.需求优先级的设定 7.需求文档编制规范要求 软件全文档获取&#xff1a;软件项目开发全套文档下载_软件项目文档-CSDN博客

【Git】Git命令的学习与总结

本文实践于 Learn Git Branching 这个有趣的 Git 学习网站。在该网站&#xff0c;可以使用 show command 命令展示所有可用命令。你也可以直接访问网站的sandbox&#xff0c;自由发挥。 一、本地篇 基础篇 git commit git commit将暂存区&#xff08;staging area&#xff…