Độ chi tiết của URE đĩa cứng (lỗi đọc không thể phục hồi) là gì?


8

tl; dr trong trường hợp URE xảy ra trên hdd, tôi sẽ mất 1bit, 1Byte hoặc kích thước của một khu vực (512Bytes, hoặc 4096 Byte AF)? và nếu có thể giải thích tại sao vậy?

Bối cảnh: Câu hỏi ở đây phát sinh khi đĩa cứng gặp vấn đề khi đọc dữ liệu. Chắc chắn một đĩa có thể thất bại hoàn toàn khiến tất cả dữ liệu bị mất (DISK FAIL), nhưng trường hợp tôi hỏi ở đây là khi chỉ mất một phần nhỏ của nó (URE, lỗi đọc không chính xác).

Mặc dù tôi đã tìm kiếm thông tin liên quan đến URE, tôi đã tìm thấy rất ít. Điều này có thể có nguyên nhân của nó là những gì xảy ra bên trong ổ đĩa, tức là những gì bị ẩn khỏi tương tác trực tiếp của người dùng như ECCs-chỉnh sửa, đối với tôi khó liên quan đến những gì tôi truy cập với tư cách là người dùng - các lĩnh vực.

Chúng ta hãy tưởng tượng rằng hdd gặp khó khăn khi đọc dữ liệu.

