SCSI Disk Medium Defects

Overview

直接从SBC-4文档中摘录一段吧,原文描述非常清晰:
Any medium has the potential for medium defects that cause data to be lost. Therefore, physical blocks and/or logical blocks may contain additional information that allows the detection of changes to the logical block data caused by medium defect or other phenomena. The additional information may also allow the logical block data to be reconstructed following the detection of such a change (e.g., ECC bytes).

A medium defect causes:
a) a recovered error if the device server is able to read or write a logical block within the logical unit’s
recovery limits; or
b) an unrecovered error if the device server is unable to read or write a logical block within the logical
unit’s recovery limits,
where the logical unit’s recovery limits are:
a) specified in the Read-Write Error Recovery mode page (see 6.5.10);
b) specified in the Verify Error Recovery mode page (see 6.5.11); or
c) vendor specific, if the device server does not implement the Read-Write Error Recovery mode page or the Verify Error Recovery mode page.

上面实际上也定义了recovered error和unrecovered error的区别:在规定的限制内,如果logical block中的内容可读或者可写(视操作而定),那么就算是recovered。如果做不到,那么就是unrecovered。这个限制(recovery limits)指的是Read-Write Error Recovery mode page、Verify Error Recovery mode page或者vendor自定义的page中规定的限制(比如最多重试次数、recovery时间限制等等)。

块坏恢复

硬盘本身的支持

Medium defects可能会造成潜在的数据丢失。硬盘可能会提供恢复的机制,但也可能不提供。理想情况下,硬盘可以自动修复这些坏块,将LBA重新映射到好的物理块上。这种机制称为块坏自动重分配(automatic reassignment of defects)。硬盘是否支持这种机制,可以看一下Read-Write Error Recovery mode page。

> sginfo -a /dev/sdc
... # 省略一些输出
Read-Write Error Recovery mode page (0x1)
-----------------------------------------
AWRE                               1
ARRE                               1
TB                                 0
RC                                 0
EER                                0
PER                                0
DTE                                0
DCR                                0
Read Retry Count                   1
Correction Span                    0
Head Offset Count                  0
Data Strobe Offset Count           0
Write Retry Count                  1
Recovery Time Limit (ms)           0
... # 省略一些输出

AWRE:AWRE为0表示硬盘不应该执行automatic write reassignment。AWRE为1表示当硬盘在写过程中遇到recovered或者unrecovered error的时候,会尝试对坏块进行reassignment。
ARRE:ARRE为0表示硬盘不应该执行automatic read reassignment。ARRE为1表示当硬盘在读过程中遇到recovered的时候,会尝试对坏块进行reassignment。注意,读请求与写请求不一样的是,读请求只有遇到recovered error的时候(且ARRE为1),才会尝试reassignment,对于unrecovered error,读请求是不会自动reassign的。
Write Retry Count:这个参数指的不是write的重试次数(虽然看起来特别像),而是指的对于write请求,如果出错了,硬盘的recovery次数。也就是说比如write请求出错了,硬盘尝试进行recovery的次数,最多不超过Write Retry Count规定的次数。
Read Retry Count:跟Write Retry Count类似,针对读请求。

读请求故障处理(Read with unrecovered Medium error)

当读请求不可恢复(unrecovered)的错误时(例如scsi status是CHECK CONDITION,sense key是MEDIUM ERROR,ASC是UNRECOVERED READ ERROR),硬盘是不会触发自动重分配的。需要由上层的应用程序做显式的处理:
a) 如果应用程序可以重新生成相关的数据(例如从RAID的其它硬盘中重新构造出来),并且AWRE bit是1,那么应用程序可以发送一个write命令将数据写入,这个write命令会触发automatic write reassignment。
b) 如果应用程序可以重新生成相关的数据,并且AWRE bit是0,那么应用程序需要先发送REASSIGN BLOCKS命令为故障的LBA重新分配物理块,然后再发送WRITE命令将数据写入。
c) 如果应用程序无法重新生成相关的数据,那么应用程序可以尝试使用REASSIGN BLOCKS命令来重新为LBA分配物理块。但是由于数据无法再生成,所以这些数据就丢失了。

获取defect列表

硬盘为了记录这些有故障的坏块,就需要一个列表,这个列表就是PLIST(primary defect list)和GLIST(grown defect list)。使用sginfo命令可以查看硬盘的PLIST和GLIST列表。

[root@node100 ~]# sginfo -d /dev/sdc
INQUIRY response (cmd: 0x12)
----------------------------
Device Type                        0
Vendor:                    HGST    
Product:                   HUS728T8TAL5204 
Revision level:            C414

>>> Unable to read primary (PLIST) defect data.
Defect Lists
------------
0 entries (0 bytes) in grown (GLIST) table.
Format (4) is: bytes from index [Cyl:Head:Off]
Offset -1 marks whole track as bad.

这个PLIST和GLIST有什么区别呢?简单的说PLIST记录出厂时发现的坏块,在映射LBA的时候会自动跳过这些坏块,不影响性能。而GLIST是使用过程中发现的坏块,这些LBA可能会被重分配到其它的物理块上,访问这些坏块就会影响性能。具体的可以参考这篇文档PLIST基本缺陷列表与GLIST 成长缺陷列表

如何制造硬盘故障(软件)

SBC文档中提到,可以使用WRITE LONG命令来制造假的不可恢复的故障。

参考资料

SBC-4

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,639评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,093评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,079评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,329评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,343评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,047评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,645评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,565评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,201评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,338评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,014评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,701评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,194评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,685评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,345评论 2 358

推荐阅读更多精彩内容

  • 一、源题QUESTION 36Your database is open and the LISTENER lis...
    猫猫_tomluo阅读 1,239评论 0 2
  • Software Requirements Specifications Document CS330 Softw...
    卤蛋Aunm阅读 258评论 0 0
  • The Great A.I. Awakening How Google used artificial intel...
    图羽阅读 1,209评论 0 3
  • 马莹花是前一天和爸爸住在亲戚家,爸爸的表妹那里。爸爸路过那里,正好看了看自己的病,胸膜炎已经好久了。看了之...
    何亦群阅读 262评论 2 2
  • 昨天,女儿去朋友家玩儿,回来感慨地说:“还是我们家好。” 我问“怎么了?” 她说,“朋友在家不管做什么,她妈妈总是...
    昕明阅读 322评论 1 2