Это неясный вопрос, я знаю. Я пытаюсь провести тестирование производительности некоторых дисков на компьютере с Linux. Я получаю некоторые противоречивые результаты, выполняя тот же тест на том же диске. Я знаю, что диски имеют разную производительность в зависимости от того, к какой части диска обращаются. В частности, операции чтения и записи на внешний диск имеют гораздо более высокую пропускную способность, чем операции чтения и записи на внутреннюю часть диска, из-за почти постоянной плотности данных и постоянной скорости вращения.
Я хотел бы видеть, могут ли мои несоответствия быть отнесены к этой вызванной геометрией дисперсии пропускной способности. Можно ли с помощью существующих инструментов выяснить, где на диске был размещен файл?
Если нет, то я полагаю, что могу написать что-то для прямого поиска, чтения и записи в сам файл устройства, минуя (и уничтожая) файловую систему, но я надеюсь избежать этого. В настоящее время я использую ext4 в ядре 3.0 (Arch Linux, если это имеет значение), но мне интересны и методы для других файловых систем.
источник
Ответы:
Вы можете использовать
debugfs
для этого:Измените жесткий диск / раздел жесткого диска соответствующим образом и убедитесь, что диск отключен. Вы получите список всех используемых блоков:
источник
Вы можете использовать FIBMAP ioctl , как показано здесь , или использовать hdparm :
источник
HDIO_GETGEO failed: Inappropriate ioctl for device
Этот поток может дать вам некоторое представление об алгоритме размещения файлов ext4.
debugfs
имеетbmap
функцию, которая, кажется, дает данные, которые вы хотите. Вы должны быть в состоянии дать ему последовательные блоки файла и получить номера физических блоков.источник
Вопрос довольно старый, но есть другой ответ, который может быть полезен для тех, кто находит это в Google:
filefrag
(в Debian он находится внутри пакетаe2fsprogs
).Он имеет преимущество в том, что работает и для других файловых систем (я использовал его для UDF), которые, похоже, не поддерживаются другими инструментами, описанными здесь.
Смещение, представленное в выходных данных, должно быть кратным размеру блока, записанному во второй строке (здесь 4096). Помните, что логические смещения могут быть не смежными, поскольку в файле могут быть дыры (если они поддерживаются файловой системой).
источник