О дисках
Физическая геометрия современных жестких дисков более недоступна для операционной системы.Ранние жесткие диски были достаточно простыми, чтобы можно было обращаться к ним в соответствии с их физической структурой - сектором головки цилиндров.Современные накопители намного сложнее и используют такие системы, как запись битов зоны , в которых не все дорожки имеют одинаковое количество секторов.Больше нецелесообразно обращаться к ним в соответствии с их физической геометрией.
со страницы руководства fdisk:
Если возможно, fdisk автоматически получит геометрию диска.Это не обязательно геометрия физического диска (на самом деле, современные диски не имеют ничего общего с физической геометрией, конечно, это не то, что можно описать в упрощенной форме цилиндров / головок / секторов)
Чтобы получитьвокруг этой проблемы современные диски решаются с помощью логической блочной адресации, о которой знает операционная система.LBA - это схема адресации, где весь диск представлен в виде линейного набора блоков, причем каждый блок представляет собой одинаковое количество байтов (обычно 512 или больше).
О файлах
Чтобы понять, где находится «файл» на диске (на уровне LBA), вам необходимо понять, что такое файл.Это будет зависеть от того, какую файловую систему вы используете.В файловых системах стиля Unix есть структура, называемая inode, которая описывает файл.Inode хранит все атрибуты файла и указывает на местоположение LBA фактических данных.
Пример Ubuntu
Вот пример поиска местоположения файла LBAdata.
Сначала получите номер индекса вашего файла
$ ls -i
659908 test.txt
Запустите отладчик файловой системы.«yourPartition» будет чем-то вроде sda1, это раздел, на котором находится ваша файловая система.
$sudo debugfs /dev/yourPartition
debugfs: stat <659908>
Inode: 659908 Type: regular Mode: 0644 Flags: 0x80000
Generation: 3039230668 Version: 0x00000000:00000001
...
...
Size of extra inode fields: 28
EXTENTS:
(0): 266301
Число в «EXTENTS», 266301, является логическим блоком в файловой системе, в которой находится ваш файл.находится на.Если ваш файл большой, в списке будет несколько блоков.Вероятно, есть более простой способ получить это число, но я не смог его найти.
Чтобы проверить, что у нас есть правильный блок, используйте dd, чтобы прочитать этот блок с диска.Чтобы узнать размер блока файловой системы, используйте dumpe2fs.
dumpe2fs -h /dev/yourPartition | grep "Block size"
Затем укажите размер блока в параметре ibs =, а логический блок экстента в параметре skip = и запустите dd следующим образом:
sudo dd if=/dev/yourPartition of=success.txt ibs=4096 count=1 skip=266301
success.txt теперь должен содержать исходное содержимое файла.