fsck: Opsi untuk pemeriksaan disk paling menyeluruh

12

Saya punya disk dengan masalah yang diketahui (saya tahu karena gag dd ketika saya mencoba untuk mengkloningnya). Tetapi ketika saya boot dengan live CD dan menjalankan fsck pada partisi yang dilepas, saya mendapatkan ini:

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

satu milidetik kemudian. Sulit untuk percaya itu memeriksa seluruh hard drive dalam ms.

Saya juga tidak yakin apakah saya harus fsck'ing sdf1 atau seluruh disk fisik sdf. Ketika saya mencoba seluruh drive:

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?

Yang saya tidak mengerti karena tidak ada partisi yang muncul untuk di-mount (saya baru saja boot dari CD langsung dan menjalankan perintah).

Jadi pertanyaan dasar saya adalah: Bagaimana saya bisa mendapatkan fsck (atau alat lain yang mungkin bekerja lebih baik) menghabiskan lebih dari satu milidetik menganalisis disk masalah saya?

Fred Hamilton
sumber

Jawaban:

14

Pertama, Anda benar tentang menjalankan fsck pada partisi - fsck hanya bekerja pada sistem file, bukan seluruh disk. Anda bisa mendapatkan daftar semua partisi pada disk dengan fdisk -l /dev/sdd.

Jenis sistem file Anda mungkin adalah ext3 (default di sebagian besar distro Linux), yang berarti biasanya akan melewatkan fsck selama jurnalnya bersih. fsck -fakan, seperti disebutkan di atas, memaksakan pemeriksaan penuh.

Namun, jika Anda telah membaca kesalahan pada disk, tidak ada jumlah fsck yang akan membantu dd - karena dd benar-benar tidak peduli dengan isi disk.

Untuk mendapatkan dd membaca disk dan melanjutkan pada kesalahan baca, gunakan dd conv=noerror,sync, yang akan melanjutkan pada kesalahan baca dan tambahkan byte nol ke blok mana pun ketika ada kesalahan baca.

Setelah Anda selesai membuat cadangan, Anda harus menjalankan fsck -fklon untuk menjalankannya kembali.

Kiat lain: Jika Anda mencadangkan partisi ke file, Anda dapat mengulanginya dengan mountback mount -o loop filename.ext3 /mountpoint. Juga, katakanlah Anda mengkloning partisi 200G ke drive 500G, Anda kemudian dapat menjalankan resize2fs /dev/sdx1(di mana sdx adalah drive baru Anda, dipartisi dengan partisi 500G tunggal), dan sistem file akan diubah ukurannya menjadi 500G.

Terakhir, jika disk dalam kondisi seperti itu membuat Anda membaca kesalahan, saya akan menyarankan Anda untuk tidak mematikan dan menghidupkan disk sampai Anda selesai memulihkan data. Dalam beberapa mode kegagalan, disk pada titik tertentu tidak lagi berputar atau gagal dikenali oleh OS, dan pada saat itu mengeluarkan data dari drive menjadi cukup mahal.

