Làm cách nào để làm cho đĩa của tôi unmap đang chờ xử lý các thành phần không thể đọc được


10

Tôi có một đĩa với một số lĩnh vực không thể đọc được, theo smartd. Điều gì sẽ là cách dễ nhất để làm cho đĩa ánh xạ lại chúng và ngăn smartd phàn nàn?

Hôm nay, tôi nhận được hai trong số này mỗi giờ:

Ngày 10 tháng 9 23:15:35 hylton smartd [3353]: Thiết bị: / dev / sdc, 1 ngành hiện không thể đọc được (đang chờ xử lý)

Hệ thống này là một hệ thống x86 chạy Ubuntu Linux 9.10 (vui nhộn). Đĩa là một phần của nhóm LVM. Đây là cách smartctl xác định đĩa:

Gia đình người mẫu: Western Digital Caviar Gia đình ATA thế hệ thứ hai
Kiểu thiết bị: WDC WD5000AAKS-00TMA0
Số sê-ri: WD-WCAPW4207483
Phiên bản phần sụn: 12.01C01
Dung lượng người dùng: 500.107.862.016 byte

2
Vấn đề này đã tự giải quyết; đĩa bắt đầu phàn nàn lớn hơn, vì vậy tôi thay thế nó.
dkagedal

Câu trả lời:


15

Một khu vực không thể đọc được đang chờ xử lý là một khu vực trả về lỗi đọc và ổ đĩa đã được đánh dấu để ánh xạ lại ở cơ hội đầu tiên có thể. Tuy nhiên, nó không thể thực hiện ánh xạ lại cho đến khi một trong hai điều xảy ra:

  1. Lĩnh vực này được đọc lại thành công
  2. Khu vực này được viết lại

Cho đến lúc đó, khu vực vẫn đang chờ xử lý. Vì vậy, bạn có hai cách tương ứng để giải quyết vấn đề này:

  1. Tiếp tục cố gắng đọc lại khu vực cho đến khi bạn thành công
  2. Ghi đè khu vực đó bằng dữ liệu mới

Rõ ràng, (1) là không phá hủy, vì vậy bạn có thể nên thử nó trước, mặc dù hãy nhớ rằng nếu ổ đĩa bắt đầu thất bại một cách nghiêm trọng thì việc đọc liên tục từ một khu vực xấu có thể khiến nó thất bại nhanh hơn nhiều . Nếu bạn có nhiều lĩnh vực đang chờ xử lý và các lỗi khác và bạn quan tâm đến dữ liệu trên ổ đĩa, tôi khuyên bạn nên đưa nó ra khỏi dịch vụ và sử dụng công cụ tuyệt vời ddresTHER để khôi phục càng nhiều dữ liệu càng tốt. Sau đó loại bỏ ổ đĩa.

Nếu khu vực được đề cập có chứa dữ liệu bạn không quan tâm hoặc có thể khôi phục từ bản sao lưu, thì ghi đè có lẽ là giải pháp nhanh nhất và đơn giản nhất. Sau đó, bạn có thể xem số lượng được phân bổ lại và đang chờ xử lý cho ổ đĩa để đảm bảo rằng khu vực này đã được chăm sóc.

Làm thế nào để bạn tìm ra những gì ngành tương ứng trong hệ thống tập tin? Tôi đã tìm thấy một bài viết tuyệt vời trên trang web smartmontools , ở đây , mặc dù nó khá kỹ thuật và dành riêng cho hệ thống tập tin ext2 / 3/4 và reiser.

Một cách tiếp cận đơn giản hơn, mà tôi đã sử dụng trên một trong các ổ đĩa (Mac) của riêng mình, là sử dụng find / -xdev -type f -print0 | xargs -0 ...để đọc mọi tệp trên hệ thống. Ghi lại số lượng đang chờ xử lý trước khi chạy này. Nếu sector nằm trong một tệp, bạn sẽ nhận được thông báo lỗi từ công cụ bạn đã sử dụng để đọc các tệp (ví dụ: md5sum) hiển thị cho bạn đường dẫn đến tệp đó. Sau đó, bạn có thể tập trung sự chú ý của mình vào việc chỉ đọc lại tệp này cho đến khi nó đọc thành công. Thông thường, điều này sẽ giải quyết vấn đề, nếu đó là một tệp được sử dụng không thường xuyên mà chỉ cần đọc lại một vài lần. Nếu lỗi không còn hoặc bạn không gặp phải bất kỳ lỗi nào trong việc đọc tất cả các tệp, hãy kiểm tra số lượng đang chờ xử lý để xem nó có giảm không. Nếu nó có, vấn đề đã được giải quyết bằng cách đọc.

