本帖最後由 pbodq 於 2026-2-23 19:45 編輯
回覆 111# madebyp90
c6其實不用太介意, 它表達的意義, 不算嚴重
01,05,c5,c6 這四項數值互相有很微妙的邏輯關係
其中01及c5係最關健性, 一般人覺得已死的05, 其實反而是好事
這關乎底層物理概念
唔好以為HD是絕對的discrete斷絕式數位化
磁粉粒其實是類比訊號, 唔會用一粒粉咁少去代表north或south
在顯微鏡下, 而係在一個區域空間, 用若干粒粉去反射1個bit訊號(many to one的原則, not one to one), 讀頭統計該區域是north(1)多還是south(0)多 (因為要容錯), 然後判斷該bit最終是1還是0。
這跟你在沙灘用筆刮幾條痕差不多, 若你隻手施加的力道大, 高矮坑道越明顯 ; 但如果d砂越乾越鬆散, 當你施加外力後, 少部份砂有機會sher返落坑, 高低不明顯。所以訊號的準確度及統計速度會受幾個因素影響, 不能立即就見到是0還是1, 不明確時就要re-read幾次(就是c5 pending, 準確譯名是不穩定/不確定磁區)。所以點解果d wiping 軟件要寫7次, 因為前兩次施加的磁場, 在bad sectors的角度, 因太頑固, 大機會不能被施加上磁改值, 該sector的數值不會被改變, 有機會是一個read only的sector 所以要write多幾次
這些又跟01,05,c5,c6有乜關係?
firmware個機制順序是
1.寫頭寫入512 Byte 0 or 1 (把磁粒上磁, 舉例每個bit 10粒, 512 x 8 x 10), 或4096 Byte(是但la, 視乎sector大小), 然後再搵額外空間寫入ECC Byte, 通常在該sector旁。到這一步為止, firmware係"唔會"覆檢data的成功或對錯
2.假如上唔到磁或其中幾bits的磁值出錯, 在這階段係無辦法得知。
這最少有兩種scenarios發生, a. 寫入的那刻已經出錯失敗; b.寫入時是對的, 但轉了兩年後, 磁值錯亂了
(其實還有第三第四種 conditions, 但太長, 唔想寫 )
3.來到firmware修正的步驟:
無論2a還是2b, 只有當讀頭再次讀取該pending sector時, 才能從ECC中察覺有error出現, 所以定期scan, scrub disks有一定需要,就像body check。但你要搞清ECC checksum只能detect errors, 它是而不能correct errors 那魔firmware要怎樣才correct到errors?
正正是上文, 從10粒1bit的統計中,不停 re-read re-try re-calculate, 睇下可唔可以從唔明顯的訊號值中, 撞返岩果ECC checksum一致
所以01個error修正rate就會升 ; 撞左一大輪都撞唔正的話, c6就有hit count
4.未完事: firmware會把太難修正, 過了timeout deadline都讀唔返出來的sector location記低
下次寫data入該sector時, 才會trigger LBA re-map, 即05上升
05上升就開心了, 一片碟一般有3%空閒多餘的健康sector作備用。14TB, 8片16面就正反每面約26GByte左右
呢d區通常在每片內圈, 所以特別健康, 亦特別慢。
這裡出現幾個conditional bugs, 假如未重新寫入(未remap), 卻幸運地能再次成功讀取pending sector (別忘了那個刮砂原理的模型), firmware就會它該sector從blacklist變whitelist。咁就玩死你了,你有排都remap唔到
所以點解我話, 見到05大升返而是好事, 因為雖然隻碟原本好唔健康, 但佢態度好極積努力地去康復緊, 進度容易
反而c5多, 未必係一件好件, 會浪費好多時間去retry; 這要跳到第五點, 詳講c5 pending
(出c6就立即撥備, 決斷可靠)
5.pending的程度分四類
a.顆粒每次上磁後, 統計磁值都不穩定
例如:我上1後: 第一次讀取是0, 第二次讀取變回1, 第三次讀又變返0
這種品質的碟片是最頭痛去處理
b.顆粒只是線性衰退不穩定
例如:我上1後: 一年後讀出來要估幾次才成功, re-write 一次後, 可以順利re-read幾次, 訊號keep到一年內不失真值
c.software cause wrong values
在開放的ATA標準指令集中, 容許Windows/Linux刻意寫入錯誤的sector ECC, 因為要讓廠方developers容易模疑bad sectors環境去debug。否則每次開發, 都要叫個developer拎個鎚去打隻碟?
這跟sector物理有無損毀完全無關係, 單純一次re-write, 寫入both正確的data field及ECC就解決了。這些黑方法我就不詳說, 否則HD廠鬧死我 lock更多API
6.最理想去重評健康度的方法是, 先全碟寫一次00, 再全碟寫一次FF(即full 11), 然後全碟寫一次random 01, 最後full read一次,覆檢checksum反應值
而在full read的過程中 (以一個512Byte sector的spec來說)
讀頭每次只讀512Byte跟每次讀block size :512 x 4或者8, 效果可以好唔同 (當然效率亦會差好遠, 但我這裡的焦點只在乎健康)
7200rpm, 就一秒512Byte x 4面積 x 7200次, 約16MByte per head每層
咁呢個行為關bad sector / pending乜事?
殘酷現實是 : 若你每次謹以一個512Byte sector (即內地人所謂的慢掃, 其實好多人都講大話, 用快掃冒充慢掃)去掃一隻14TB, 可能要一星期(快掃, 四至八 sectors per block, 相對來說大概只需14-20小時), 你才能直正驗出每個sector原本的訊號反應時間
我猜是讀頭全面積的電動勢差, 產生的感應電流大好多, 彌補了個別弱弱的512Byte訊號
一般來說, 按返廠商製片時的physical sector size去定義block size已經足夠可靠
不過話說回來, spot唔出就spot唔出 la, 唔使追求咁完美, 原因係假如applications 用較大的面積進行scanning , 已經有滿意的訊號反映, 咁平時使用時, 大概不會出現卡卡卡的情況
P.S.
a. 如果你單純只做一次full read, 係排查唔到5d的那種pending status,
5d condition我上面無寫, 是一種不能重新上磁的status (舊值讀出來是無問題的 )
b. WD家用碟, firmware 的blacklist condition搵笨過enterprise好多, 有排都remap唔到
c. 相對sectors健康度來說, 你反而要諗諗點解會無故斷電, 這個現象更可怕 |