Làm cách nào để tôi dễ dàng sửa chữa một khối không thể đọc được trên đĩa Linux?


22

Hệ thống Linux của tôi đã bắt đầu ném các lỗi SMART trong syslog. Tôi đã theo dõi nó và tin rằng vấn đề là một khối duy nhất trên đĩa. Làm thế nào để tôi dễ dàng lấy đĩa để phân bổ lại một khối đó? Tôi muốn biết tập tin nào đã bị phá hủy trong quá trình này. (Tôi biết rằng nếu một khối bị lỗi trên đĩa thì những người khác có khả năng sẽ theo dõi; tôi có một bản sao lưu đang diễn ra tốt và chỉ muốn cố gắng giữ cho đĩa này hoạt động.)

Tìm kiếm trên web dẫn đến khối Bad HOWTO , mô tả một quy trình thủ công trên một đĩa chưa được đếm. Có vẻ phức tạp và dễ bị lỗi. Có công cụ nào để tự động hóa quá trình này trong Linux không? Tùy chọn khác duy nhất của tôi là công cụ chẩn đoán của nhà sản xuất , nhưng tôi cho rằng sẽ chặn các khối xấu mà không có bất kỳ báo cáo nào về những gì đã bị phá hủy. Trường hợp xấu nhất, nó có thể là siêu dữ liệu hệ thống tập tin.

Đĩa trong câu hỏi là phân vùng hệ thống chính. Sử dụng ext3fs và LVM. Đây là nhật ký lỗi từ syslog và bit có liên quan từ smartctl.

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

Có một bãi rác thông minh đầy đủ trên pastebin .


Tôi nghĩ phần sụn đĩa sẽ tự động ánh xạ lại khối xấu khi đọc, vì vậy về mặt lý thuyết nó đã được thực hiện. Như đã nêu dưới đây, hãy chạy fsck (hoặc đẳng thức chính xác cho FS của bạn) để đảm bảo lớp phủ FS vẫn ổn định.
BuildTheRobots

2
Hiểu biết của tôi là phần sụn đĩa sẽ chỉ ánh xạ lại khối trên ghi chứ không phải đọc. Vì vậy, thực sự tôi cần phải viết một khối vào câu hỏi.
Nelson

1
Cuối cùng tôi đã nghỉ hưu đĩa này. Nó chạy tốt trong vài tháng, nhưng sau lỗi đọc thứ 5 tôi đã từ bỏ nó.
Nelson

Câu trả lời:


12

Bạn có thể thử hdparm --write-sector <LBA> /dev/ice.

Tôi không biết cách nào khác để làm điều này - bạn cần chuyển đổi thủ công LBA thành các khối hệ thống tập tin (như bạn đã tìm thấy)


Ồ, đó là một lá cờ mới! Điều đó chắc chắn sẽ quan tâm đến việc tái phân bổ khối xấu. Bây giờ tất cả những gì tôi cần là một cách dễ dàng để tìm thấy những gì nó sẽ ghi đè.
Nelson

3
Đã sử dụng phương pháp này để sửa đĩa, tôi có thể nói đây là phương pháp đúng. Buộc viết cho khu vực được đề cập sẽ buộc ổ đĩa phải đối mặt với khu vực đó và (a) có được một văn bản thành công, hoặc (b) kết thúc với một giây xấu vĩnh viễn cùng với một bản tóm tắt.
Avery Payne

Tuyệt quá! Và dễ dàng hơn nhiều so với smartmontools.sourceforge.net/badblockhowto.html
Janning

Thật kỳ lạ khi quy trình lặp này (tìm kiếm khu vực xấu tiếp theo thông qua SMART và buộc phân bổ lại) không được tự động hóa với một tiện ích đơn giản! ..
imz - Ivan Zakharyaschev

32

Tôi đã từng viết firmware cho WD và tôi đã từng viết firmware cho việc gán lại các khối xấu.

Đầu tiên, hầu hết các khối xấu được phát hiện khi đọc, không ghi. Viết được thực hiện một cách mù quáng, có nghĩa là dữ liệu được viết mà không được kiểm tra. Do đó, trên một văn bản nếu phương tiện truyền thông là xấu, bạn sẽ không biết điều đó cho đến khi máy chủ lưu trữ đến khu vực đó. Có một phần nhỏ của khu vực (tiêu đề khu vực) được đọc trên ghi để xác định đúng khu vực, do đó, nếu có lỗi trong việc đọc tiêu đề ngành, ổ đĩa sẽ gán lại khu vực đó và ghi nó với dữ liệu nhận được từ lệnh ghi. Nhưng phần lớn các khối xấu được phát hiện khi đọc và chỉ vì một lần ghi thành công cho một khu vực không có nghĩa là phương tiện truyền thông tốt hoặc khu vực đó đã được chỉ định lại.

Bây giờ về việc xác định lại khối xấu (còn được gọi là tái phân bổ). Có, thông thường, ổ đĩa sẽ cố gắng gán lại một sector nếu lỗi đủ tệ (nghĩa là lỗi ECC đủ tệ) nhưng ổ đĩa vẫn có thể khôi phục dữ liệu sau khi sửa ECC. Thông thường điều này được thực hiện tự động. Ngoại lệ duy nhất là chủ nhà trước đây có thể đã nói với ổ đĩa không thực hiện phân bổ tự động, nhưng điều này hiếm khi được thực hiện.