Trong tình huống đó, chắc chắn điều này phải có nghĩa là:

  • (a) một số bit của khu vực không thể được đọc, hoặc
  • (b) tất cả các bit đều có thể được đọc, nhưng chúng không vượt qua kiểm tra tổng kiểm tra (tất nhiên điều này gây rắc rối cho một ngành 4096 Byte không chỉ là 8 * 4096 bit, mà là một số bit / byte bổ sung để kiểm tra / sửa lỗi (ví dụ: bit chẵn lẻ ) (c) ????

Tôi không tin là khi chúng ta ở trong tình huống xảy ra sự kết hợp giữa (a) và (b) và sự phục hồi đáng tin cậy của các byte của 4096 ngành, thì thật quá đáng khi cho rằng tất cả chúng đều bị cắt xén , thực sự nếu chúng ta nhận thức được logic sửa lỗi hdd xen kẽ, chúng ta có thể nói "nhìn một cái gì đó không kiểm tra và với một sự thay đổi tốt ít nhất 1,2,3, n bit / byte của dữ liệu khối là" sai " ". Nếu chúng ta đang tiết kiệm một cách dư thừa "xin chào, xin chào ....., xin chào" chuỗi byte ASCII trong lĩnh vực này, chúng ta thực sự vẫn có thể có một sự kế thừa công bằng "xin chào, xin chào ...." trước khi có "... Uellohello ... "(tức là" e "->" U ").

Vậy độ chi tiết của URE là gì?

CẬP NHẬT: đã có một bình luận đưa ra ý tưởng về khu vực xấu (và cho rằng điều này phản ánh mức độ chi tiết của một sự kiện URE. Nó không phải là vô lý, để đề xuất nó và có thể có thể được sử dụng để trả lời câu hỏi. câu hỏi về các lĩnh vực không thể đọc được đang chờ xử lý (tại đây /unix/1869/how-do-i-make-my-disk-unmap-pending-unreadable-sector ) khiến tôi nghĩ rằng trong một số các kịch bản thực sự có một đường mờ hơn ở giữa dữ liệu bị mất trong trường hợp URE.


Thông thường nó là hàng chục ngàn khối bị hư hỏng tại một thời điểm trong trường hợp đầu bị rơi. Nếu đó là bụi, vv truy cập vào các khối gần có thể lan rộng thiệt hại. Vì vậy, nó hiếm khi đơn giản như một phần của một khu vực lớn hơn có thể được xây dựng lại.
JamesRyan

@JamesRyan gợi ý tốt, nó luôn có thể tồi tệ hơn. Có lẽ tôi chỉ đơn giản là tìm hiểu về trường hợp xấu nhất có thể (đó chỉ là để mất một lĩnh vực, hoặc vì nó đã được giải quyết một phần trong các câu trả lời tốt, một phần của dữ liệu ngành, tùy thuộc vào loại bên trong của nó). có thể biết thêm về nguồn gốc của các lỗi không thể đọc được (và sự tồn tại của chúng tức là sự thối bit ngẫu nhiên, so với tác động va chạm đầu) sẽ phải được xem xét. Nhưng chúng tôi muốn có câu hỏi có thể trả lời ở đây, vì vậy tôi không cần phải phức tạp hóa câu hỏi nữa
nhân

Câu trả lời:


8

Mã sửa lỗi trên ổ cứng là một đoạn dữ liệu bổ sung được liên kết với từng lĩnh vực phần cứng. Trong quá trình viết, phần sụn ổ đĩa sẽ tính toán dữ liệu này và ghi cùng với dữ liệu của người dùng. Trong quá trình đọc phần sụn, hãy đọc ECC cùng với dữ liệu và kiểm tra chúng cùng nhau.

Đối với ổ cứng truyền thống, phần cứng là 512 byte. Đối với ổ đĩa Định dạng Nâng cao, đó là byte 4K (không quan trọng là ổ đĩa có hiển thị các cung 512 byte hay 4K byte trên giao diện hay không, tức là 512e so với 4kn).

Kết quả kiểm tra sau khi đọc về cơ bản có ba kết quả có thể xảy ra:

  • khu vực đã được đọc mà không có lỗi. Điều này thực sự không hoàn toàn phổ biến trên các ổ đĩa cứng hiện đại; mật độ bit sao cho chúng phụ thuộc vào ECC hoạt động.

  • khu vực đã được đọc với các lỗi có thể sửa chữa. Như ngụ ý ở trên điều này không phải là hiếm; nó được mong đợi Ổ đĩa trả về dữ liệu, với lỗi được áp dụng cho người dùng.

  • sector đã được đọc nhưng có quá nhiều "bit sai"; các lỗi không thể sửa được.

Trong trường hợp sau, ổ đĩa thường không trả về bất kỳ nội dung nào; nó chỉ trả về một trạng thái chỉ ra lỗi. Điều này là do không thể biết bit nào bị nghi ngờ, chứ đừng nói đến giá trị của chúng là gì. Do đó, toàn bộ khu vực (bit ECC và tất cả) là không đáng tin cậy. Không thể xác định phần nào của khu vực xấu là xấu, chứ đừng nói đến nội dung của nó. ECC là một "cử chỉ" được tính trên toàn bộ nội dung của ngành và nếu nó không khớp, thì đó là toàn bộ khu vực không phù hợp.

SpinRite hoạt động bằng cách đơn giản là cố gắng đọc đi đọc lại bad sector, sử dụng chức năng "đọc bảo trì" để trả về dữ liệu (nhưng không có bit ECC) mặc dù ổ đĩa có "lỗi không thể sửa". Như đã nói trong phần mô tả được liên kết bởi DavidPostill, nó có thể thành công với việc đọc không có lỗi (thực sự là "có thể sửa được"); hoặc có thể suy ra, về cơ bản bằng cách lấy trung bình các bit được trả lại với nhau, một phỏng đoán hợp lý tại nội dung của ngành. Nó không có nhiều khả năng sửa lỗi chính xác bằng ECC hơn ổ đĩa; về mặt toán học là không thể.


Có phải vẫn không thể về mặt toán học nếu dữ liệu bên trong tải trọng 4096Byte tự nó là sự kết hợp của tải trọng 4000Bytes và một ECC 96Byte khác ở trên không? (ví dụ vì tôi sẵn sàng cung cấp năng lực cho khả năng phục hồi trong bố trí cửa hàng dữ liệu?).
nhân

Tôi đoán là nó chỉ không thể về mặt toán học theo giả định ngầm định rằng không có sự dư thừa bên trong dữ liệu, phải không? - và cũng là câu trả lời tuyệt vời!
nhân

1
Chắc chắn rồi. Vào thời điểm đó, nó chỉ là một kênh không đáng tin cậy khác, nhưng nếu có đủ dư thừa trong đó .. Điều đáng chú ý là các trình điều khiển đĩa tiêu chuẩn của HĐH sẽ không cung cấp cho bạn nội dung của ngành nếu ổ đĩa cho rằng lỗi không thể sửa được. RAID-5 và các sơ đồ tương đương tương tự đang làm điều tương tự ở một "lớp ngoài" thay vì bên trong các trường dữ liệu của các khu vực hiện có.
Jamie Hanrahan

"Bắt" với các trình điều khiển os để trả lại (theo yêu cầu) tất cả, ngay cả dữ liệu chưa được xác minh là một vấn đề, vì một người dùng không có cửa sổ, tôi đã hỏi về điều này cụ thể là unix.stackexchange.com/questions/228254/,
humanityANDpeace

3

Độ chi tiết của URE là gì?

Lỗi đọc không thể phục hồi (URE) là lỗi đọc khu vực. Nếu khu vực không thể được đọc mà không có lỗi, thì đó không phải là vấn đề dù chỉ là 1 byte hay tất cả các byte của khu vực đó.

Độ chi tiết là kích thước ngành .

Ngay cả khi chỉ có 1 byte thất bại, thông thường bạn sẽ không lấy lại được bất kỳ dữ liệu nào từ khu vực đó mà không sử dụng phần mềm chuyên dụng.


Dữ liệu từ một khu vực thất bại có thể được phục hồi?

SpinRite nói:

SpinRite thậm chí có thể khôi phục hầu hết dữ liệu trong một khu vực không bao giờ có thể đọc hoàn hảo và bất kỳ phần mềm tiện ích nào khác đều loại bỏ hoàn toàn.

Xem cách SpinRite phục hồi dữ liệu không thể đọc được .


Khước từ.

Tôi không liên kết với SpinRite dưới bất kỳ hình thức nào và tôi chưa bao giờ sử dụng nó.


1
Tôi có xu hướng nghĩ rằng đây là một câu trả lời tốt, không phải vì nhất thiết tôi đồng ý rằng trong trường hợp URE, cần phải mất hoàn toàn một ngành (tức là sau tất cả 4k dữ liệu), nhưng vì hdd có thể loại bỏ ngay cả phần đó của "Khu vực xấu" vẫn sẽ có giá trị. Việc trình bày các đối số SpinWrite duy trì ý tưởng này, vì vậy câu trả lời cũng cung cấp một số cái nhìn sâu sắc hơn, tuyệt vời.
nhân

2

Không có thứ gọi là "không thể đọc được một chút", trừ khi bạn có một lỗi phần cứng thực sự nghiêm trọng như đầu không thể tìm đúng theo dõi, hoặc theo dõi servo bị hỏng và không thể tìm thấy đúng khu vực . Rõ ràng trong cả hai trường hợp, bạn sẽ có, ít nhất là toàn bộ một lĩnh vực không thể đọc được.

Mặt khác, bạn luôn lấy lại bit, chúng chỉ có thể là bit không chính xác . Đây là nơi mà mã sửa lỗi xuất hiện; nó thêm một số bit ECC bổ sung vào mỗi sector, sao cho bất kỳ sự kết hợp chính xác nào giữa các bit dữ liệu và bit ECC đều tuân thủ một số quy tắc đại số. Nếu tất cả các bit được đọc chính xác, mã sẽ xác nhận và dữ liệu có thể được gửi lại trực tiếp. Nếu một số lượng nhỏ bit được đọc không chính xác, mã ECC có thể được sử dụng để xác định chính xác những bit nào và sửa chúng, vì vậy tất cả dữ liệu được truyền lại chính xác. Nếu một số lượng lớn của các bit được đọc sai, mã ECC có thể phát hiện rằng có một lỗi, nhưng nó không còn có đủ thông tin để nhân vật ra bit là không chính xác; Đây là một lỗi đọc không chính xác. Nếu mộtsố lượng bit rất lớn được đọc không chính xác, sau đó mã có thể xác nhận chính xác "tình cờ" và ổ đĩa sẽ trả về dữ liệu bị hỏng, nhưng với đủ bit ECC, xác suất xảy ra có thể nhỏ đến mức bạn muốn.

Vì vậy, để trả lời câu hỏi tôi nghĩ bạn đang mắc phải - nếu có lỗi đọc một phần nhưng có đủ thông tin để tìm ra lỗi xảy ra ở đâu, thì nó cũng có thể được sửa và máy tính sẽ không thấy lỗi gì cả . Điều này thực sự xảy ra liên tục. Một lỗi không đáng có xảy ra khi không thể tìm ra bit dữ liệu nào hợp lệ và bit nào không hợp lệ và do mã sửa lỗi được tính trên một khu vực, điều này xảy ra ở mức độ chi tiết của ngành.


1

Đã xem xét và lấy cảm hứng từ câu trả lời https://superuser.com/a/969917/160771 từ https://superuser.com/users/337631/davidpostill

Tôi muốn trả lời trình bày một câu trả lời thay thế phần nào mở rộng. Đầu tiên, sự thật là đĩa cứng và phần sụn của nó là nguồn gốc của một sự kiện URE, đó là sự kiện mà dữ liệu không thể đọc được. Hơn nữa, sự thật là dữ liệu được ghi vào đĩa trong các lĩnh vực 512 hoặc 4096 byte dữ liệu có thể sử dụng và khoảng 50 hoặc 100 byte dữ liệu bổ sung tương ứng sẽ cho phép kiểm tra và sửa lỗi.

Nói về một URE xảy ra một cách tự nhiên trong bối cảnh của một lĩnh vực đĩa cứng. Thuật ngữ khu vực xấu chắc chắn có liên quan phần nào, nhưng không giống với tình huống hiện tại khi chúng ta có một khu vực URE.

Một lĩnh vực với một số vấn đề được đọc mà không có lỗi, không nhất thiết là hoàn toàn vô nghĩa. Có thể thực sự là tất cả 4096 dữ liệu đã bị hỏng, nhưng cũng có thể chỉ hơn 1 bit là đáng tin cậy (thông qua dữ liệu ECC bổ sung được thêm vào cho mỗi khu vực) đã bị hỏng.

Trong casese, trong đó chỉ một vài byte nhiều hơn hdd có thể sửa đã bị hỏng, có những thay đổi mà phần của 4096 Byte có dữ liệu có ý nghĩa.

Một ví dụ có thể là 4096 đại diện cho charbyte ASCII gồm 2 câu. Sau đó, có thể mũ 1 câu trở lên là hoàn toàn nguyên vẹn. Ngoài ra, có thể là mọi chữ cái thứ 2 hoặc thứ 3 đã bị xóa. Nếu dữ liệu của 4096 bị mất trong một sự kiện URE thì tùy thuộc vào việc giải thích và phụ thuộc vào dữ liệu. Người ta có thể hình dung rằng dữ liệu đó có một lớp vỏ ECC khác, cho phép phục hồi thêm.

Do đó, điều tốt là hầu hết các phần cứng đều đối xử với các lĩnh vực URE khác với các lĩnh vực xấu:

Thông thường, ánh xạ lại tự động của các lĩnh vực chỉ xảy ra khi một khu vực được viết. Logic đằng sau điều này có lẽ là ngay cả khi một khu vực không thể được đọc bình thường, nó vẫn có thể đọc được bằng các phương thức phục hồi dữ liệu. (từ https://en.wikipedia.org/wiki/Bad_sector )

Hoặc ở mức độ đó, có thể là một phần của ngành vẫn chứa dữ liệu có thể sử dụng được.


Lưu ý rằng bài viết được đánh dấu là "cần sự chú ý từ một chuyên gia", "có thể chứa nghiên cứu ban đầu" tuyên bố cụ thể đó được đánh dấu là "cần dẫn nguồn". Cách nó được viết ("có lẽ" ??) cũng khiến nó nghe rất giống ai đó đang suy đoán, hơn là thứ gì đó có thể được chứng thực bằng vật liệu nguồn chất lượng cao.
một CVn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.