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:
- Lĩnh vực này được đọc lại thành công
- 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:
- Tiếp tục cố gắng đọc lại khu vực cho đến khi bạn thành công
- 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 notrunc
tùy chọn dd
là 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 dd
trong 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.