О дисках
Физическая геометрия современных жестких дисков больше недоступна операционной системе напрямую. Ранние жесткие диски были достаточно простыми, чтобы их можно было адресовать в соответствии с их физической структурой: головка цилиндра — сектор. Современные накопители намного сложнее и используют такие системы, как зональная битовая запись , в которых не все дорожки имеют одинаковое количество секторов. Больше нецелесообразно обращаться к ним в соответствии с их физической геометрией.
на справочной странице fdisk:
Если возможно, fdisk автоматически получит геометрию диска. Это не обязательно физическая геометрия диска (действительно, современные диски на самом деле не имеют ничего похожего на физическую геометрию, уж точно не то, что можно описать в упрощенной форме Цилиндры/Головки/Сектора)
Чтобы обойти эту проблему, современные диски адресуются с помощью логической блочной адресации, о которой знает операционная система. LBA — это схема адресации, в которой весь диск представлен в виде линейного набора блоков, каждый блок имеет одинаковое количество байтов (обычно 512 или больше).
О файлах
Чтобы понять, где находится «файл» на диске (на уровне LBA), вам нужно понять, что такое файл. Это будет зависеть от того, какую файловую систему вы используете. В файловых системах в стиле Unix существует структура, называемая inode, которая описывает файл. Индексный дескриптор хранит все атрибуты файла и указывает на LBA-местоположение фактических данных.
Пример Ubuntu
Вот пример поиска местоположения файловых данных LBA.
Сначала получите номер инода вашего файла
$ 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 теперь должен содержать содержимое исходного файла.
person
Chandler
schedule
10.08.2010