为什么固态会掉盘?著名的30分钟大法修复是什么原理?

商务办公
如果现代的台式机或者笔记本忽然断电(Power Loss),你觉得哪个硬件部分容易损坏?出乎大多数人的意料的是,固态硬盘SSD最脆弱,容易出现掉盘的现象,也就是BIOS和操作系统不认盘的情况。

如果现代的台式机或者笔记本忽然断电(Power Loss),你觉得哪个硬件部分容易损坏?出乎大多数人的意料的是,固态硬盘SSD最脆弱,容易出现掉盘的现象,也就是BIOS和操作系统不认盘的情况。今天我们就一起来Deep Dive一下原理和应对之道,并对有趣的“30分钟大法”的原理和是否正确进行一些分析。

FTL损坏和丢失

我介绍了很多SSD的原理,其中最重要的根本是对FTL的理解。SSD甚至SD卡、手机存贮的很多问题和解决方案都或多或少地和它相关,再怎么强调都不为过。为了理解后面的原理,我们先来简单回顾一下FTL:我们的写(Program)Flash操作只能把bit 1改成0,而不能从0改成1. 即我们可以把11110000改成11000000,但不能改成11111111。即有点像逻辑and操作(我们可以通过NAND这个名字联想记忆一下)。那么如何把0改回1呢?这就要靠擦除操作了,但是别忘了,NAND flash的寿命是由其擦写次数决定的(P/E数 (Program/Erase Count)来衡量的),频繁的擦除慢慢的会产生坏块,如FAT分区的文件分配表(老狼:FAT文件系统与UEFI)等。为了能够做到寿命均衡(Wear Levelling)和对坏块的遮蔽,就需要一个逻辑地址(LBA,logical block addresses )和物理地址(PBA, physical block addresses)的对应表,对外界暴露逻辑块,里面是具体是哪个物理块,固件自己做主,这个对应关系表就是FTL表: 

为什么固态会掉盘?著名的30分钟大法修复是什么原理?

因为LBA大部分实现是基于Page的,也叫做Page Mapping Table (PMT):  

为什么固态会掉盘?著名的30分钟大法修复是什么原理?

FTL看起来挺简单,但它是SSD、NAND等基础逻辑,它的实现多种多样,是各个固件的核心机密。也有些Open Source的方案。

FTL表在哪里呢?作为核心数据结构,它当然也要存储在Flash上。但由于它会被频繁更新,所以每次改动也不能立刻写会Flash,一般会先暂存在内存中,在积累到一定程度,再写回Flash:  

为什么固态会掉盘?著名的30分钟大法修复是什么原理?

什么时间写回,这是SSD固件的核心机密之一。另一方面,随着SSD容量的提高,FTL表的容量也快速上涨。我们以8GB的为例,FTL表不加处理可以达到8MB;以此类推,800G的SSD,FTL表可以有800MB!有些省空间的方案可以大大减小FTL表的大小,但也高达数十MB。这么大,FTL表也就有了部分被换入换出的过程。如何设计,也是很讲究技巧的。

FTL表如此重要,没了它,整个SSD/SD卡就没法工作了。如果在FTL写回Flash之前,还在内存的时候,忽然没电了,内存数据丢失,FTL表也就丢失了。有鉴于此,高端SSD和服务器SSD都加上了电容,来作为应急供电方案,让SSD控制器有时间把内存中的FTL表和一些缓存内容存到Flash上去:  

为什么固态会掉盘?著名的30分钟大法修复是什么原理?

现实中的例子,我们在M.2的SSD上面有很多很小的电容:  

为什么固态会掉盘?著名的30分钟大法修复是什么原理?

在Vcc没电的时候,这些电容的gate就会打开,会为主控争取1ms左右的时间。主控会立刻放弃现在所有没有存储的数据,而立刻开始存储FTL表,保证不会出大问题。

在企业级的SSD中,有的DRAM大小将近1GB,而企业SSD的数据完整性要求极高,不容有失,不但FTL表要存好,DRAM中没有存储过的,也必须全部存下来。这就需要很大的电容,来争取更多的时间,如果我们拆开企业SSD,就会发现很多大黄快:  

为什么固态会掉盘?著名的30分钟大法修复是什么原理?

它们也是为了这个目的。

