The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"работа с разделами диска на низком уровне"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"работа с разделами диска на низком уровне"  
Сообщение от Amouse (ok) on 24-Май-06, 20:04 
c++

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

open(partition_name, flag );

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

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "работа с разделами диска на низком уровне"  
Сообщение от chip email(ok) on 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 насколько я вижу такой инфы не дает, к тому же встает
>вопрос как
>читать не смонтированнные разделы.


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "работа с разделами диска на низком уровне"  
Сообщение от sighted (??) on 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. НО в этом не уверен и размер её не помню.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру