TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #48 7.77K
Вот и август на носу, еще совсем чуть-чуть и снова новый год. Как говорится — дорогу осилит идущий. Так что не останавливаемся и продолжаем изучать новое.

Сегодня покажу вкусный трюк, как узнать физическое расположение файла на диске. Нет, не его путь, а именно в какой области жесткого диска этот файл находится. Поехали. 🏃‍♂️

Создаём подопытный файл:

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 вполне можно до него дотянутся и восстановить при желании.

Полезно? Полезно! Для чего это можно применить? Нууу не знаю, коллега к примеру таким образом восстанавливал базу данных, которую в пятницу вечером решили случайно удалить. А бэкапы съели мыши.🐁 Кстати успешно восстановил. Ну это уже лирика…

Очередную порцию полезных знаний я тебе выдал, ставь лайк, изучай. Увидимся! 😻

tags: #linux #bash
—
🟢 Подпишись: @bashdays
  • 👍 255
More from @bashdays
  1. Sep 25, 2026ИИ-агент может быть у каждого: создать персонального помощника можно без настройки серверо…
  2. Sep 25, 2026🚀 Zabbix 8.0 на подходе. Запланируйте обучение команды уже сейчас В ближайшее время ожида…
  3. Sep 24, 2026Post #1565
  4. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →