Прочитайте конец файла, чтобы восстановить данные

Прочитайте конец файла, чтобы восстановить данные

Очень старый файл .swp вернул файл, который я редактировал, так что теперь он стал значительно короче. С тех пор я ничего не делал в этом каталоге, поэтому байты, следующие сразу за концом файла, должны по-прежнему содержать мои данные. Какую функцию можно использовать для чтения N байтов из заданного адреса памяти? ddи readостановки на границах файла, если только я где-то не пропустил опцию.

Текущий размер файла составляет 3,2 КБ. Я не помню точно, насколько большим был файл до того, как его обрезали, но, вероятно, не больше 10 КБ. Как я могу прочитать 10 КБ с начала файла, игнорируя границы файла? Это нормально, если данные не полностью сохранились, пока мне не придется начинать с нуля.

решение1

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

Вы можете получить физическое местоположение файла с помощью filefragили hdparm --fibmap, а затем использовать ddдля прямого чтения этого физического местоположения. Я описал этот процесс в другом контексте здесь:https://unix.stackexchange.com/a/85880/30851


В вашем случае, скорее всего, вам нужен общий подход к поиску текстовых данных... что-то вроде:

strings -n 12 -t d /dev/partition | grep -F 'text snippet'

stringsбудет искать последовательные данные ASCII (также поддерживает некоторые другие кодировки, не уверен насчет UTF-8. Если это код или английский язык, он вам не понадобится), а также выведет смещение, где они были найдены.

text snippetдолжен быть точным, уникальным текстовым образцом, который, как вы помните, находился в той части файла, которую вы ищете [в одной строке]. (Если вы не знаете его точно, вы можете использовать grep с регулярными выражениями.)

-n 12минимальная длина, которая stringsбудет искаться. 12должна быть длиной вашего text snippet. Этот параметр необязателен, если указан, он может помочь strings | grepнемного ускорить работу.

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

Я ничего не делал в этом каталоге с тех пор.

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

Связанный контент