Có một khu vực xấu chỉ ra một đĩa thất bại?


15

Hệ thống Ubuntu 13.10 của tôi đã hoạt động rất kém trong khoảng một ngày qua. Nhìn vào nhật ký kernel, có vẻ như đĩa SATA <1yr cũ 3TB đang gặp sự cố với một khu vực cụ thể:

Nov  4 20:54:04 mediaserver kernel: [10893.039180] ata4.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Nov  4 20:54:04 mediaserver kernel: [10893.039187] ata4.01: BMDMA stat 0x65
Nov  4 20:54:04 mediaserver kernel: [10893.039193] ata4.01: failed command: READ DMA EXT
Nov  4 20:54:04 mediaserver kernel: [10893.039202] ata4.01: cmd 25/00:08:f8:3f:83/00:00:af:00:00/f0 tag 0 dma 4096 in
Nov  4 20:54:04 mediaserver kernel: [10893.039202]          res 51/40:00:f8:3f:83/40:00:af:00:00/10 Emask 0x9 (media error)
Nov  4 20:54:04 mediaserver kernel: [10893.039207] ata4.01: status: { DRDY ERR }
Nov  4 20:54:04 mediaserver kernel: [10893.039211] ata4.01: error: { UNC }
Nov  4 20:54:04 mediaserver kernel: [10893.148527] ata4.00: configured for UDMA/133
Nov  4 20:54:04 mediaserver kernel: [10893.180322] ata4.01: configured for UDMA/133
Nov  4 20:54:04 mediaserver kernel: [10893.180345] sd 3:0:1:0: [sdc] Unhandled sense code
Nov  4 20:54:04 mediaserver kernel: [10893.180349] sd 3:0:1:0: [sdc]
Nov  4 20:54:04 mediaserver kernel: [10893.180353] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Nov  4 20:54:04 mediaserver kernel: [10893.180356] sd 3:0:1:0: [sdc]
Nov  4 20:54:04 mediaserver kernel: [10893.180359] Sense Key : Medium Error [current] [descriptor]
Nov  4 20:54:04 mediaserver kernel: [10893.180371] Descriptor sense data with sense descriptors (in hex):
Nov  4 20:54:04 mediaserver kernel: [10893.180373]         72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
Nov  4 20:54:04 mediaserver kernel: [10893.180384]         af 83 3f f8
Nov  4 20:54:04 mediaserver kernel: [10893.180389] sd 3:0:1:0: [sdc]
Nov  4 20:54:04 mediaserver kernel: [10893.180393] Add. Sense: Unrecovered read error - auto reallocate failed
Nov  4 20:54:04 mediaserver kernel: [10893.180396] sd 3:0:1:0: [sdc] CDB:
Nov  4 20:54:04 mediaserver kernel: [10893.180398] Read(16): 88 00 00 00 00 00 af 83 3f f8 00 00 00 08 00 00
Nov  4 20:54:04 mediaserver kernel: [10893.180412] end_request: I/O error, dev sdc, sector 2944614392
Nov  4 20:54:04 mediaserver kernel: [10893.180431] ata4: EH complete

Các kern.logtập tin là khoảng 33MB hầu hết đầy đủ các lỗi trên lặp đi lặp lại và ngành không xuất hiện để được bất kỳ khác nhau trong các tin nhắn lặp đi lặp lại.

Tôi hiện đang chạy lệnh sau trên đĩa chưa được đếm để kiểm tra và cố gắng loại bỏ bất kỳ vấn đề nào mà đĩa có thể gặp phải. Tôi đang ở khoảng 12 giờ và dự kiến ​​sẽ mất thêm 24/48 giờ nữa vì đĩa quá lớn:

e2fsck -c -c -p -v /dev/sdc1

Câu hỏi của tôi là: Ổ đĩa này bị lỗi, hay tôi đang xem xét một vấn đề phổ biến ở đây? Tôi tự hỏi liệu có bất kỳ điểm nào để tôi sửa chữa hoặc bỏ qua các thành phần xấu và liệu tôi có nên thay thế đĩa được bảo hành trong khi nó vẫn được bảo hành hay không. Kiến thức của tôi về lệnh trên là hơi thiếu, vì vậy tôi nghi ngờ liệu nó có giúp ích hay không.

Cập nhật nhanh!

e2fsck cuối cùng đã hoàn thành sau 2 ngày với rất nhiều 'khối được yêu cầu nhiều lần inode'. Cố gắng gắn kết hệ thống tập tin dẫn đến một lỗi, buộc nó phải quay trở lại chỉ đọc:

