SSD资料恢复技术探究

奥地利资安密码学专家 Philipp Gühring 因为自用的三星 EVO 840 250GB SSD 故障,因此对SSD 基于底层原理开始做故障原因分析而发表篇目前唯一 公开的逆向SSD内核工作与尝试救援资讯 。
http://www2.futureware.at/~philipp/ssd/TheMissingManual.pdf

这篇文章的思路 点出了 如何对当代embedded system 逆向推测思考
1.从电子零件规格分析
2.从电压分析硬体是否可能有物理损坏
3.从embedded 升级韧体程式分析
4.从JTAG下手分析指令与记忆体.
5.从I2C ,SATA通讯协议分析(虽然这次他没準备SATA 逻辑分析仪)
6.了解整个启动流程,以打断流程方式来修复启动失败的embedded system .

非常值得我们学习这种探究态度

OSSLab结合本身实务经验与原厂一手技术资源来补充 说明探究SSD故障分析及资料恢复原理

故障SSD在OS下的错误表徵
範例中的故障的EVO 840 250GB SSD
以下这故障 SSD 在 Linux 下使用 dmesg 得到的资讯:

[ 1.203395] ahci-imx 2200000.sata: fsl,transmit-level-mV value 1025, using 00000024
[ 1.203432] ahci-imx 2200000.sata: fsl,transmit-boost-mdB value 0, using 00000000
[ 1.203464] ahci-imx 2200000.sata: fsl,transmit-atten-16ths value 8, using 00002800
[ 1.203494] ahci-imx 2200000.sata: fsl,receive-eq-mdB not specified, using 05000000
[ 1.203543] ahci-imx 2200000.sata: Looking up target-supply from device tree
[ 1.206436] ahci-imx 2200000.sata: SSS flag set, parallel bus scan disabled
[ 1.206494] ahci-imx 2200000.sata: AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl platform mode
[ 1.206531] ahci-imx 2200000.sata: flags: ncq sntf stag pm led clo only pmp pio slum part ccc apst
[ 1.208050] scsi host0: ahci_platform
[ 1.208473] ata1: SATA max UDMA/133 mmio [mem 0x02200000-0x02203fff] port 0x100 irq 71
[...]
[ 6.592593] ata1: link is slow to respond, please be patient (ready=0)
[ 11.212587] ata1: COMRESET failed (errno=-16)
[ 16.602585] ata1: link is slow to respond, please be patient (ready=0)
[ 21.222578] ata1: COMRESET failed (errno=-16)
[ 26.612582] ata1: link is slow to respond, please be patient (ready=0)
[ 56.252588] ata1: COMRESET failed (errno=-16)
[ 56.261143] ata1: limiting SATA link speed to 1.5 Gbps
[ 61.292587] ata1: COMRESET failed (errno=-16)
[ 61.301345] ata1: reset failed, giving up
[ 61.310158] ahci-imx 2200000.sata: no device found, disabling link.
[ 61.319008] ahci-imx 2200000.sata: pass ahci_imx..hotplug=1 to enable hotplug

这边可以看到电脑的SATA 端口对 尝试着用 COMRESET 做初始化(1.206531 秒至 1.208473之间),但它一直没有接收到 SSD 应该给的 COMINIT 的回应。5 秒之后在 6.592593 秒时还是没有回应,在一分钟后的61.301345秒时它放弃了。理论上 COMINIT 要在 COMRESET 的一秒内有回应。

如果你对 SATA 的协定有兴趣,:

http://de.slideshare.net/niravdesai7121/sata-protocol

第三十页可以看到 COMRESET 与 COMINIT 的时差,电脑端的 SATA 发出COMRESET,SSD应该要回应COMINIT。然后它们就可以校準、沟通传输速度…然后它们会有个『连结』。

PCB上的 IC与电子元件分析

在由实体开始解析。

打开外壳后 Samsung SSD PCB 如图.

上面一长条的是 SATA 接口,左下角正方形的是控制器 CPU,中间的是 SDRAM,右边的是真正的 NAND 快闪储存晶片
背面则是第二颗 NAND 快闪晶片在同样的位置(推测这样比较好布线,或许是分享同样的data bus)

控制器 CPU 称做 Samsung MEX (PN是S4LN045X01-8030),它有3个ARMv7-r Cortex R4 400MHz 核心。

