Якщо ви використовуєте файлову систему ext3, спробуйте слідувати HOWTO Carlo Wood
Кілька слів,
- Використовуйте ext3grep $ IMAGE --ls --inode 2 | grep your_file, щоб знайти файл, який ви шукаєте (де $ IMAGE - розділ ури, наприклад / dev / sda2)
- Знайдіть блок файлової системи, який містить журнал нерозподіленого простору.
- Знайдіть усі дескриптори журналів, що посилаються на блок, який був знайдений раніше.
- Скопіюйте блок із dd.
- Відредагуйте файл, щоб видалити кінцеві нулі.
- кот файл, де ви хочете
З джерела:
Msgstr "Приклад відновлення вручну
У наступному прикладі ми вручну відновимо невеликий файл. Дається лише частковий вихід, щоб заощадити місце та зробити приклад більш читабельним.
За допомогою ext3grep $ IMAGE --ls --inode ми знаходимо ім'я файлу, який ми хочемо відновити:
$ ext3grep $ IMAGE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 Чет 7 лютого 03:41:43 2008 drwxr-xr-x carlo
$ ext3grep $ IMAGE --ls --inode 195457 | grep 'бін $' | головка -n 1 34 35 d 309540 D 1202352104 Чт 7 лютого 03:41:44 2008 drwxr-xr-x bin
$ ext3grep $ IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 Чт 7 лютого 03:24:53 2008 rrwxr-xr-x start_azureus
Очевидно, що inode 309631 стирається, і у нас немає номерів блоків для цього файлу:
$ ext3grep $ IMAGE --print --inode 309631 [...] Inode нерозподілена Група: 19 Покоління Id: 2771183319 uid / gid: 1000/1000 режим: rrwxr-xr-x розмір: 0 кількість посилань: 0 сектори: 0 (-> 0 непрямих блоків).
Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22:41 2008 Файл змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Inode Змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Час видалення: 1202351093 = Чт 7 лютого 03:24:53 2008
Прямі блоки:
Тому ми спробуємо шукати старішу його копію в журналі. Спочатку ми знаходимо блок файлової системи, який містить цей inode:
$ ext3grep $ IMAGE --введення до блоку 309631 | grep проживає Inode 309631 знаходиться в блоці 622598 при зміщенні 0xf00.
Тоді ми знаходимо всі дескриптори журналу, що посилаються на блок 622598:
$ Ext3grep $ IMAGE --journal --block 622598 [...] дескриптори журнальні посилаються блок 622598: 4381294 +26582 4381311 +28693 4381313 +28809 4381314 +28814 4381321 +29308 4381348 +30676 4381349 +30986 4381350 +31299 4381374 +32718 4381707 1465 4381709 2132 4381755 2945 4381961 4606 4382098 6073 4382137 6672 4382138 7536 4382139 7984 4382140 8931
Це означає, що транзакція з порядковим номером 4381294 має копію блоку 622598 в блоці 26582 тощо. Найбільший порядковий номер внизу має бути останніми записаними на диск даними, і таким чином блок 8931 повинен бути таким же, як і поточний блок 622598. Для того, щоб знайти останню не видалену копію, слід починати знизу і працювати вгору
Якщо ви спробуєте надрукувати такий блок, ext3grep розпізнає, що це блок із таблиці inode, і надрукує вміст усіх 32-х вузлів у ньому. Ми хотіли б побачити тільки 309631; тому ми використовуємо смарт-греп:
$ ext3grep $ IMAGE --принт --блок 8931 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- Покоління Id: 2771183319 uid / gid: режим 1000/1000: rrwxr-xr-x розмір: 0 кількість посилань: 0 секторів: 0 (-> 0 непрямих блоків).
Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22:41 2008 Файл змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Inode Змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Час видалення: 1202351093 = Чт 7 лютого 03:24:53 2008
Прямі блоки:
Це дійсно те саме, що ми бачили в блоці 622598. Далі ми розглянемо менші порядкові номери, поки не знайдемо одне із часом видалення 0. Перший, який ми знаходимо (знизу вгору) - це блок 6073:
$ ext3grep $ IMAGE --принт --блок 6073 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- Покоління Id: 2771183319 uid / gid: режим 1000/1000: rrwxr-xr-x розмір: 40 кількість посилань: 1 сектори: 8 (-> 0 непрямих блоків).
Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22:41 2008 Файл змінено: 1189688692 = Чт 13 вересня 15:04:52 2007 Inode Змінено: 1189688692 = Чт 13 вересня 15:04:52 2007 Час видалення: 0
Прямі блоки: 645627
Вищезазначене автоматизовано і це можна зробити набагато швидше за допомогою параметра командного рядка - show-journal-inodes. Цей параметр знайде блок, якому належить inode, потім знайде всі копії цього блоку в журналі та згодом надрукує лише запитуваний inode з кожного з цих блоків (кожен з яких містить 32, як відомо вам), усуваючи дублікати :
$ ext3grep $ IMAGE - show-journal-inodes 309631 Кількість груп: 75 Мінімальний / максимальний блок журналу: 1115/35026 Завантаження дескрипторів журналу ... зроблено трансакцію журналу 4381435 завершується, деякі блоки даних можуть бути втрачені від цієї транзакції. Кількість дескрипторів у журналі: 30258; min / max порядкові номери: 4379495/4382264 Копії inode 309631, знайдені в журналі:
-------------- Inode 309631 ----------------------- Покоління Id: 2771183319 uid / gid: 1000/1000 режим: rrwxr-xr-x розмір: 0 кількість посилань: 0 секторів: 0 (-> 0 непрямих блоків).
Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22:41 2008 Файл змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Inode Змінено: 1202351093 = Чт 7 лютого 03:24:53 2008 Час видалення: 1202351093 = Чт 7 лютого 03:24:53 2008
Прямі блоки:
-------------- Inode 309631 ----------------------- Покоління Id: 2771183319 uid / gid: 1000/1000 режим: rrwxr-xr-x розмір: 40 кількість посилань: 1 сектори: 8 (-> 0 непрямих блоків).
Час Inode: Доступ: 1202350961 = Чт 7 лютого 03:22:41 2008 Файл змінено: 1189688692 = Чт 13 вересня 15:04:52 2007 Inode Змінено: 1189688692 = Чт 13 вересня 15:04:52 2007 Час видалення: 0
Прямі блоки: 645627
Файл справді невеликий: лише один блок. Ми копіюємо цей блок з dd, як показано раніше:
$ dd, якщо = $ IMAGE bs = 4096 count = 1 пропуск = 645627 з = block.645627 1 + 0 записів у 1 + 0 записів із 4096 байтів (4,1 кБ) скопійовано, 0,0166104 секунд, 247 кБ / с
а потім відредагуйте файл, щоб видалити кінцеві нулі або скопіюйте перші 40 байт (заданий розмір файлу):
$ dd, якщо = блок.645627 bs = 1 кол = 40 з = start_azureus 40 + 0 записів за 40 + 0 записів, скопійовано 40 байт (40 B), 0.000105397 секунд, 380 кБ / с
$ cat start_azureus cd / usr / src / azureus / azureus ./azureus &
Одужав! "