fsck: Tùy chọn để kiểm tra đĩa kỹ lưỡng nhất


12

Tôi đã có một đĩa với một vấn đề đã biết (tôi biết vì dd bịt miệng khi tôi cố gắng sao chép nó). Nhưng khi tôi khởi động với một đĩa CD trực tiếp và chạy fsck trên phân vùng chưa được đếm, tôi nhận được điều này:

ubuntu@ubuntu:~$ sudo fsck /dev/sdf1
fsck 1.41.4 (27-Jan-2009)
e2fsck 1.41.4 (27-Jan-2009)
/dev/sdf1: clean, 227091/9625600 files, 12789815/38497756 blocks

một phần nghìn giây sau. Thật khó tin khi nó kiểm tra toàn bộ ổ cứng trong một ms.

Tôi cũng không chắc chắn liệu tôi nên là fsck'ing sdf1 hay toàn bộ đĩa sdf vật lý. Khi tôi thử toàn bộ ổ đĩa:

ubuntu@ubuntu:~$ sudo fsck /dev/sdf
fsck 1.41.4 (27-Jan-2009)
e2fsck 1.41.4 (27-Jan-2009)
fsck.ext2: Device or resource busy while trying to open /dev/sdf
Filesystem mounted or opened exclusively by another program?

Điều mà tôi không hiểu vì không có phân vùng nào được gắn kết (Tôi chỉ khởi động từ đĩa CD trực tiếp và chạy lệnh).

Vì vậy, câu hỏi cơ bản của tôi là: Làm thế nào tôi có thể khiến fsck (hoặc một công cụ khác có thể hoạt động tốt hơn) để chi tiêu nhiều hơn một phần nghìn giây để phân tích đĩa vấn đề của tôi?

Câu trả lời:


14

Trước hết, bạn đúng về việc chạy fsck trên phân vùng - fsck chỉ hoạt động trên các hệ thống tệp chứ không phải toàn bộ đĩa. Bạn có thể lấy danh sách tất cả các phân vùng trên đĩa fdisk -l /dev/sdd.

Kiểu hệ thống tập tin của bạn có lẽ là ext3 (mặc định trong hầu hết các bản phân phối Linux), điều đó có nghĩa là nó thường sẽ vượt qua một fsck miễn là tạp chí của nó sạch. fsck -fsẽ, như đã đề cập ở trên, buộc kiểm tra đầy đủ.

Tuy nhiên, nếu bạn đã đọc lỗi trên đĩa, không có lượng fsck nào giúp được dd - vì dd thực sự không quan tâm đến nội dung của đĩa.

Để có được dd đọc đĩa và tiếp tục đọc lỗi, hãy sử dụng dd conv=noerror,sync, nó sẽ tiếp tục đọc lỗi và nối các byte rỗng vào bất kỳ khối nào khi có lỗi đọc.

Sau khi hoàn thành việc sao lưu, bạn nên chạy fsck -ftrên bản sao để lấy lại và chạy lại.

Một mẹo khác: Nếu bạn sao lưu phân vùng vào một tệp, bạn có thể loopback gắn kết nó với mount -o loop filename.ext3 /mountpoint. Ngoài ra, giả sử bạn đang sao chép phân vùng 200G sang ổ 500G, sau đó bạn có thể chạy resize2fs /dev/sdx1(trong đó sdx là ổ đĩa mới của bạn, được phân vùng với một phân vùng 500G) và hệ thống tệp sẽ được thay đổi kích thước thành 500G.

Cuối cùng, nếu đĩa có hình dạng như vậy khiến bạn đọc lỗi, tôi khuyên bạn nên tránh tắt và bật đĩa cho đến khi bạn khôi phục xong dữ liệu. Trong một số chế độ thất bại, một lúc nào đó, đĩa sẽ không còn quay hoặc không được hệ điều hành nhận ra, và tại thời điểm đó, việc lấy dữ liệu ra khỏi ổ đĩa trở nên khá tốn kém.


Tôi đã thử "dd conv = noerror, sync", nhưng đĩa nhân bản kết quả là không thể khởi động. Điều này thật khó chịu, vì đĩa khởi động chạy tốt, fscks tốt, nhưng tôi không thể sao chép nó vào đĩa khác vì đĩa có 1 khối xấu (nơi rõ ràng không có dữ liệu). Tôi dường như bị mắc kẹt ...
Fred Hamilton

Đừng quên rằng có thể có những lý do khác khiến đĩa không thể khởi động được (các vấn đề hình học đĩa và MBR / bộ tải khởi động khác nhau). Nếu trước tiên bạn có thể xác nhận rằng hệ thống tệp trên đĩa mới là OK, thì bạn có thể khởi động vào hệ thống bằng chế độ cứu hộ từ đĩa CD cài đặt, cập nhật bộ tải khởi động GRUB, v.v. đầu tiên chạy fsck -f / dev / sdx1, sau đó thử gắn hệ thống tập tin bằng mount / dev / sdx1 / mnt - thay thế x bằng ký tự ổ đĩa thích hợp.
Kristian