但是,一些低端消费级的SSD,没有这种措施,忽然掉电,会造成FTL丢失。那么发生这种情况是不是SSD就报废了呢?也不是。

FTL表的重建

在内存中FTL丢失之前,Flash上还有上次的FTL内容,虽然已经过时了,但总比没有好吧!于是可以搜索SSD中的Flash,找到上次的FTL,这样尽管会丢失一些信息,但大部分数据可以保持。于此同时,有些实际块已经被分配使用过了,再次用会发生错误,就需要修正最后的FTL。那么怎么修正呢?

每个Flash的page都有一些额外的空间,这些空间大部分做ECC校验用,但还有些富余,我们拿来做Mapping Flag(MF): 

为什么固态会掉盘?著名的30分钟大法修复是什么原理?

有了这个提示,我们可以逐Page扫描整个Flash,来修正FTL。

看到逐Page,就知道这是个很耗时的工作。现在SSD那么大,需要不少时间,可以高达数分钟乃至数十分钟!

那么什么时间做FTL的重建呢?不少主控都在发现错误后会开始重建,直到成功重建,主控才会响应ATA等命令。这就是为什么忽然断点后,有些SSD会很长时间没有响应,想掉盘一样了!那么为什么有时候断电后又没问题呢?如果当时新的FTL已经被写回Flash中去,没有错误,当然也就不会出问题了。

30分钟大法是怎么回事?

掉电后各个主控的表现不一,这和它们的FTL存储算法有关。某些主控可以迅速恢复,有些则可能耗时很久,为了给某些主控充足的时间重建FTL表,掉盘后可以这样做:

1.掉电开机后,发现掉盘。如果是系统盘,则启动失败,如果是数据盘,则在操作系统里面发现该盘没有了。

2.不要立即重启,啥也不干,等待30分钟,让SSD主控充分的时间自行修复FTL。

3. 30分钟后,关机。再开机,看能不能找到该SSD。

有些同学还有些额外的步骤,即不插数据线,光插电源线开机30分钟。尽管我现在已经不做Flash相关工作,但我从经验和原理上认为这个步骤不是必须的。另外M.2的SSD也可照此办理。

需要特别提醒的是,比较忌讳在此过程中十分烦躁,不停关机开机和重启,打断主控重建FTL的过程,有可能加剧错误造成彻底不可以用了。

结论

断电会造成FTL表损坏,进而可能出现掉盘的现象。正确利用30分钟大法,可以修正部分问题,关键是给主控充分的时间进行FTL表的重建。其实不光断电,高温也有可能造成掉盘。我在我的笔记本M.2上插了块500GB某厂SSD,在大量拷贝电影时,过热会让该SSD主控忽然停止工作。我的笔记本这时就会没有响应,在过了一会后,要不蓝屏,要不就是发现该盘符没有了。这是我如果直接重启,就会发现在BIOS里面和Windows中,该硬盘都没有了。我这时就会让笔记本凉一会,再重启,硬盘就又出现了。这也是30分钟大法的一个变种。

如果还不能修复,其实还可以进入工程模式进行恢复。但是该过程比较复杂,软件昂贵,还是留给专业人士吧!

 

责任编辑:武晓燕 来源: 今日头条
相关推荐

2022-03-04 14:54:26

固态硬盘性能数据

2017-07-18 11:10:45

2017-06-07 18:40:33

PromiseJavascript前端

2017-01-10 09:07:53

tcpdumpGET请求

2013-05-03 10:57:09

泛型泛型教程

2024-12-13 15:29:57

SpringSpringBeanJava

2024-07-10 18:55:09

Python定时

2018-11-26 14:55:33

固态硬盘SSD选购

2020-05-22 10:20:27

Shiro架构字符串

2021-12-01 15:18:45

MySQL复制数据库

2022-01-13 15:36:14

固态硬盘SLCSSD

2021-01-06 10:33:15

SQL数据库函数

2021-01-07 16:50:36

SQL数据库函数

2023-12-05 15:24:46

2024-01-11 08:53:58

2018-02-02 10:24:37

Nginx入门指南

2024-07-02 11:22:35

2021-12-01 06:50:50

Docker底层原理

2024-08-27 13:43:38

Spring系统业务

2013-12-11 10:00:14

C++新特性C
点赞
收藏

51CTO技术栈公众号