Ваш надежный
хостинг партнер
(495) 797-8-500

8-800-700 40 36

У Вас нет выбранных услуг.



Новости компании, технические статьи

Способы восстановления удаленных файлов в Ubuntu 26.10.2015

Способы восстановления удаленных файлов в Ubuntu

Сегодня мы поговорим о решении достаточно распространенной проблемы, с которой сегодня сталкиваются многие пользователи систем на базе Unix и других их разновидностей. Речь пойдет о способах восстановления удаленных данных в рамках системы Ubuntu.

Основная проблема возникает тогда, когда файлы домашних директорий, например, удаляются посредством консоли, что исключает возможность их восстановления стандартным способом, из корзины. Существуют различные утилиты, которые позволяют с той или иной степенью эффективности утрачивать удаленную таким образом информацию с Ubuntu. Об одной из таких программ типа «undelete», которая называется Foremost, и об особенностях работы с ней мы поговорим данной статье. Помимо этой программы существует еще одно действенное решение в виде мультиплатформенной утилиты командной строки Grep, которая изначально создавалась непосредственно для Ubuntu.

Процесс восстановления утерянных данных при помощи Foremost

Для установки утилиты вводим команду:

sudo apt-get install foremost

Для восстановления утраченных файлов вводим в консоль следующее:

foremost -i /dev/sda1 -o /path/to/recovery

Чтобы восстановить данные конкретного типа выполняем:

foremost -t jpg -i /dev/sda1 -o /path/to/recovery

Причем, желательно, чтобы каталог под восстановление находился на других носителях и был преимпортирован в систему, к примеру, на внешний жесткий дисковый накопитель. Это необходимо, чтобы исключить перезатирание восстановленными данными те файлы, которые еще не были восстановлены.

Приведем пример скрипта, позволяющего удалять дубликаты. Такой скрипт нужен, поскольку программка заточена под восстановление всей информации подряд. Что может повлечь за собой появление большого количества файловых дубликатов, идентичных оригиналу. Собственно, вот сам скрипт удаления файловых дубликатов:

#!/usr/bin/env python

import os, sys
from hashlib import md5

COLOR_RESET = "\033[0m"
COLOR_RED = "\033[1;31m"
COLOR_GREEN = "\033[1;32m"
def main(path):
  hashes = []
   filenames = []
for root, dirs, files in os.walk(path):
files_len = 0

for file in files:
   files_len += 1
   path_to_file = path + file
   f = open(path_to_file).read()
   fhash = md5(f).hexdigest()
   try:
      i = hashes.index(fhash)
      #if f == open(path + filenames[i]).read():
      # print COLOR_RED + path_to_file + ' --- remove!' + COLOR_RESET
      # os.remove(path_to_file)
      print COLOR_RED + path_to_file + ' --- remove!' + COLOR_RESET
      os.remove(path_to_file)
   except ValueError:
      print COLOR_GREEN + path_to_file + ' --- UNIQ!' + COLOR_RESET
      hashes.append(fhash)
      filenames.append(file)
   hashes_len = len(hashes) print "--------------------------------"
   print "Files: " + str(files_len)
   print "Deleted: " + str(files_len - hashes_len)
   print "Rest: " + str(hashes_len)

if __name__ == "__main__":
   main(sys.argv[1])

Данный скрипт позволяет получить хеш md5 содержимого данных, после чего перекладывает его в списки. Если в таких списках уже имеются подобные хеш-данные, то файл будет удален, если же повтора нет, скрипт проверяет следующие файлы.

Во избежание возможных коллизий можно раскомментировать блок в средней части скрипта, отвечающий за проверку файлов по их содержимому, если хеш такого файла нашелся в списке.

Собственно, пользуемся таким образом:

./remover.py /recovery/jpg/

Как обезопасить себя от повторения подобных ситуаций?

Во-первых, можно прописать в ~/.cshrc или ~/.bashrc специальный alias, который будет выдавать запрос на подтверждение перед удалением:

alias rm="rm -i"

Помимо прочего можно прибегнуть к помощи утилиты Trash-cli. Это более верный способ фонового перемещения файлов в корзину. Программка написана на Python и включает в себя несколько простых команд. Для каждого пользователя в системе Ubuntu предусмотрено наличие собственной корзины:

/home//.local/share/Trash/files /root/.local/share/Trash/files

Собственно здесь и хранятся удаленные данные, которые всегда можно извлечь и удалит навсегда при необходимости. Для установки Trash-cli вводим:

sudo apt-get install trash-cli

Теперь необходимо создать alias под удаление:

alias rm='trash'

Как и прежде, удаление будет осуществляться посредством rm. Чтобы посмотреть список перемещенных в корзину файлов, можно выполнить такую команду:

list-trash

Для очистки корзины используем следующее:

empty-trash

Восстанавливаем удаленные файлы в Ubuntu при помощи Grep

Это достаточно популярная программа командной строки, способная находить при вводе строки, которые отвечают заданным регулярным выражениям. Как ошибочно полагают многие пользователи Ubuntu, консольная утилита Grep способна искать исключительно по содержимому данных. Однако эта программка производит более глубокую поисковую операцию по всей дисковой поверхности, вне зависимости от наличия или отсутствия на ней данных. Таким образом, программку без проблем можно использовать для поиска и восстановления утерянных/удаленных данных.

Для восстановления удаленных файлов при помощи Grep прописываем в командной строке следующее:

$ grep --binary-files=text --context=x 'stringfromyourfile' \ /dev/whateverPartition > someFile.txt

Данная команда позволяет отыскать в /dev/whateverPartition, строки stringfromyourfile с последующим сохранением x-строк в файл текстового формата. При указании большого значения x , если все пойдет, как надо, вам удастся выхватить большой фрагмент удаленного файла либо целый файл. Флаг binary-files=text – главное звено в данном случае, позволяющее осуществлять поиск по данным бинарного типа, имеющихся на дисковом накопителе.

Между прочим, этот способ пригоден для извлечения определенных данных с чужих, старых, либо выброшенных дисковых накопителей. К примеру, это может быть удаленный Bitcoin-кошелек, который отыскивается по известным сигнатурам, предшествующей секретному key (для всех файлов типа wallet.dat они являются аналогичными).


Возврат к списку