Повернення з небуття відновлення файлів в linux

Неприємності трапляються частіше, ніж хотілося б. Однією з них є видалення файлу з важливими даними. Причому в Unix, вважається, що він відправляється в небуття. На жаль, дійсно, відновлення видалених файлів в Unix не настільки просте завдання, як в Windows з її звичної кошиком для віддалених файлів і численними утилітами від сторонніх постачальників (наприклад, Norton Utilities). Це пов'язано з особливостями архітектури файлових систем
Unix. ОС Linux більш широко трактує поняття файлу. Під файлом розуміється будь-який об'єкт, що має ім'я в файлової системі. Одним з таких об'єктів є каталог. У каталозі зберігається як ім'я файлу, так і додаткова інформація про фото - його розмір, інформація про власника файлу, місце розташування на диску, дата створення, дата останньої модифікації, права доступу і багато іншого. Причому для ефективності, додаткову інформацію виносять в спеціальну структуру, а в каталозі залишають тільки посилання на цю структуру. При видаленні файлу ця додаткова інформація фізично не видаляється з диска, а лише відзначаються як вільні відповідні блоки. Тому існує потенційна можливість відновлення, віддаленого файлу, поки на місце його розташування нічого не записувалося. Я спробую запропонувати алгоритм дій при виникненні такої неприємності.

Припинення подальшої роботи.

Відразу після того, як ви усвідомили, що сталося щось жахливе, припиніть подальшу роботу на розділі диска з віддаленим файлом. Природно припинити роботу повинні не тільки ви, але і всі інші користувачі, що увійшли в систему. Зробіть заходи, щоб більше ніхто не міг зайти в систему, поки ви будете займатися відновленням файлу (наприклад, за допомогою / etc / nologin). Головне - не допустити перезапис раніше використовуваних віддаленим файлом дискових блоків іншими процесами. Така ймовірність істотно зростає, якщо розділ майже заповнений.

Сам собі некрофил.

Розглянемо два варіанти відновлення. Один досить універсальний, застосуємо, швидше за все, в будь-якій системі Unix. Другий - заточений під роботу з файловою системою Ext2
Linux.

Відновлення файлів з відомим вмістом

Будемо вважати, що вилучений файл з кореневого розділу / etc / passwd і у вас немає проблем з вільним простором на жорсткому диску.

* Створюємо копію кореневого розділу і поміщаємо її в файл з розділу / export. Цей розділ повинен мати достатньо вільного місця, щоб вмістити в себе цілком розділ, на якому був видалений файл

# Df -k // export
File system Kbytes used avail capacity Mounted on
/ Dev / dsk / c0t3d0s0 122070 19512 102558 16% /
/ Dev / dsk / c1t0d0s0 17592638 14425963 3166675 82% / export
# Dd if = / dev / dsk / c0t3d0s0 of = / export / recover.dsk
263077 + 0 records in
263077 + 0 records out
# Ls -l
-rw-r-r- 1 root other 134701056 Jul 1 16:54 recover.dsk

* Запускаємо команду cat з ключем -n (висновок номерів рядків), висновок якої перенаправляємо утиліті fgrep, яка, здійснивши пошук за заданим шаблоном, відсіче все зайве

рядки можуть бути і не знайдені як в разі помилки при завданні шаблону, так і при втрати вмісту віддаленого файлу, який міг бути переписаний. У нашому випадку, як бачимо, збереглося дві версії файлу.

* Виведемо кілька рядків після знайденої
# Fgrep -A10 «root: x: 0: 1» recover.dsk> passwd
# Cat passwd
root: x: 0: 1: Super-User: /: / sbin / sh
daemon: x: 1: 1 :: /:
bin: x: 2: 2 :: / usr / bin:
...

Відновлення файлів в Linux Ext2

Цей метод застосовується в разі видалення командою rm або функцією unlink і не вимагає при відновленні знання вмісту віддаленого файлу. Для роботи нам буде потрібно відладчик файлової системи debugfs досить потужна утиліта, що застосовується зазвичай для перевірки і зміни файлової системи і надає безпосередній доступ до файлової системи. Нам потрібні три її команди:

Запускаємо debugfs в необхідному розділі:

Краще відразу перенаправити висновок в файл, ввівши команду:

#echo lsdel | debugfs / dev / hda6> / tmp / lsdel-output

Якщо з моменту вилучення не було операцій з розділом, то цікавлять нас дані будуть в кінці списку. Подивимося вміст, відповідне останньому дескриптору, набравши команду:

debugfs: cat <327101>
my_very_important_data

Віддалений файл знайдений, він містив єдиний рядок. Команда dump відновлює файл, записуючи його на диск під ім'ям
my_recovered_file:

debugfs: dump -p <327101> / Tmp / my_recovered_file

ключ -p вказує на те, що у файлу повинні залишитися незмінними власник, група і права доступу.

Відновлення групи файлів в Linux Ext2

Для відновлення групи файлів, доцільно скористатися утилітою Тома Пайка
recover. Установка стандартна:

# Tar zxf recover-1.3.tar.gz
# Cd recover-1.3
# make
# Make install

А що ж ми відновили?

Запускаємо утиліту file:

Можна кілька автоматизувати процес, використовуючи найпростіші сценарії щось схоже на це, додає розширення до текстових файлів програм на мові С:

# For i in? File * | grep. ASCII C program text? | \ Awk -F. ??;
do mv $ i $ i.c; done

Після визначення типу файлів спробуємо ідентифікувати кожен файл. Для тих, що містять текст, код на С, звук або зображення можна відкрити відповідними програмами і спробувати вгадати первинне ім'я. Двійкові файли, наприклад виконувані файли, бібліотеки або файли баз даних, ідентифікувати набагато важче. І якщо виконувані файли або бібліотеки простіше не ідентифікувати, а просто перевстановити відсутні, то з базами даних доведеться повозитися. В цьому випадку доведеться застосувати утиліту strings, вивівши на екран всі текстові рядки ASCII, що містяться в файлі.

За висновком можна здогадатися, що даний файл є базою даних і відкрити його відповідною програмою.

Пам'ятайте, ніщо не замінює регулярного резервування. А застосування методів, розглянутих в статті, має бути скоріше винятком, ніж правилом. Повірте, адже трохи задоволення від спуску в безодню небуття.

Покажи цю статтю друзям:

Схожі статті