Nov 11 08:29:05 mediaserver kernel: [211822.287758] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended
Nov 11 08:29:05 mediaserver kernel: [211822.301699] EXT4-fs (sdc1): mounted filesystem with ordered data mode. Opts: errors=remount-ro

Đang cố gắng đọc khu vực bằng tay:

sudo dd count=1 if=/dev/sdc of=/dev/null skip=2944614392
dd: reading ‘/dev/sdc’: Input/output error
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.73077 s, 0.0 kB/s

Cố gắng viết cho nó:

sudo dd count=1 if=/dev/zero of=/dev/sdc seek=2944614392
dd: writing to ‘/dev/sdc’: Input/output error
1+0 records in
0+0 records out
0 bytes (0 B) copied, 2.87869 s, 0.0 kB/s

Trên cả hai tính, Reallocated_Sector_Ctcòn lại 0.

Ổ đĩa đi vào trạng thái ngủ khá thường xuyên. Bây giờ tôi nghĩ đây có thể là một vấn đề hệ thống tập tin? Tôi không phải là 100%.


4
Đó gần như / chắc chắn / một dấu hiệu để đảm bảo các bản sao lưu của bạn được xếp theo thứ tự và sau đó kiểm tra phần cứng của bạn.
Shadur

Hừm. Họ đã hết thời nhưng họ ở đó bất kể thế nào. Rất bực bội, vì ổ đĩa này đã thay thế một lỗi khác.
MrNorm

Thất bại, hãy xem những câu hỏi và trả lời này, nơi tôi đã đề cập đến cách tiến hành: unix.stackexchange.com/search?q=user%3A7453+hdat
slm

2
... Nếu ổ đĩa này thay thế một ổ bị lỗi, có khả năng đó là bộ điều khiển chứ không phải ổ đĩa.
Shadur

Câu trả lời:


16

Các thành phần xấu luôn là một dấu hiệu cho thấy ổ cứng bị lỗi, trên thực tế tại thời điểm bạn thấy lỗi I / O như thế này, có thể bạn đã bị mất / hỏng một số dữ liệu. Tạo một bản sao lưu nếu bạn chưa có, hãy tự kiểm tra smartctl -t long /dev/diskvà kiểm tra dữ liệu SMART smartctl -a /dev/disk. Nhận một sự thay thế nếu bạn có thể.

Các khu vực xấu không thể được sửa chữa, chỉ được thay thế bằng các khu vực dự trữ, gây hại cho hiệu suất của ổ cứng, vì chúng yêu cầu tìm kiếm thêm cho các khu vực dự trữ mỗi khi chúng được truy cập. Đánh dấu các khu vực như vậy là xấu trên lớp hệ thống tập tin sẽ giúp, vì chúng sẽ không bao giờ được truy cập sau đó; tuy nhiên thật khó để xác định các lĩnh vực nào đã được phân bổ lại bởi đĩa, vì vậy rất có thể hệ thống tập tin sẽ không biết để tránh khu vực bị ảnh hưởng.


Cảm ơn. Thực sự hữu ích để biết vì nó luôn là một khu vực màu xám đối với tôi. Tôi sẽ chuyển sang ổ đĩa và gửi lại, vì nó được bảo hành.
MrNorm

1
Không phải vậy. Các lĩnh vực xấu chỉ cho thấy lưu lượng truy cập cao đến một khu vực. Trong trường hợp MOST, nó chỉ ra một đĩa bị lỗi. Bạn có thể điều chỉnh tốc độ tìm kiếm của mình để đánh dấu các phản hồi chậm là xấu mặc dù ... Thật quá phức tạp để nói luôn.
RobotHumans

2
Cũng có thể thấy lỗi đọc đối với một hệ thống tệp mà vì lý do nào đó lớn hơn đĩa thực tế.
Thorbjørn Ravn Andersen

@frostschutz nghĩa là Get a replacement if you can.gì? bạn có nghĩa là thay thế đĩa?
máy bay

10

Để làm cho ổ đĩa để phân bổ lại các lĩnh vực, thông thường bạn cần phải viết một cái gì đó vào chúng. Tuy nhiên, dd( D isk D estroyer) không phải lúc nào cũng hoạt động và rất không an toàn: nếu bạn nhầm lẫn giữa các tùy chọn skipbạn có thể dễ dàng tự bắn vào chân mình bằng cách ping các khối đầu tiên và viết một khối từ "offset" đó khu vực 0 của đĩa cứng của bạn .seekskipN/dev/zero