Nếu tệp không thể được đọc thành công sau nhiều lần thử (ví dụ 20) thì bạn cần ghi đè lên tệp hoặc khối trong tệp để cho phép ổ đĩa phân bổ lại khu vực. Bạn có thể sử dụng ddresTHER trên tệp (chứ không phải phân vùng) để ghi đè chỉ một cung, bằng cách sao chép vào tệp tạm thời và sau đó sao chép lại. Lưu ý rằng chỉ cần xóa tệp vào thời điểm này là một ý tưởng tồi, bởi vì khu vực xấu sẽ đi vào danh sách miễn phí, nơi sẽ khó tìm thấy hơn. Hoàn toàn ghi đè nó cũng là xấu, bởi vì một lần nữa các lĩnh vực sẽ đi vào danh sách miễn phí. Bạn cần viết lại các khối hiện có. Các notrunctùy chọn ddlà một cách để làm điều này.

Nếu bạn không gặp phải lỗi nào và số lượng chờ xử lý không giảm, thì khu vực đó phải ở trong nhà tự do hoặc một phần của cơ sở hạ tầng hệ thống tập tin (ví dụ: bảng inode). Bạn có thể thử lấp đầy tất cả không gian trống cat /dev/zero >tempfile, rồi kiểm tra số lượng đang chờ xử lý. Nếu nó đi xuống, vấn đề là trong danh sách miễn phí và bây giờ đã biến mất.

Nếu khu vực này nằm trong cơ sở hạ tầng, bạn có một vấn đề nghiêm trọng hơn và có thể bạn sẽ gặp phải lỗi khi đi trên cây thư mục. Trong tình huống này, tôi nghĩ giải pháp hợp lý duy nhất là định dạng lại ổ đĩa, tùy ý sử dụng ddresTHER để khôi phục dữ liệu nếu cần thiết.

Giữ một mắt rất gần trên ổ đĩa. Phân bổ lại khu vực là một hoàng yến rất tốt trong mỏ than , có khả năng đưa ra cảnh báo sớm về một ổ đĩa bị hỏng. Bằng cách hành động sớm, bạn có thể ngăn chặn một trận lở đất thảm khốc và rất đau đớn sau này. Tôi không gợi ý rằng một vài phân bổ khu vực là một dấu hiệu cho thấy bạn nên loại bỏ ổ đĩa. Tất cả các ổ đĩa hiện đại cần phải thực hiện một số phân bổ lại. Tuy nhiên, nếu ổ đĩa không quá cũ (<1 năm) hoặc bạn đang nhận được các phân bổ mới thường xuyên (> 1 / tháng) thì tôi khuyên bạn nên thay thế càng sớm càng tốt.

Tôi không có bằng chứng thực nghiệm để chứng minh điều đó, nhưng kinh nghiệm của tôi cho thấy các vấn đề về đĩa có thể được giảm bớt bằng cách đọc toàn bộ đĩa một lần, bằng một ddtrong các đĩa thô hoặc bằng cách đọc mọi tệp bằng cách sử dụng find. Hầu như tất cả các vấn đề về đĩa mà tôi gặp phải trong nhiều năm qua đã bị cắt đầu tiên trong các tệp hiếm khi được sử dụng hoặc trên các máy không được sử dụng nhiều. Điều này cũng có ý nghĩa về mặt heurist, ở chỗ, nếu một khu vực được đọc lại thường xuyên, ổ đĩa có cơ hội tái phân bổ nó khi lần đầu tiên phát hiện một vấn đề nhỏ với khu vực đó thay vì chờ đợi cho đến khi khu vực đó hoàn toàn không thể đọc được. Ổ đĩa không có khả năng làm bất cứ điều gì với một khu vực trừ khi máy chủ truy cập bằng cách nào đó, bằng cách đọc hoặc viết nó hoặc bằng cách thực hiện một trong các bài kiểm tra SMART.

