Sebagai sistem operasi multi-pengguna dan multi-tugas, setelah file di Linux dihapus, file tersebut akan sulit dipulihkan. Meskipun perintah delete hanya menandai node file untuk dihapus dan tidak benar-benar menghapus konten file, pengguna lain dan beberapa proses yang menulis ke disk akan dengan cepat menimpa data.
1. Pengenalan singkat tentang struktur sistem file Ext2
Dalam sistem file Ext2 yang digunakan oleh Linux, file disimpan dalam blok. Secara default, ukuran setiap blok adalah 1K, dan blok yang berbeda dibedakan berdasarkan nomor blok. Setiap file juga memiliki node, yang berisi pemilik file, izin membaca dan menulis, jenis file, dan informasi lainnya. Untuk file yang lebih kecil dari 12 blok, nomor blok dari blok data file disimpan langsung di node. Jika file lebih besar dari 12 blok, maka node menyimpan nomor blok dari blok tidak langsung setelah 12 nomor blok. Di blok yang sesuai dengan nomor blok tidak langsung ini, nomor blok dari 256 blok data file disimpan (setiap blok di Ext2fs). Angka tersebut menempati 4 byte, sehingga nomor blok yang dapat disimpan dalam satu blok adalah 1024/4=256). Jika ada file yang lebih besar, maka blok tidak langsung sekunder dan ** blok tidak langsung juga akan muncul di node.
2. Metode untuk memulihkan file yang terhapus secara tidak sengaja
Sebagian besar distribusi Linux menyediakan alat debugfs yang dapat digunakan untuk mengedit sistem file Ext2. Namun sebelum menggunakan alat ini, masih ada beberapa pekerjaan yang harus diselesaikan.
Pertama, pasang kembali partisi tempat file yang tidak sengaja terhapus berada dalam mode read-only. Gunakan perintah berikut: (dengan asumsi file ada di partisi /usr)
mount -r -n -o remount /usr -r menunjukkan pemasangan read-only; -n menunjukkan tidak menulis ke /etc/mtab. Jika Anda memulihkan file di /etc, tambahkan parameter ini. Jika sistem mengatakan bahwa partisi xxx sedang sibuk, Anda dapat menggunakan perintah fuser untuk memeriksa proses mana yang menggunakan file di partisi ini:
pelebur –v –m /usr
Jika tidak ada proses penting, hentikan dengan perintah berikut:
pelebur -k –v –m /usr
Sistem file ini kemudian dapat dipasang ulang.
Jika semua file diinstal dalam satu / partisi besar, Anda dapat menggunakan linux single untuk masuk ke mode pengguna tunggal saat boot prompt untuk meminimalkan kemungkinan proses sistem menulis data ke hard disk, atau sekadar menggantung hard disk di lokasi lain . pada mesin. Selain itu, jangan menulis data yang dipulihkan ke / di atas untuk menghindari kerusakan data yang berguna tersebut. Jika ada dos/windows pada mesin, Anda dapat menulis ke partisi ini:
mount –r –n /dev/hda1 /mnt/had
Kemudian Anda dapat menjalankan debugfs: (dengan asumsi Linux ada di/dev/hda5)
#debugfs /dev/hda5
Debugfs prompt debugfs akan muncul:
Gunakan perintah lsdel untuk membuat daftar informasi tentang banyak file yang dihapus:
debugfs:lsdel debugfs: 2692 inode yang dihapus ditemukan. Ukuran Blok Mode Pemilik Inode Waktu dihapus 164821 0 100600 8192 1/ 1 Minggu 13 Mei 19:22:46 2001 36137 0 100644 4 1/ 1 Sel 24 Apr 10:11:15 2001 196829 0 100644 149500 38/ 38 Sen 27 Mei 13:52:04 2001 |
Ada banyak file yang terdaftar (2692 ditemukan di sini). Bidang pertama adalah nomor simpul file, bidang kedua adalah pemilik file, bidang ketiga adalah izin baca dan tulis, diikuti dengan ukuran file, jumlah blok yang ditempati, dan. waktu penghapusan.
Kemudian kita bisa menentukan mana yang kita butuhkan berdasarkan ukuran file dan tanggal penghapusan. Misalnya kita ingin mengembalikan file dengan node 196829:
Anda dapat melihat status data file terlebih dahulu:
debugfs:stat <196829> Inode: 196829 Tipe: reguler Mode: 0644 Bendera: 0x0 Versi: 1 Pengguna: 0 Grup: 0 Ukuran: 149500 File ACL: 0 Direktori ACL: 0 Tautan: 0 Jumlah Blokir: 38 Fragmen: Alamat: 0 Nomor: 0 Ukuran: 0 waktu: 0x31a9a574 -- Sen 27 Mei 13:52:04 2001 atime: 0x31a21dd1 -- Sel 21 Mei 20:47:29 2001 mtime: 0x313bf4d7 -- Sel 5 Maret 08:01:27 2001 waktu: 0x31a9a574 -- Sen 27 Mei 13:52:04 2001 BLOK: 594810 594811 594814 594815 594816 594817 JUMLAH: 38 |
Kemudian Anda dapat menggunakan perintah dump untuk memulihkan file:
debugf: buang <196829> /mnt/hda/01.sav
Ini akan memulihkan file. Keluar dari debugf:
debugfs: keluar
Cara lain adalah dengan mengedit inode secara manual:
debugfs:mi <196829> Modus [0100644] ID Pengguna [0] ID Grup [0] Ukuran [149500] Waktu pembuatan [0x31a9a574] Waktu modifikasi [0x31a9a574] Waktu akses [0x31a21dd1] Waktu penghapusan [0x31a9a574] 0 Jumlah tautan [0] 1 Jumlah blok [38] Bendera file [0x0] Dipesan1[0] Berkas acl [0] Direktori acl [0] Alamat fragmen [0] Nomor fragmen [0] Ukuran fragmen [0] Blok Langsung #0 [594810] Blok Tiga Tidak Langsung [0] |
Setelah menggunakan perintah mi, satu baris informasi ditampilkan untuk diedit sekaligus. Untuk baris lainnya, Anda dapat langsung menekan Enter untuk mengonfirmasi, mengubah waktu penghapusan menjadi 0 (tidak dihapus), dan mengubah jumlah Tautan menjadi 1. Setelah melakukan perubahan, keluar dari debugfs:
debugfs: keluar
Kemudian periksa /dev/hda5 dengan fsck
fsck /dev/hda5
Program akan mengatakan bahwa ia menemukan blok data yang hilang dan memasukkannya ke dalam lost+found. File-file di direktori ini adalah yang kita inginkan.