Nếu bạn thực sự biết bạn muốn buộc khu vực bị ghi đè bằng số không, bạn nên sử dụng hdparm:

% sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: FAILED: Input/output error

Có, ngành 833192656 cũng đã thất bại trong các bài kiểm tra thông minh. Để viết số không cho nó, sử dụng --write-sector:

% sudo hdparm --write-sector 833192656 /dev/sda
/dev/sda:
Use of --write-sector is VERY DANGEROUS.
You are trying to deliberately overwrite a low-level sector on the media.
This is a BAD idea, and can easily result in total data loss.
Please supply the --yes-i-know-what-i-am-doing flag if you really want this.
Program aborted.

Như một biện pháp bảo vệ, hdparmkhông thực sự viết bất cứ điều gì trừ khi bạn --yes-i-know-what-i-am-doingchuyển công tắc sang hdparm:

% sudo hdparm --yes-i-know-what-i-am-doing --write-sector 833192656 /dev/sda
/dev/sda:
re-writing sector 833192656: succeeded
% sudo hdparm --read-sector 833192656 /dev/sda                              

/dev/sda:
reading sector 833192656: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
[      ... more zeroes here...        ]
0000 0000 0000 0000 0000 0000 0000 0000

%

Mặc dù đây là một aswer cổ đại, tôi thực sự tự hỏi ý của bạn là "dd không phải lúc nào cũng hoạt động". Bạn có gợi ý rằng nó có thể không ghi dữ liệu theo hướng dẫn? Nó không làm gì đặc biệt dễ bị thất bại, chỉ sao chép dữ liệu xung quanh. Bạn có thể nhận được kết quả tương tự bằng cách sử dụng hai dòng trong hầu hết mọi ngôn ngữ lập trình.
TooTea

7

Không, các thành phần xấu không phải lúc nào cũng là một dấu hiệu của một ổ đĩa bị lỗi. Đôi khi nếu quá trình ghi đang diễn ra tại thời điểm mất điện, dữ liệu trong khu vực sẽ bị hỏng, dẫn đến lỗi khi bạn cố đọc nó. Cố gắng ghi dữ liệu mới vào khu vực này có thể hoạt động tốt vì không có gì sai về mặt vật lý với nó.

Bạn có thể chạy badblocks -ntrên ổ đĩa để đọc và viết lại mọi khu vực hoặc trong trường hợp của bạn vì bạn đã biết số lượng khu vực được đề cập, bạn có thể sử dụng ddđể viết số không cho nó. Bạn có thể kiểm tra số liệu thống kê SMART với smartctl -a. Bạn sẽ thấy số đếm được phân bổ lại đang chờ xử lý cho biết có bao nhiêu khu vực không đọc được và sau khi cố gắng viết khu vực đó, số lượng này sẽ giảm. Số lượng khu vực được phân bổ lại có thể tăng lên, trong trường hợp đó là xấu về thể chất và đã được ánh xạ lại vào nhóm dự phòng, và đây có thể là một dấu hiệu cho thấy ổ đĩa đang trên đường ra. Nếu không, sau đó nó chỉ là tranh giành và sẽ ổn ngay bây giờ.

Hãy thử đọc khu vực đầu tiên:

dd count=1 if=/dev/sda of=/dev/null skip=nnnn

Nếu thất bại, thì bạn có số đúng, sau đó bạn có thể xóa nó bằng:

dd count=1 if=/dev/zero of=/dev/sda seek=nnnn

Kiểm tra kỹ xem bạn đã gõ lệnh chính xác trước khi nhấn enter.


Thật thú vị khi bạn nói điều đó, bởi vì tôi có một số thông tin thú vị theo lệnh của bạn. Tôi đã sửa đổi câu hỏi của tôi ở trên.
MrNorm

Có phải ổ đĩa của bạn không hỗ trợ SMART vì một số lý do hoặc tại sao bạn chưa kiểm tra nó?
frostschutz

1
@frostschutz "Trên cả hai số đếm, Reallocated_Sector_Ct vẫn là 0." Có vẻ như OP đã kiểm tra SMART.
một CVn

@MrNorm, vui lòng thêm smartctl -ađầu ra đầy đủ vào câu hỏi của bạn.
psusi

2
Vui lòng không sử dụng cái này (nó thậm chí không luôn hoạt động) và nếu bạn nhầm lẫn bỏ qua và tìm kiếm, bạn sẽ ghi đè MBR của bạn thay vào đó. Xem câu trả lời của tôi
Antti Haapala
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.