Tôi muốn thử nghiệm ý tưởng về một công việc định kỳ hàng đêm hoặc hàng tuần để đọc toàn bộ đĩa. Hiện tại tôi đang sử dụng "RAID của người nghèo" trong đó tôi có ổ cứng thứ hai trong máy và tôi sao lưu ổ đĩa chính vào mỗi tối. Theo một số cách, điều này thực sự tốt hơn so với phản chiếu RAID, bởi vì nếu tôi vô tình xóa và xóa một tập tin, tôi có thể lấy phiên bản của ngày hôm qua ngay lập tức từ đĩa sao lưu. Mặt khác, tôi tin rằng một bộ điều khiển RAID phần cứng thực hiện rất nhiều công việc tốt trong nền để giám sát, báo cáo và khắc phục các sự cố đĩa khi chúng xuất hiện. Tập lệnh sao lưu hiện tại của tôi sử dụng rsyncđể tránh sao chép dữ liệu chưa thay đổi, nhưng theo quan điểm cần phải đọc lại tất cả các lĩnh vực, có thể tốt hơn là sao chép mọi thứ hoặc để có một tập lệnh riêng biệt đọc toàn bộ đĩa thô mỗi tuần.


2
Nếu bạn thực hiện sao lưu (rsyncing vào một đĩa bên trong không được tính;)) thì tất cả dữ liệu của bạn sẽ (đọc lại) trong các khoảng thời gian nhất định (tùy thuộc vào lịch sao lưu toàn bộ / gia tăng của bạn). RAID hoặc rsync không phải là dự phòng thay thế. Và btw, tôi 'tin' rằng bạn có quá nhiều niềm tin vào các nhà cung cấp phần cứng-RAID. ;)
maxschlepzig

@maxschlepzig: Bạn nói đúng. Tôi cũng có một chế độ sao lưu riêng. Tuy nhiên, kinh nghiệm của tôi là xác suất mất dữ liệu do ổ đĩa không vượt xa tất cả các rủi ro khác cộng lại (trộm cắp, hỏa hoạn, v.v.). Các ổ đĩa cứng hiện đại có độ tin cậy kém đến mức hiện tại tôi hoàn toàn hoang tưởng về chúng. Vì vậy, ổ đĩa nội bộ thứ hai của tôi là một phần chính trong chiến lược của tôi.
Neil Mayhew

Tôi đã đọc và đọc lại nội dung của đĩa bằng cách sử dụng dd if=/dev/sda ...và các sector vẫn đang chờ xử lý, có ý kiến ​​gì không?
dmansfield

@dmansfield, nếu bạn không gặp phải bất kỳ lỗi nào, thì tôi không chắc tại sao. Tôi đã nhận thấy rằng chỉ có giá trị thô là chính xác trong đầu ra thông minh, vì vậy nếu bạn chỉ nhìn vào giá trị 'đã nấu' thì có thể bạn không có bất kỳ lĩnh vực nào đang chờ xử lý.
Neil Mayhew


1
  1. Sao lưu dữ liệu của bạn
  2. Xóa thiết bị này khỏi nhóm LVM
  3. dd if=/dev/zero of=/dev/sdc bs=4k- điều này sẽ xóa tất cả dữ liệu trên/dev/sdc
  4. Bao gồm nó một lần nữa vào nhóm LVM
  5. Khôi phục lại bản sao lưu của bạn

3
0. Có một bản sao lưu. :-)
Steven D

Nhưng đây là một lỗi đọc đang chờ xử lý, vì vậy không nên chỉ đọc tất cả các lĩnh vực?
dkagedal

1
@dkagedal: Không, phần sụn của HD đã phát hiện ra rằng nó không thể đọc được một cung này. Nó không có cách nào để khôi phục nó (một mình, ngoài việc thử lại và thử lại và gặp may mắn vào một lúc nào đó ... hy vọng nó không bị hỏng dữ liệu sau đó được trả về) và do đó thiết lập lỗi SMART này. Nhưng nếu phần sụn phát hiện một ghi trên khu vực cụ thể đó, nó sẽ ánh xạ khu vực này đi (và không sử dụng nó nữa) và thay vào đó ánh xạ một khu vực dự phòng (làm việc) đến địa chỉ này.
maxschlepzig

@dkagedal: Đôi khi chỉ cần một hoặc hai lần đọc bổ sung sẽ đưa ngành trở lại. Những lần khác, không có gì sẽ mang nó trở lại. Ngoài ra, ổ đĩa quyết định nội bộ có nên ánh xạ lại khu vực đó hay sử dụng lại nó, dựa trên mức độ nghiêm trọng của lỗi ban đầu và liệu nó có thể đọc lại thành công sau khi ghi vào nó hay không. Cách duy nhất bạn có thể nói là bằng cách nhìn vào số lượng được phân bổ lại cho ổ đĩa. Tôi tin rằng các ổ đĩa sử dụng kiểm tra khá rộng rãi để đảm bảo rằng khi dữ liệu được đọc, nó không bị hỏng, vì vậy bạn có thể tự tin một cách hợp lý về một lĩnh vực không được phân bổ lại.
Neil Mayhew
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.