Đề xuất tuyệt vời, nhưng khi tôi chạy fsck -f trên phân vùng nhân bản, tôi đã nhận được hàng trăm lỗi (các khối bất hợp pháp trong các nút, các bit comression được đặt trên một hệ thống tệp mà không hỗ trợ nén, các khối thuộc tính mở rộng xấu, v.v.) trước khi tôi thừa nhận rằng dd bản sao hoàn toàn bị hosed ... Không biết phải làm gì tiếp theo ... Tôi cho rằng tôi sẽ cố gắng sao chép tất cả các tệp vào một phân vùng sạch ... Dù sao cũng cảm ơn.
Fred Hamilton

4
Tốt hơn là sử dụng ddresTHER (hoặc dd_resTHER + dd_rhelp) so với dd; thông minh hơn về việc xử lý lỗi, thử lại các lĩnh vực có lỗi. gnu.org/software/ddresTHER/ddresTHER.html kalysto.org/utilities/dd_rhelp/index.en.html garloff.de/kurt/linux/ddresTHER
freiheit

1
Kiểm tra đĩa kỹ lưỡng nhất (với tất cả các bản sửa lỗi tự động nếu có thể) cho phân vùng root ext2, ext3 hoặc ext4 được thực hiện như sau: (1) khởi động từ phương tiện cứu hộ (phân vùng gốc phải được ngắt), (2) chạy e2fsck -f -cc -D -p. Điều đó không bắt buộc kiểm tra với kiểm tra đọc-ghi không phá hủy đối với phương tiện truyền thông và sửa chữa tất cả các vấn đề tìm thấy có thể được khắc phục một cách an toàn. Có thể mất vài ngày cho ổ cứng 2TB ...
Mikko Rantalainen

10

Điều này có thể không liên quan trong trường hợp của bạn, nhưng nghĩ rằng dù sao tôi cũng sẽ đề cập đến nó:

Để kiểm tra đĩa cấp thấp hơn, bạn có thể sử dụng badblockstiện ích. Nó đi qua một thiết bị và báo cáo bất kỳ khối xấu nào (dĩ nhiên nó không thể sửa chữa bất cứ thứ gì). Ít nhất, nó hữu ích cho việc xác minh xem đĩa có bị hỏng vật lý hay không.

Ngoài ra, e2fsckcó thể sử dụng badblocksđể tránh các khối xấu được sử dụng bởi một hệ thống tập tin. Từ e2fsckhướng dẫn:

  -c     This option causes e2fsck to use badblocks(8) program to do a  read-
         only scan of the device in order to find any bad blocks.  If any bad
         blocks are found, they are added to the bad block inode  to  prevent
         them from being allocated to a file or directory.  If this option is
         specified twice, then the bad block scan will be done using  a  non-
         destructive read-write test.

Cũng lưu ý fsck_hfs -ssẽ quét các khối xấu.
awiebe

5

Bạn muốn tùy chọn -f thành fsck (Buộc kiểm tra ngay cả khi hệ thống tệp có vẻ sạch.)

Bạn nên chạy fsck trong chế độ người dùng. Một cách dễ dàng để làm điều này mà không cần khởi động cdrom trực tiếp là khởi động lại với tùy chọn -F.

shutdown -rF now 

Cảm ơn, nhưng một câu hỏi: Nếu tôi khởi động lại với tùy chọn -F bằng đĩa CD trực tiếp, làm thế nào để đĩa CD trực tiếp biết nó được cho là chạy kiểm tra? Đó là một đĩa CD, nó không có bộ nhớ mà tôi biết ...
Fred Hamilton

Tôi không nghĩ rằng bạn cần phải làm điều đó từ cd trực tiếp. Chỉ cần khởi động từ đĩa cd trực tiếp và chạy fsck trên phân vùng chưa từng có với tùy chọn -f (force) đi kèm. HOẶC, bạn có thể khởi động lại từ đĩa cứng của mình bằng tắt máy -rF. Điều này sẽ buộc một fsck trước khi hệ thống tập tin được gắn kết.
Richard Hoskins

Trên thực tế, nó sẽ thực hiện fsck trong chế độ người dùng. Tôi đã chỉnh sửa câu trả lời của mình.
Richard Hoskins

1
Các -Flá cờ cho shutdownthường không được chính thức ghi nhận (xem man shutdownshutdown --helpvà nhận thấy nó không có ở đó), do đó bạn không thể tin tưởng nó để làm việc. Đôi khi đó là một no-op. Chính thức phương pháp duy nhất để quét phân vùng gốc là khởi động từ phương tiện thay thế.
Mikko Rantalainen
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.