URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5450
[ Назад ]

Исходное сообщение
"работа с разделами диска на низком уровне"

Отправлено Amouse , 24-Май-06 20:04 
c++

Как посекторно читать разные разделы?
для чтения надо:

open(partition_name, flag );

где partition_name, скажем — "/dev/hda5".

Вопрос в том, откуда это самое partition_name взять?
Т.е надо установить соответствие информации из MBR, где все разделы перечислены, с их именами в linux.

statfs насколько я вижу такой инфы не дает, к тому же встает вопрос как
читать не смонтированнные разделы.


Содержание

Сообщения в этом обсуждении
"работа с разделами диска на низком уровне"
Отправлено chip , 24-Май-06 21:30 
>c++
>
>Как посекторно читать разные разделы?
>для чтения надо:
>
>open(partition_name, flag );
>
>где partition_name, скажем — "/dev/hda5".
>
>Вопрос в том, откуда это самое partition_name взять?

Взять исходные тексты fdisk и посмотреть, как он обрабатывает mbr.

>Т.е надо установить соответствие информации из MBR, где все разделы перечислены, с
>их именами в linux.

По-моему, всё достаточно прозрачно для :
hda1,hda2,hda3,hda4 - первый, второй, третий, четверный (соотвественно) primary раздел устройства hda. Информация хранится в mbr.
hda5, hda6, ... - расширенные разделы. Информация хранится в расширенной таблице, адрес расположения которой узнается из mbr.

>
>statfs насколько я вижу такой инфы не дает, к тому же встает
>вопрос как
>читать не смонтированнные разделы.



"работа с разделами диска на низком уровне"
Отправлено Bob , 24-Май-06 23:43 
Хочешь программку дам, которая из MBR всю инфу о разделах (основных и логических) устройства выгребает? Нужно только имя устройства указать, например /dev/hda. Если надо - пиши в мыло.

"работа с разделами диска на низком уровне"
Отправлено guest , 25-Май-06 01:18 
>Вопрос в том, откуда это самое partition_name взять?
>Т.е надо установить соответствие информации из MBR, где все разделы перечислены, с
>их именами в linux.

загляни в /proc/partitions


"работа с разделами диска на низком уровне"
Отправлено sighted , 31-Июл-06 13:34 
Для того, чтобы разобраться с партициями из программы, можно пойти простым путём: читать /proc/partitions, как описано выше.
Можно сделать честнее:
Нужно прочесть MBR с диска. Это первые 512 байт устройства /dev/hda (к примеру).
Но для того, чтобы получить информацию о разделах, нужно знать тип MBR: MS-DOS, Sparc и т.п.
В зависимости от типа MBR информация о разделах хранится по разному. Тип MBR определяется из magic number. Для MS-DOS это последние 2 байта MBR: 0xAA55.
Более подробную информацию молжно найти в google.
Кстати говоря, если MBR типа MS-DOS, то в там хранится информация только о 4-х первычных разделах. Об остальных разделах информация хранится во во второй части загрузчика. Она вроде бы, если не ошибаюсь, лежит в адреса 0x8000. НО в этом не уверен и размер её не помню.

"работа с разделами диска на низком уровне"
Отправлено sighted , 31-Июл-06 13:36 
>c++
>
>Как посекторно читать разные разделы?
>для чтения надо:
>
>open(partition_name, flag );
>
>где partition_name, скажем — "/dev/hda5".
>
>Вопрос в том, откуда это самое partition_name взять?
>Т.е надо установить соответствие информации из MBR, где все разделы перечислены, с их >именами в linux.
>
>statfs насколько я вижу такой инфы не дает, к тому же встает вопрос как
>читать не смонтированнные разделы.
Да, что касается соответствия: всё линейно. 1 раздел в MBR - цифирь 1 (скажем /dev/hda1) и т.п.