Jika Anda menggunakan sistem file ext3 coba ikuti Carlo Wood's HOWTO
Dalam beberapa kata,
- Gunakan ext3grep $ IMAGE --ls --inode 2 | grep your_file untuk menemukan file yang Anda cari (di mana $ IMAGE adalah partisi Anda misalnya / dev / sda2)
- Temukan blok sistem file yang berisi jurnal ruang yang tidak terisi.
- Temukan semua referensi jurnal blok referensi yang ditemukan sebelumnya.
- Salin blok dengan dd.
- Edit file untuk menghapus nol yang tertinggal.
- cat file dimanapun kamu inginkan
Dari sumber:
"Contoh bab Pemulihan manual
Dalam contoh berikut ini, kami akan memulihkan file kecil secara manual. Hanya sebagian output yang diberikan untuk menghemat ruang dan membuat contoh lebih mudah dibaca.
Menggunakan ext3grep $ IMAGE --ls --inode kami menemukan nama file yang ingin kami pulihkan:
$ ext3grep $ IMAGE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 Kamis 7 Februari 03:41:43 2008 drwxr-xr-x carlo
$ ext3grep $ IMAGE --ls --inode 195457 | grep 'bin $' | head -n 1 34 35 d 309540 D 1202352104 Kamis 7 Februari 03:41:44 2008 drwxr-xr-x bin
$ ext3grep $ IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 Kamis 7 Februari 03:24:53 2008 rrwxr-xr-x start_azureus
Jelas, inode 309631 terhapus dan kami tidak memiliki nomor blok untuk file ini:
$ ext3grep $ IMAGE --print --inode 309631 [...] Inode adalah Unallocated Grup: 19 Id Generasi: 2771183319 uid / gid: mode 1000/1000: rrwxr-xr-x ukuran: 0 jumlah tautan: 0 sektor: 0 (-> 0 blok tidak langsung).
Waktu Inode: Diakses: 1202350961 = Kamis 7 Februari 03:22:41 2008 File Dimodifikasi: 1202351093 = Kamis 7 Februari 03:24:53 2008 Inode Dimodifikasi: 1202351093 = Kamis 7 Februari 03:24:53 2008 Waktu penghapusan: 1202351093 = Kamis 7 Februari 03:24:53 2008
Blok Langsung:
Karenanya, kami akan mencoba mencari salinannya yang lebih lama di jurnal. Pertama, kami menemukan blok sistem file yang berisi inode ini:
$ ext3grep $ IMAGE --inode-to-block 309631 | grep berada Inode 309631 berada di blok 622598 pada offset 0xf00.
Kemudian kami menemukan semua penjelas referensi jurnal blok 622598:
$ ext3grep $ IMAGE --journal --block 622598 [...] Penjelas deskriptor jurnal referensi 622598: 4381294 26582 4381311 28693 4381313 28809 4381314 29308 4381321 29308 4381348 30986 4381349 30986 438308487487307 4382137 6672 4382138 7536 4382139 7984 4382140 8931
Ini berarti bahwa transaksi dengan nomor urut 4381294 memiliki salinan blok 622598 di blok 26582, dan seterusnya. Nomor urutan terbesar, di bagian bawah, harus menjadi data terakhir yang ditulis ke disk dan dengan demikian blok 8931 harus sama dengan blok saat ini 622598. Untuk menemukan salinan yang tidak terhapus yang terakhir, seseorang harus mulai dari bawah dan bekerja ke atas.
Jika Anda mencoba untuk mencetak blok seperti itu, ext3grep mengakui bahwa itu adalah blok dari tabel inode dan akan mencetak konten dari semua 32 inode di dalamnya. Kami hanya ingin melihat inode 309631; jadi kami menggunakan smart grep:
$ ext3grep $ IMAGE --print --block 8931 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- ID Generasi: 2771183319 uid / gid: mode 1000/1000: rrwxr-xr-x ukuran: 0 num tautan: 0 sektor: 0 (-> 0 blok tidak langsung).
Waktu Inode: Diakses: 1202350961 = Kamis 7 Februari 03:22:41 2008 File Dimodifikasi: 1202351093 = Kamis 7 Februari 03:24:53 2008 Inode Dimodifikasi: 1202351093 = Kamis 7 Februari 03:24:53 2008 Waktu penghapusan: 1202351093 = Kamis 7 Februari 03:24:53 2008
Blok Langsung:
Ini memang sama dengan yang kita lihat di blok 622598. Selanjutnya kita melihat nomor urut yang lebih kecil sampai kita menemukan satu dengan waktu penghapusan 0. Yang pertama kami temukan (dari bawah ke atas) adalah blok 6073:
$ ext3grep $ IMAGE --print --block 6073 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- ID Generasi: 2771183319 uid / gid: mode 1000/1000: rrwxr-xr-x ukuran: 40 num tautan: 1 sektor: 8 (-> 0 blok tidak langsung).
Waktu Inode: Diakses: 1202350961 = Kamis 7 Februari 03:22:41 2008 File Dimodifikasi: 1189688692 = Kamis 13 September 15:04:52 2007 Inode Dimodifikasi: 1189688692 = Kamis 13 September 15:04:52 2007 Waktu penghapusan: 0
Blok Langsung: 645627
Di atas adalah otomatis dan dapat dilakukan jauh lebih cepat dengan opsi baris perintah --show-journal-inodes. Opsi ini akan menemukan blok yang dimiliki oleh inode, kemudian menemukan semua salinan dari blok itu di jurnal, dan kemudian hanya mencetak inode yang diminta dari masing-masing blok ini (masing-masing berisi 32 inode, seperti yang Anda tahu), menghilangkan duplikat :
$ ext3grep $ IMAGE --show-journal-inodes 309631 Jumlah grup: 75 Minimum / maksimum blok jurnal: 1115/35026 Memuat deskriptor jurnal ... selesai Transaksi jurnal 4381435 dibungkus, beberapa blok data mungkin hilang dari transaksi ini. Jumlah deskriptor dalam jurnal: 30258; nomor urutan min / maks: 4379495/4382264 Salinan inode 309631 ditemukan dalam jurnal:
-------------- Inode 309631 ----------------------- ID Generasi: 2771183319 uid / gid: 1000/1000 mode: rrwxr-xr-x ukuran: 0 num tautan: 0 sektor: 0 (-> 0 blok tidak langsung).
Waktu Inode: Diakses: 1202350961 = Kamis 7 Februari 03:22:41 2008 File Dimodifikasi: 1202351093 = Kamis 7 Februari 03:24:53 2008 Inode Dimodifikasi: 1202351093 = Kamis 7 Februari 03:24:53 2008 Waktu penghapusan: 1202351093 = Kamis 7 Februari 03:24:53 2008
Blok Langsung:
-------------- Inode 309631 ----------------------- ID Generasi: 2771183319 uid / gid: 1000/1000 mode: rrwxr-xr-x ukuran: 40 num tautan: 1 sektor: 8 (-> 0 blok tidak langsung).
Waktu Inode: Diakses: 1202350961 = Kamis 7 Februari 03:22:41 2008 File Dimodifikasi: 1189688692 = Kamis 13 September 15:04:52 2007 Inode Dimodifikasi: 1189688692 = Kamis 13 September 15:04:52 2007 Waktu penghapusan: 0
Blok Langsung: 645627
File ini memang kecil: hanya satu blok. Kami menyalin blok ini dengan dd seperti yang ditunjukkan sebelumnya:
$ dd if = $ IMAGE bs = 4096 count = 1 skip = 645627 dari = block.645627 1 + 0 mencatat dalam 1 + 0 mencatat 4096 byte (4,1 kB) disalin, 0,0166104 detik, 247 kB / s
dan kemudian edit file untuk menghapus nol trailing, atau salin 40 byte pertama (ukuran file yang diberikan):
$ dd if = block.645627 bs = 1 count = 40 dari = start_azureus 40 + 0 catatan dalam 40 + 0 catatan dari 40 byte (40 B) disalin, 0,000105397 detik, 380 kB / s
$ cat start_azureus cd / usr / src / azureus / azureus ./azureus &
Dipulihkan! "