Kristian
sumber
Saya memang mencoba "dd conv = noerror, sync", tetapi disk hasil kloning tidak dapat di-boot. Yang membuat frustrasi, karena disk boot berjalan dengan baik, fscks baik, tapi saya tidak bisa mengkloning ke disk lain karena disk memiliki 1 blok buruk (di mana ternyata tidak ada data). Saya tampaknya akan terjebak ...
Fred Hamilton
Jangan lupa bahwa mungkin ada alasan lain mengapa disk tidak bisa di-boot (geometri disk yang berbeda dan masalah MBR / boot loader). Jika Anda pertama kali dapat mengkonfirmasi bahwa sistem file pada disk baru itu OK, maka Anda dapat mem-boot ke sistem menggunakan mode penyelamatan dari CD instalasi, memperbarui bootloader GRUB dll. Yaitu. pertama jalankan fsck -f / dev / sdx1, kemudian coba me-mount sistem file dengan mount / dev / sdx1 / mnt - ganti x dengan huruf drive yang sesuai.
Kristian
Saran yang sangat baik, tetapi ketika saya menjalankan fsck -f pada partisi yang dikloning, saya mendapatkan ratusan kesalahan (blok ilegal di inode, bit kompresi yang dipasang pada sistem file tanpa dukungan kompresi, blok atribut extended yang buruk, dll.) Sebelum saya mengakui bahwa dd clone benar-benar disembunyikan ... Tidak yakin apa yang harus dilakukan selanjutnya ... Saya kira saya akan mencoba untuk hanya menyalin semua file ke partisi bersih ... Terima kasih.
Fred Hamilton
4
Lebih baik menggunakan ddrescue (atau dd_rescue + dd_rhelp) daripada dd; itu lebih pintar tentang penanganan kesalahan, mencoba kembali sektor yang mendapat kesalahan. gnu.org/software/ddrescue/ddrescue.html kalysto.org/utilities/dd_rhelp/index.en.html garloff.de/kurt/linux/ddrescue
freiheit
1
Pemeriksaan disk paling menyeluruh (dengan semua perbaikan otomatis jika memungkinkan) untuk partisi root ext2, ext3 atau ext4 dijalankan sebagai berikut: (1) boot dari media cadangan (partisi root harus dilepas), (2) dijalankan e2fsck -f -cc -D -p. Itu melakukan pengecekan paksa dengan cek baca-tulis yang tidak merusak untuk media dan memperbaiki semua masalah yang ditemukan yang dapat diperbaiki dengan aman. Mungkin butuh beberapa hari untuk HDD 2TB ...
Mikko Rantalainen
10

Ini mungkin tidak relevan dalam kasus Anda, tetapi tetap berpikir saya akan menyebutkannya:

Untuk pemeriksaan disk tingkat rendah, Anda dapat menggunakan badblocksutilitas. Ini berjalan melalui perangkat dan melaporkan setiap blok buruk (tentu saja tidak dapat memperbaiki apa pun). Paling tidak berguna untuk memverifikasi apakah disk rusak secara fisik.

Juga, e2fsckdapat digunakan badblocksuntuk menghindari blok buruk yang digunakan oleh sistem file. Dari e2fsckmanual:

  -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.
Jonik
sumber
Catatan juga fsck_hfs -sakan memindai blok buruk.
awiebe
5

Anda ingin opsi -f untuk fsck (Memeriksa paksa bahkan jika sistem file tampak bersih.)

Anda harus menjalankan fsck dalam mode pengguna tunggal. Salah satu cara mudah untuk melakukan ini tanpa live cdrom boot adalah dengan reboot dengan opsi -F.

shutdown -rF now 
Richard Hoskins
sumber
Terima kasih, tetapi satu pertanyaan: Jika saya reboot dengan opsi -F menggunakan live CD, bagaimana live CD tahu itu seharusnya menjalankan pemeriksaan? Ini CD, tidak memiliki memori yang aku sadar ...
Fred Hamilton
Saya tidak berpikir Anda perlu melakukan itu dari live cd. Cukup boot dari live cd dan jalankan fsck pada partisi yang tidak di-mount dengan opsi -f (force). ATAU, Anda dapat reboot dari hard disk Anda dengan shutdown -rF. Ini akan memaksa fsck sebelum sistem file di-mount.
Richard Hoskins
Sebenarnya, ia akan melakukan fsck dalam mode pengguna tunggal. Saya sudah mengedit jawaban saya.
Richard Hoskins
1
The -Fbendera untuk shutdowntidak biasanya resmi didokumentasikan (lihat man shutdowndan shutdown --helpdan perhatikan itu tidak ada) sehingga Anda tidak dapat percaya untuk bekerja. Terkadang ini adalah no-op. Secara resmi satu-satunya metode untuk memindai partisi root adalah mem-boot dari media alternatif.
Mikko Rantalainen