Очень старый файл .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
захвата общей области, а затем удалить ненужные элементы.
Я ничего не делал в этом каталоге с тех пор.
Если ваш каталог не является точкой монтирования... большинство файловых систем на самом деле не резервируют место "на каталог", поэтому... любая запись во всей файловой системе может перезаписать бит, который вы ищете. В ситуации восстановления данных вы обычно переключаете все в режим только для чтения.