Vì vậy, điều gì xảy ra nếu ổ đĩa đọc và không thể khôi phục dữ liệu? Không có gì. Lỗi được báo cáo cho máy chủ lưu trữ, nhưng không có sự phân công lại được thực hiện. Vấn đề là ổ đĩa có thể gán lại khu vực đó, nhưng nó không có ý tưởng nhỏ nhất để ghi dữ liệu nào trong khu vực mới được chỉ định lại. Nếu nó chỉ viết một loạt các số không, giả sử, và sau đó khu vực được đọc lại, nó sẽ trả về tất cả các số không mà không có bất kỳ dấu hiệu nào cho thấy dữ liệu không hợp lệ. Điều này về cơ bản giống như tham nhũng dữ liệu. Ổ đĩa không thể dựa vào máy chủ theo dõi lỗi vì nhiều lý do (ví dụ: nếu ổ đĩa được chuyển sang máy chủ mới thì sao?), Vì vậy, hành động tốt nhất là không làm gì khi dữ liệu có thể ' t được phục hồi.

Tuy nhiên, các ổ đĩa hiện đại sẽ lưu vị trí của khu vực xấu khi không thể phân bổ lại. Số lượng các thành phần xấu đang chờ phân bổ lại có thể được tìm thấy trong dữ liệu SMART. Điều gì xảy ra là nếu một ghi được thực hiện cho một trong các thành phần xấu đang chờ phân bổ lại, việc phân bổ lại được thực hiện vì ổ đĩa hiện có dữ liệu hợp lệ để ghi vào nó sau khi phân bổ lại. Do đó, khi mọi người nói viết cho một khu vực xấu sẽ tái phân bổ nó, đó thực sự chỉ là một nửa câu chuyện. Ổ đĩa phải được đọc trước để ổ đĩa có thể khám phá tất cả các thành phần xấu không thể được phân bổ lại tự động. Do đó, bạn có thể viết toàn bộ ổ đĩa và dữ liệu SMART sẽ cho biết không có khu vực xấu nào đang chờ phân bổ lại, nhưng bạn chưa nhất thiết phải xóa ổ đĩa của tất cả các khu vực xấu. Vì vậy, nếu bạn thực sự muốn xóa một ổ đĩa của tất cả các thành phần xấu,

Có nhiều cách khác để xử lý các khối xấu không thể được phân bổ lại. Nếu ổ đĩa là một phần của cấu hình RAID dự phòng (nghĩa là mọi thứ trừ RAID 0), phần mềm RAID sẽ tự động khôi phục dữ liệu cho một khu vực xấu từ các ổ đĩa khác và ghi nó vào khu vực được phân bổ lại. Các đĩa SCSI có lệnh gán lại khối rõ ràng mà máy chủ có thể sử dụng để buộc gán lại ngay cả khi không có dữ liệu hợp lệ để ghi vào khối, nhưng việc sử dụng nó ở mức khá thấp.


1
Cũng có thể đáng nói đến rằng ít nhất một số ổ cứng Seagate hỗ trợ Write-Read-Confirm, có thể được bật bằng cách sử dụng hdparm -R(giả sử một hdparm hợp lý gần đây). Điều này đi kèm với một hình phạt hiệu suất ghi đáng kể (khoảng một nửa thông lượng ghi và viết IOPS, bởi vì mỗi lần ghi bây giờ sẽ phát sinh lần đọc tiếp theo) nhưng nếu phần cứng của bạn hỗ trợ nó và khối lượng công việc của bạn rất nặng thì đây có thể là một biện pháp phòng ngừa rất khả thi .
CVn

2

Tôi nghĩ tất cả những gì bạn phải làm là:

e2fsck -c /dev/hda1

giả sử / dev / hda1 là phân vùng (không đếm được). Hoặc là:

e2fsck -c -c /dev/hda1

để làm một bài kiểm tra đọc-ghi (chậm) không phá hủy. Nó sẽ vẫn phải được bỏ qua. Tôi không nghĩ rằng điều này sẽ cung cấp cho bạn chi tiết về bất kỳ dữ liệu bị mất, mặc dù.


Nhưng thật đáng tiếc khi dường như không sử dụng thông tin từ SMART về các khối xấu. Tôi tự hỏi tại sao không có công cụ fsck nào sử dụng thông tin khối xấu từ SMART và cố gắng tránh chúng hoặc sửa chữa các tệp bị ảnh hưởng như được mô tả trong smartmontools.sourceforge.net/badblockhowto.html hoặc serverfault.com/a/106130/68972 . ..
imz - Ivan Zakharyaschev

2

Michael đã sửa nó và trong hầu hết các trường hợp tôi sẽ nói chỉ cần thay thế ổ đĩa là chúng rẻ. Tuy nhiên, nếu bạn không có bản sao lưu và không thể lấy dữ liệu quan trọng ra khỏi ổ đĩa, hoặc chỉ muốn sửa chữa ổ đĩa thì bạn có thể muốn thử sử dụng spinrite , ở mức cao nhất.

