Вот и август на носу, еще совсем чуть-чуть и снова новый год. Как говорится — дорогу осилит идущий. Так что не останавливаемся и продолжаем изучать новое.
Сегодня покажу вкусный трюк, как узнать физическое расположение файла на диске. Нет, не его путь, а именно в какой области жесткого диска этот файл находится. Поехали. 🏃♂
Создаём подопытный файл:
printf '%s\n' {a..d} > /tmp/test.txt
либо так:
echo {a..d} > /tmp/test.txt
После создания файла, нужно запустить команду sync, но можно и не запускать, спустя несколько секунд linux сам всё нужное сделает. Я запускаю, потому что мне важна чистота эксперимента.
sync — утилита Unix, предназначенная для обновления файловых систем и для синхронизации данных на диске с данными в памяти. При этом выполняется системный вызов sync, который вызывает запись всех буферизованных изменений метаданных файлов и данных в базовые файловые системы. Он гарантирует, что все, что хранилось в памяти, будет записано на диск, предотвращая потерю данных, хранящихся в кеше, при аварийном завершении работы.
Так, файл успешно создан, давай посмотрим что внутри:
cat /tmp/test.txt
abcd
Ок. Теперь давай узнаем физическое расположение файла на диске, для этого запускай команду:
filefrag -b512 -v /tmp/test.txt
Программа filefrag (из пакета e2fsprogs) показывает насколько сильно фрагментирован файл.
После выполнения команды, смотрим результат. Нам важна колонка: physical_offset в моём случае я получил такие значения:
4612136..4612143
Отлично. Теперь я знаю точное расположение файла на жестком диске. А давай прочитаем его прям с диска! Для этого стартуем:
sudo dd if=/dev/sda1 skip=4612136 status=none count=8
Важно правильно указать свой диск /dev/sdX. Ну и в параметр skip подставить первое значение из колонки physical_offset.
По итогу запуска, я получаю ту же картину. Только без применения сторонних утилит вроде cat и т.п..
abcd
Ну и вишенка. Если я удалю файл rm /tmp/test.txt и затем выполню предыдущую команду:
sudo dd if=/dev/sda1 skip=4612136 status=none count=8
То получу тот же вывод «abcd», потому что файл на диске продолжает лежать и занимать место. Это визуально он исчез, чтобы тебе глаза не мозолить. Но зная его physical_offset вполне можно до него дотянутся и восстановить при желании.
Полезно? Полезно! Для чего это можно применить? Нууу не знаю, коллега к примеру таким образом восстанавливал базу данных, которую в пятницу вечером решили случайно удалить. А бэкапы съели мыши. Кстати успешно восстановил. Ну это уже лирика…
Очередную порцию полезных знаний я тебе выдал, ставь лайк, изучай. Увидимся!
Узнаем физическое расположение файла на диске в Linux
3 августа 20233 авг 2023
382
2 мин
1