Как преобразовать данные, возвращаемые FIBMAP, в LBA-сектора диска?

Мне нужно определить диапазон(ы) секторов, занятых файлом на дисковом устройстве (для Linux). Предположим, это простой диск (без RAID) с таблицей разделов MBR или GPT.

Я узнал, что могу получить позицию файла в файловой системе, используя FIBMAP ioctl. Как преобразовать данные, возвращаемые FIBMAP, в LBA-сектора диска? Спасибо


person Isso    schedule 04.12.2012    source источник
comment
Я подозреваю, что это может зависеть от файловой системы. Какие файловые системы вам необходимо поддерживать?   -  person NPE    schedule 05.12.2012
comment
ext3, ext4 как минимум. Но я был бы очень признателен за решение, независимое от файловой системы.   -  person Isso    schedule 05.12.2012
comment
Не проще ли было бы начать с начального индекса и повторять оттуда? И поскольку файл может быть фрагментирован на каждый блок, стоит ли это хлопот?   -  person ott--    schedule 05.12.2012
comment
@ott-- извините, я не понимаю, что вы имеете в виду. Зачем мне перебирать индексные дескрипторы, если мне нужно знать только позицию одного файла?   -  person Isso    schedule 05.12.2012
comment
Вы написали position of a file в шапке, а потом the sector range(s) occupied by a file. Я предположил последнее.   -  person ott--    schedule 05.12.2012
comment
хм, может я что-то упускаю, но какая разница? Я имею в виду, что файл может занимать один или несколько диапазонов секторов, мне нужно их определить   -  person Isso    schedule 05.12.2012
comment
Посмотрите исходный код программы hdparm и отчет об ошибке здесь: sourceforge.net/ p/hdparm/ошибки/58   -  person Windows programmer    schedule 06.09.2013


Ответы (1)


У меня нет точного ответа для вас, но если вы посмотрите на исходный код hdparm, вы сможете понять это. Если вы используете hdparm --fibmap /dir1/dir2/foo, он выведет фрагменты файла в строках смещения файла, начала LBA, остановки LBA и длины сектора. Надеюсь, это поможет.

person BeantownGuy80    schedule 21.10.2013