Tôi đã có một ổ đĩa máy tính xách tay bắt đầu tạo ra một số tiếng ồn vài năm trước. Badblocks cho thấy rằng ổ đĩa có 118 hoặc rất nhiều khối xấu hiển thị cho người dùng cuối. Vì tôi đã có một bản sao của SpinRite, tôi quyết định dùng thử trước khi mua một ổ đĩa mới. Sau khi chạy spinrite trên ổ đĩa badblocks cho thấy 0 khối xấu và tiếng ồn dừng lại. Ổ đĩa đã hoạt động được hơn hai năm kể từ đó.


Bạn có muốn bỏ phiếu cho mọi câu trả lời không phải là điều bạn muốn nghe không? Một ổ đĩa khỏe mạnh sẽ tự động ánh xạ lại một khối xấu. Nếu bạn phải đi ra ngoài để làm bất cứ điều gì để buộc điều này, ổ đĩa không còn khỏe nữa và nên được thay thế.
3dinfluence

Không, tôi chỉ đánh giá thấp một câu trả lời vì nó không trả lời câu hỏi của tôi. Bạn đề nghị spinrite, cảm ơn! Sự hiểu biết của tôi là một ổ đĩa lành mạnh sẽ không ánh xạ lại một khu vực xấu cho đến khi nó được viết. Tôi đang cố gắng tìm cách đơn giản nhất để bắt buộc viết. Đi đến gợi ý của Matthew và xem fsck có đủ thông minh để làm điều đó không.
Nelson

Xin lỗi tôi đã nhảy đến kết luận ở đó sau khi thấy 2 câu trả lời được bỏ phiếu nhanh chóng và bạn trả lời câu trả lời khác tôi cho rằng đó là bạn.
3dinfluence

2
Bạn đã đúng rằng bản tóm tắt khu vực xấu xảy ra khi ghi không thành công cho một khối. Nếu bạn chỉ có một khối bị hỏng khi có liên quan đến hệ thống tệp thì fsck có thể giải quyết vấn đề của bạn nếu khối được đề cập là khối siêu dữ liệu. fsck thực sự chỉ quét và sửa lỗi trong siêu dữ liệu. Vì vậy, nó không đảm bảo về dữ liệu. Các hệ thống tệp gen tiếp theo như BTRFS và ZFS có thể phát hiện và nếu bạn có lỗi dữ liệu chính xác dự phòng. Spinrite cũng sẽ buộc điều này khi nó đọc, sau đó ghi dữ liệu đảo ngược, đọc lại, sau đó đảo ngược dữ liệu trở lại trên mỗi khối như một phần của quá trình quét.
3dinfluence

1

Nếu bạn có các bản sao lưu và bạn biết đây là một lỗi logic và không phải là lỗi chính tả, thì cách tốt nhất để giải quyết vấn đề này là loại bỏ đĩa.

Tôi sẽ sử dụng MHDD nó khá dễ sử dụng và miễn là bạn nhớ đặt ổ cứng trong Bios thành mô phỏng IDE và sau đó quay lại AHCI khi công việc của bạn hoàn thành, bạn không có gì phải lo lắng.

Khi bạn khởi động lên MHDD, hãy chọn loại ổ đĩa của bạn trong lệnh ERASE và xác nhận lựa chọn của bạn.

Nhận cho mình coffie điều này có thể mất một lúc.

Sau khi Drive bị xóa, hãy chạy quét (f4) với Remap được đặt thành ON (mặc định là tắt). Nếu vẫn có vấn đề với ổ đĩa (điều đó có nghĩa là có một thiệt hại về mặt thực tế trên đĩa và ổ đĩa nằm ở độ dốc xuống dốc), tùy chọn này sẽ "Khắc phục" chúng bằng cách ánh xạ khu vực bị hỏng vào các phần khỏe mạnh của ổ đĩa.

Nếu không có lỗi UNC thì xin chúc mừng bạn và ổ đĩa của bạn vẫn có thể là bạn trong nhiều năm tới.


-1

Nếu đĩa bị hỏng, hãy thay thế nó. Nó không đáng để mạo hiểm rằng nó sẽ sụp đổ nhiều hơn.


Tôi đã rõ ràng về việc biết đĩa là xấu và có bản sao lưu để tránh rủi ro.
Nelson

2
Điều đó chỉ có nghĩa là bạn sẵn sàng đánh bạc. Tôi không nghĩ điều đó có nghĩa là không nên thay thế, chỉ là bạn sẵn sàng bỏ qua lời khuyên đó. Tôi nghi ngờ bất kỳ bản sao lưu nào cũng có thể cứu hệ thống của bạn khỏi chính nó khi đĩa bị vỡ và mọi thứ sẽ trở nên rất dễ vỡ khi mọi thứ xuống cấp.
Michael Graff

3
Câu trả lời này nên là một bình luận ... Câu hỏi rất cụ thể và hấp dẫn. Và do đó, đây không phải là một câu trả lời.
Pitto
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.