以下的文字记录在这个控制器CPU上面:

SAMSUNG S4LN045X01-8030
N7Y89MMB
U1441 ARM → 1441 代表它是2014年41週出厂的

如果想要了解更多可以到以下这个连结:
http://www.cactus-tech.com/en/resources/blog/details/solid-state-drive-primer-8-controllerarchitecture-channels-and-banks

SDRAM 晶片:
Samsung 512 MB Low Power DDR2 SDRAM
Samsung, 4Gb, LPDDR2 SDRAM, 1CH x 32, 8 banks, 134-FBGA, MONO, 1066Mbps, 1.8V/1.2V/1.2V:

512MB LPDDR2 DRAM:

以下这些资讯写在上面:
SAMSUNG 440
K4P4G324EQ-FGC2

K:=Memory
4:=DRAM
P:=LPDDR2 (guess)
4G:=4G, 8K/64ms Density
32:=x32 Bit Organisation
4:=8 internal Banks
E:=Interface ?
Q:=SSTL-2 1.8V VDD, 1.8V VDDQ
-F:=7th Generation
G:=FBGA Package
C:=Commercial, Normal Temperature&Power range (0-95°C)

EXH382HCC

NAND晶片是真正保留资料的地方:

NAND TLC 128 GB: (19nm Toggle Mode 2.0 TLC (3-bit per cell) NAND (Model# K90KGY8S7M-CCK0))
SAMSUNG 440
K90KGY8S7M-CCK0
K:=Memory
9:=NAND Flash 0:=3-Bit MLC (TLC)
KG=128G Y8=Organisation x8?
S=Voltage ?
7=Mode ?
M=1st Generation
C=CHIP BIZ D : 63-TBGA
C=Commercial, Normal(0°C-95°C) & Normal Power
K=Customer Bad Block ?
0=Pre-Program Version:None

想要更了解Samsung产品命名型号 可以参考这份文件。
http://www.samsung.com/global/business/semiconductor/file/media/SamsungPSG_july2010_final-2.pdf
第16页

PCB上还有一些小晶片,JS4TAA 与 AKE4QD,”ABS 431.WD”,还有个名为”GUILL TI 48″的晶片,这是德州仪器製造的。

基于 这也是硬碟上的通用元件 ,Hddguru 的 fzabkar 大神辨认出了这个晶片并提供以下的讯息:

Js4TAA 是一个由 STMicroelectronics 5V STEF4S 电路保险丝。”JS4″代表零件号码中重要的编号。GUILL是个由德州仪器所製造的 TPS62130D2 同步下降 DC-DC 转换器。AKE40D 代表一个多重输出模式切换的DC-DC转换器,或许有整合电路序列,”AKE” 代表零件号码中重要的编号。
推断 ABS 零件是个 I2C 装置,我现在猜测他是个感温元件。类似以下这些
http://www.ti.com/lit/ds/symlink/tmp275.pdf
http://www.nxp.com/documents/data_sheet/LM75A.pdf
http://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf

用逻辑分析仪 记录了以下的 I2C 通讯:

I2C
Time,Dir,ID,Data,ACKed,
1.0870288E-01,Write,18,08 02,Y,
1.0890320E-01,Write,18,00,Y,
1.0903376E-01,Read,18,00 77,N,
1.0923408E-01,Write,18,01 02 29,Y,
1.0949680E-01,Write,18,04 05 50,Y,
1.0975952E-01,Write,18,04,Y,
1.0989008E-01,Read,18,05 50,N,
1.1008976E-01,Write,18,02 05 00,Y,
1.1035280E-01,Write,18,02,Y,
1.1048336E-01,Read,18,05 00,N,
1.1068304E-01,Write,18,03 04 B0,Y,
1.1094608E-01,Write,18,03,Y,
1.1107664E-01,Read,18,04 B0,N,

在三星SSD上,ABS元件或类似的晶片总是接近快闪晶片旁,看起来应该是测量Flash温度。

找到以下这份文件解释了三星的温度管理策略,在第十三页开始:
http://www.samsung.com/semiconductor/minisite/ssd/downloads/document/Samsung_SSD_950_PRO_White_paper.pdf

硬体有没有问题?

SSD 需要电力供电,这一颗需要透过 SATA 埠供电。

要来判定硬体电路与IC有没有问题最简单的小学生方法: 拿好的来比对 通电后测试IC跟元件电压

先找出一个好的 SSD,做电路测量,然后在损坏的 SSD 上做比对,电压都正常。
基于电源正常 有很大的机会不是硬体损坏。

下图为本案例实测后的电压图,测试方法 一端先接GND ,先转三用电表导通档位,不要找直接互通的 ,记录出可测良点 ,再转测量电压档位,再一一测试可测量点的电压。

这边有清晰的大图连结:
http://www2.futureware.at/~philipp/ssd/SamsungEVO840Voltages.pdf

Safe Mode

OSSLab 有购买PC-3000 SSD资料救援设备
http://www.acelaboratory.com/pc3000-SSD.php
设备的视讯教学跟说明书都有提到 Samsung SSD 有个安全模式,短路 SSD PCB 上两个特定针脚后,然后将 SSD 通电,使 SSD 进入“安全模式”。
http://blog.acelaboratory.com/pc-3000-ssd-samsung-family.html

从硬碟的领域来讲,安全模式表示硬碟不会启动电机马达来实际读/写硬碟,当在SSD时,是在NAND没有任何电源安全风险的情况下与硬碟控制器晶片通讯。

经过使用安全模式,发现它代表着下面一些状况:

*只有启动第一个核心 mex1,mex2 和 mex3 在 SAFE模式下没有通电,这表示在正常(非安全)模式下,mex1 可能在初始化结束的某个步骤负责唤醒 mex2 和 mex3。
*SSD 显示只有 512 MB,不再是 250 GB,这类似于 SSD 中的 RAM 大小,所以这种方式很可能是直接存取 RAM。读取任何东西并没有提供任何原始的内容,所以它似乎没有挂载快闪记忆体,快闪记忆体的加密没有执行,…
*它总是显示序列号SN000000000000,所以它看起来是试着不从设置读取任何东西,所以它不会在初始化期间由于组态记忆体中的有垃圾资料而当机。

韧体升级程式可以挖出宝吗?

在网路上搜寻韧体更新。

在三星网站上只有最新版本。但是在网路上可找到其他版本。

EVO 840 250GB SSD韧体版本:

1: EXT0AB0Q (~2013-07) (原始韧体,在网路上找不到)
2: EXT0BB0Q (2013-10)
3: EXT0BB6Q (2013-12-18 19:43) (目前在三星网站可以找到)
4: EXT0CB6Q (2014-10-10 19:36)这包含在Samsung_SSD840EVO_Performance_Restoration.zip
5: EXT0DB6Q (2015-03-27 18:35)

下载了ISO映像档来更新韧体,会得到个档案类似这样:

Samsung_SSD_840_EVO_EXT0BB6Q.iso

档案里面包含 isolinux/btdsk.img,可以透过 7-Zip 来解压缩。在 btdsk.img 里面有三个有趣的档案:
samsung/DSRD/DSRDGUI0.EXE (韧体更新程式)

这个 EXE 档案是用 WDOSX 打包并可以使用 WDOSXUnpacker 来解开 (要求要有 Python 2.7, 它不能在 Python3 环境下执行!):

https://raw.githubusercontent.com/0xDB/WDOSXUnpacker/master/WDOSXUnpacker.py

这个韧体会有两个档案:
samsung/DSRD/DSRD.enc (韧体更新组态档)
samsung/DSRD/FW/ext0bb6q/EXT0BB6Q.enc (韧体本体)

解密到了一半,发现这一个工具,能够将它们完全解密:
https://github.com/ddcc/drive_firmware/blob/master/samsung/samsung.c

这个混淆方式是在每个位元组中的高半字节的4位元加密。

试着反编译韧体,但这种方法有几个问题:ARM 有一个 Thumb 模式,这不同于 ISA(指令集架构),每个命令只有16位元,它可以在 ARM(32位元)和 THUMB(16位元)模式每次的跳转/呼叫之间来回。所以它取决于编译器想要生成什么代码,而且它很难猜到一个特定的 DWord,在实际上只是从原始二进制来的一个 ARM 指令还是两个 THUMB 指令。一般的方法是获取一个已知的入口点(假设 CPU 通常以 ARM 模式启动,而不是以 Thumb 模式启动),然后跟随任何跳转/呼叫,并从中了解目标点实际上是 ARM 还是 Thumb。但是,由于不知道在开始的地方有任何进入点,失败。
可用 JTAG 介面透过韧体进行单步除错检测,并且无论是 ARM 还是 Thumb 都记录每一步指令,然后将这些资讯从追蹤倒回反向组译器以及反编译程序,而这些记忆体区域包含 ARM 代码或 Thumb 代码。本次文章先不说明JTAG .

另一个问题是记忆体映射。韧体档案由10个部分组成,这些部分被挂载到不同的记忆体区域,后来我发现其中一些被额外映射到其他範围,这部分取决于它们正在运行的实际 CPU 核心。这个实际的映射也是有趣并有助于反组译/反编译它。

然后分析了韧体档案的格式,发现它包含一个标头,然后10个分区(好好地对齐及不重叠),最后一些数据在分区之外。之前的韧体版本具有非常相似的结构,只有几个分区大小略微不同。

http://www2.futureware.at/~philipp/ssd/analyse/EXT0CB6Q.dec.html

SATA PHY

这个案例中 重点在于故障的SSD SATA PHY 无法通讯 回应为 BSY
在 SATA 协议中有各种超时,所以任何读/写一个区块的请求都应该在几秒钟内完成,而不是几分钟。

在这样的请求期间跟踪 SATA 控制器造成整体处理速度太慢。
而且当达到超时的时候,在一些情况下,电脑和 SSD 正在收到非常多的不同步讯息,以至于它们无法恢复通信,我必须透过手动切断 桥接的电源来中断 SATA 通讯。

所以把 DNA 测序的想法传送到除错程序:
设计了一个工作流程,从SSD中不断的读取单个扇区,每一个具有独特的地址:

while true
do
dd if=/dev/sda of=/dev/null count=1 skip=1251255 #0x1317b7
#dd if=/dev/sda of=/dev/null count=1 skip=4235125 #0x409F75
done

在执行这个工作流程时,让所有处理器核心运作。我随机中断一个核心,追踪和记录 30 个指令,然后恢复核心运作,以便它可以满足请求也还是兼容硬式即时。与基因测序类似,每次获得30个指令的短片段,它们是随机重叠的,这可能再次在一起难解。

一些基準:1指令:3秒(大部分在高点),10指令:5秒,30指令:12秒,100指令:31-44秒

有一件事情帮助很大,记录每个指令的下一条指令实际上是什么。所以它甚至可以使用单个指令片段。

因此执行工作负载和收集代码片段,然后透过搜索了这些片段获得用于读取这些区块的独特地址,发现了它的一部分。

0x00000af8->0x00000afa Thumb Supervisor 0x00000af8 0x78c9 LDRB r1, [r1, #0x3] r1:0x00800D80=>0x00000025 r1:0x00800D80=>0x00000025 [0x00800D83]=1317b025

然后改变地址到一个不同的和独特的地址,然后新的地址出现在相同的地方:

0x00000af8->0x00000afa Thumb Supervisor 0x00000af8 0x78c9 LDRB r1, [r1, #0x3]
r1:0x00800DA0=>0x00000025 r1:0x00800DA0=>0x00000025 [0x00800DA3]=409f7025

LDRB 指令只加载一个位元组,但是追踪器总是从被访问的记忆体位置读取32位元(一个DWord)。所以在这里不小心找到了扇区地址,并且 CPU 只对它旁边的单个位元组感兴趣,它最终是 SATA 请求命令位元组。

所以跟踪排序后,发现 SATA PHY 将请求的区块地址交给 CPU:

0x00800DA0 似乎是传入 SATA 请求的基底地址之一。
0x00800DA3 (base_addr+3) 包含一个带有SATA请求命令的位元组。

一些重要的SATA指令:
0x25 读取 DMA extended (LBA48)
0x35 写入 DMA extended (LBA48)
0x92 下载 microcode (韧体更新)
0xb0 SMART

如果对SATA指令有兴趣:

http://www.t13.org/
http://www.t13.org/documents/uploadeddocuments/docs2006/d1699r3f-ata8-acs.pdf

在各种序列中观察到的一些基本地址

       (strings debugmex* |grep 0x00000af8 |grep -v LDRB |sort |uniq)

0x00800C00
0x00800C10
0x00800C40
0x00800C50
0x00800C90
0x00800CB0
0x00800DE0
0x00800D60
0x00800DF0
0x00800E00

所以从 0x00800C00-0x00800E0F 的全部确定是 SATA 请求(也许範围可能更大),会说整个 0x00800XXX 是潜在与 SATA PHY 有关的。另一件事告诉我们,这里每个 SATA 请求大约只有16个位元组可以使用。

发现有 33 个 NCQ 暂存区的请求:
第一个暂存区从 0x00800C00 开始,第二个暂存区从 00800C10 开始…因此 0x00800DA0 实际上是第 26 个请求暂存区,最后一个暂存区从 0x00800E00 开始,结束于 00800E1F。并且每个请求暂存区是 16 位元组长,并且包含 SATA 命令、请求的地址…

甚至还有另一件事是,扇区地址实际上似乎不是由 mex1 读取的,所以整个记忆体管理,磨损平衡,区块重新定位和平排似乎是由不同的核心完成的。
所有这些地址绝对在 BTCM 範围内(TCM=Tightly Coupled Memory,这是一个紧密接合到 CPU 的快速 SRAM,大多数 ARM 晶片有两个 TCM 介面,命名为 ATCM 和 BTCM)

COMINIT/COMRESET

SATA PHY 通常是否自动初始/回应 COMINIT/COMRESET/COMWAKE 信号,或者 CPU 是否必须向 SATA PHY 发送信号。

最后,结果证明 COMINIT/COMRESET 必须用 CPU 发出信号,mex1 与它有关联: 试着观察当 SSD 只通过电源连接但没有透过 SATA 资料线去沟通时发生了什么事,
而发现 SSD 状况应该是这样的:

状况图:

一旦 SSD 连接电源,它会启动韧体,当初始化完成后,它开始等待与 HOST 电脑的连接(一个小的循环来检查状态寄存器, 0x200000AC 位元为 COMINIT 信号),当发送那个信号则透过配置用于连线的 SATA PHY 来继续,然后它开始等待来自电脑的请求。

这故障 SSD 状况可能为 ,启动后应该正确地初始化 SATA PHY,但它之后以某种方式偏离正确的程式流程,并且没有到达“供电等待” (ATA Ready ) 的迴路。如果韧体进入“供电等待”迴路,它可以从 SATA PHY 获得 COMINIT 信号并可以正常的继续下去。

那么是在哪里又为什么他会不正常启动?在程式流程中可能的分支导致 SSD 损坏是在哪里?

SAFE MODE UART

在安全模式下可用的 UART 介面具有 3.3 Volt FTDI RX/TX 针脚,并使用 115200 8N1 的设置。
它被设计来用在特殊目的的 SSD 除错程式,。
它有十几个命令,我唯一分析一个是“r”命令,它可以用来从记忆体中读取资料。
用“HDD Serial Commander”的工具 http://www.hddserialcommander.com/ ,一旦我们找出了这些命令,它应该提供一个GUI。 (指令必须插入到 SQLite 资料库中)
从CPU端,可以通过以下方式连接 UART:
UART基址:0x20503000
从 UART 读取一个位元组:[0x20503018]:串列位元组 IN
向 UART 写入一个位元组:[0x20503014]:串列位元组 OUT(必须至少向该暂存器写入16位元,但串列线上只能写入8位元)
每次读/写的操作后,韧体代码在一个迴圈中等待大约 50 个 CPU 週期。你可以在这里看到通信模式:
http://www2.futureware.at/cgi-bin/ssd/logs?log=debugmex1-safe-press-r-UART_REGISTER.log (在该页面上搜索UART)

JTAG

做完JTAG 发现
mex1负责通过SATA接收数据
mex3负责与NAND闪存通信,其中存储实际数据
mex2负责通过SATA回复
对于从SSD读取或写入扇区,顺序如下:1-> 2-> 3或 1→3→2。
所以mex1必须先来(解析SATA请求),然后2和3必须后来,

SSD这种高速需求当然会要这3个任务可以并行处理

正确的SSD初始化是怎样的?

一个SSD能正常工作 其初始化过程。由几个阶段组成。

SSD 将韧体部分从处理器中的内部Mask ROM 加载到 RAM,并继续执行。
记忆体晶片测试。
SSD 读取在Flash韧体加载到 RAM,并将控制权交给 RAM。
SSD 读取组态页缺陷表生成编译器。
SSD 读取其组态页。
如果上述所有阶段都成功通过,SSD 将回报就绪状态,回传其标识数据(型号,容量,序号等),并允许存取资料。通常,儘管它可能具有使资料存取複杂化的档案系统错误,这种 SSD 还是可以操作的。

Mask ROM 与安全模式

SSD SOC 只有载入 SOC 内的ROM 而没有载入在Flash 上的完整韧体的状况被称为安全模式。在安全模式下,磁碟只支援几个 ATA 命令。通常,它们包括 ID 读取命令(0xEC)和载入韧体(0x92)的命令。
磁碟可以通过在板上连接某些触点来切换到安全模式。
当无法从记忆体晶片载入主要韧体时,磁碟也可能由于故障而在安全模式。

要强制磁碟进入安全模式,必须关闭电源,连接板上相应的短路点,然后打开电源,等待磁碟回报準备就绪。如果磁碟在10秒内没有达到ATA就绪状态,表示选到了错误的短路点,或者可能代表磁碟(RAM,处理器,电源的子系统)的物理故障。请注意到如果记忆体晶片损坏,磁碟通常会在安全模式下达到準备就绪的状态。磁碟回报就绪之后,再移开短路的工具。

部分三星 SSD 系列中短路的正确接触点:

                          图1  MLC SSD               

                           图4  840系列

请注意,有时候您可能会遇到使用跟上述标準板的布局不同的电路板。在遇到这些 SSD 的情况下,可以使用几种方法来进入安全模式:

第一种方法适用于MLC SSD(S3C29RBB01-YK40 控制器)。这些 SSD 中的主韧体存在Zero Channel bank Flash中。
短路第零储存库并桥接资料线路,就会让控制器读不到主韧体 .因此 SSD 将保持在安全模式。
Zero Channel bank flash 可以通过连续检查晶片来识别。一般情况下,它在控制器附近。可以使用晶片的文件来判断晶片资料线的位置。

让以一个三星 MMCRE28G5MXP-0VB SSD为例见图。

磁碟是 MLC SSD 系列。它已经焊了标有 K9HCGZ8U5M-SCK0 的 TSOP-48 晶片。

                          图5  TSSOP-48 晶片资料图

在 TSOP-48 的叙述中,我们可以了解 DQ0-DQ7 代表资料线。因此,您可以通过短路任何一对接点来强制 SSD 进入安全模式。
(这个方法思路同于2016 Defcon 缝衣针破解Router法)

                          图6  MLC SSD 上 DQ6 与 DQ7 线的接点

第二种方法适用于470、830和840系列的 SSD。仔细观察任何一款这类 SSD 的电路板,可以看到连接点旁边有一个10针检测连接器的接触点。例如,请参见840系列 SSD 的电路板(见图4),说明了连接点和连结电路板之间的关联(见图7)

                          图7  PCB连接点和检测连接器的连接盘之间的对应位置

可能在其他SSD系列看过类似的图片。可以通过桥接10针检测连接器的连接点 1 和 2 来进入安全模式 ,此为专用安全接点。

假设不知道安全模式启动方法的 SSD(例如,来自 Dell 笔电的 mSATA 830 系列)来测试这个假设(见图8)。

                          图8  Dell mSata

接触点可以明显的识别。6 一直是接地,您可以使用电錶来测量。一旦找到 6 号接点,就可以準确的识别剩余接点的位置。短路 1 跟 2 接点就能进入安全模式

主韧体

三星 SSD 的主要韧体部分储存在Flash 中。 某些MLC SSD 在零通道的第零储存库中只有一个主韧体体并无副本。
470 系列的 SSD在零通道上的各个初始4个储存库中保存4个主韧体副本。 830 和 840 系列的 SSD 还有4个副本的主韧体储存在零通道的前两个储存库中。

Microcode 由几个校验法保护着。它们通常使用在载入和更新硬碟韧体时由韧体从遮罩 ROM 验证SHA(安全散列算法),CRC(循环冗余校验)或DSA(数字签名算法)的变化。如果校验码验证成功,则将控制权递给主韧体。不然的话,磁碟会保持在安全模式

组态参数(Config Page CP)

组态参数是代表磁碟用于储存不同配置,例如SSD ID Model、密码资讯、最大LBA设定、S.M.A.R.T. 记录等 分类方法跟磁碟模块一样。
三星 SSD 在最大 LBA 之后的区域或在佔用每个记忆体晶片开始处的空间的服务区中储存СР。它们不会明显的影响硬碟运作,但它们可能会影响到使用者资料的存取。例如,如果随机数据在包含密码资讯或最大LBA中出现,就可能会发生这种情况。

Loader

三星 SSD 允许将外部韧体载到 RAM 而不是从Flash 晶片载入。
当主韧体被破坏或者由于记忆体晶片的问题而不能被载到 RAM 时用于侦错会非常方便的功能。此外,我们将韧体直接上传到 RAM 称为载入器。

载入器可以具有比储存在记忆体晶片中的主韧体更多的功能。因此,三星 SSD 工具可以在转译器损坏的情况下以«原始»格式读取晶片内容,可以存取密码保护 SSD 上的资料等。

磁碟初始化期间的错误

让我们回顾一下三星 SSD 初始化过程中错误相关的可能性问题。这样的问题通常导致不能使用逻辑坐标来存取使用者的资料。初始化错误可以被细分为以下几种类别:

SSD 无法达到就绪状态。
SSD 準备就绪,但无法回报 ID。
在设备ID回报«ROM MODE»而不是其型号。
回报 SSD 容量为零或只有几MB。
在尝试读取资料时发生错误。

磁碟无法进入就绪状态

这有好几种可能的原因,主要有下面几个:

损坏的 PCB 元件
控制器损坏
RAM 损坏
记忆体晶片有一个或多个损坏
编译器中有错误资料
首先,您必须对SSD做目视或是电压检查。如果电路板上有缺陷或损坏的元件,必须将它们换掉。然后将SSD切换到安全模式。
如果SSD无法进入安全模式,有可能是控制器或 RAM 出现故障。
如果SSD进入安全模式,启动载入器并执行记忆体晶片测试。如果晶片测试没有显示任何问题,那或许是转译表的损坏。

磁碟準备就绪,但无法回报 ID

此问题通常在 MLC SSD 遇到。这是因为 SSD 无法从记忆体晶片读取主韧体,使其留在安全模式。因此,这意味着通道0的零储存库或主韧体已经损坏。

在设备ID回报«ROM MODE»而不是其型号

通常是在 470、830 和 840 系列的硬碟会遇到此错误。来自这些SSD Soc内建的ROM 韧体具备更广泛的功能,并且支援读取设备ID(0xEC)的命令。 «ROM MODE» 中的 ID 特别标明了硬碟正在安全模式中。

错误造成:
零通道的损坏晶片
全部副本 都是坏的韧体

回报磁碟容量为零或只有几MB

这是三星 SSD 上最常见的损坏。它或许是以下两个原因造成:

主韧体损坏
组态参数(CP)损坏

如果发生这个错误,请使用韧体更新程序。在韧体更新期间,某些组态设定也会更新或验证。如果 CP 中有错误,它们会被修正。如果问题是由韧体中的错误所造成,透过更新也会消除该问题。

在尝试读取资料时发生错误(Error return)

这个错误或许是由下面的情况造成:

SSD 有密码保护
CP组态页面损坏
Translator 编译表损坏
必须检查 SSD 是否启用了密码保护 使用一般程式(hdparm 就可以检查是否有ata加密)
若没有加密 则很有可能就是CP 或是编译器表损坏

结论

这个案例Philipp Gühring并没有维修成功,根据OSSLab经验,藉由PC3000 SSD设备这还算很容易处理的.
但是目前SSD与Flash资料救援的难度最主要在于.

1.未知XOR 像Sandforce 不同厂商会给不同Xor 密钥.
2.状况很糟的TLC.非常容易损坏.造成无法恢复.
3.不支持的主控 .与特别OEM 密钥.
4.PCI-E主控开始流行

只能说 技术问题要基于根本状况,来慢慢抽丝剥茧一步步解决.


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章