Для начала, создаем подопытный файл. Можно сделать это двумя способами:
printf '%s\n' {a..d} > /tmp/test.txtили так:
echo {a..d} > /tmp/test.txtПосле создания файла, запускаем команду
sync. Хотя она не обязательна, так как Linux автоматически выполнит необходимые действия спустя несколько секунд. Но ради чистоты эксперимента я всегда запускаю sync.Команда
sync – это утилита Unix, которая обновляет файловые системы и синхронизирует данные на диске с данными в памяти. Это предотвращает потерю данных, хранящихся в кеше, при аварийном завершении работы.Теперь, когда файл успешно создан, давайте посмотрим, что он содержит:
cat /tmp/test.txt
Ожидаемый вывод:
abcdИтак, следующим шагом – узнать физическое расположение файла на диске. Для этого выполняем команду:
filefrag -b512 -v /tmp/test.txt
Эта программа покажет насколько сильно фрагментирован файл.
После выполнения команды, обращаем внимание на столбец
physical_offset. В моем случае, полученные значения:4612136..4612143
Теперь, давайте прочитаем содержимое файла прямо с диска:
sudo dd if=/dev/sda1 skip=4612136 status=none count=8
Важно указать правильное значение
/dev/sdX для вашего диска и заменить skip на первое значение из колонки physical_offset.После выполнения команды, ожидаемый вывод:
abcd.Таким образом, даже если мы удалим файл
rm /tmp/test.txt, мы сможем восстановить его, зная physical_offset.Этот трюк может быть полезен, например, для восстановления случайно удаленных данных, если мы знаем его физическое расположение на диске.
Надеюсь, этот пост был полезным! Если вам понравился, ставьте лайк. 😻