Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

Как узнать таблицу разделов на дисках и вообще как это работает   Найти похожие ветки 

 
Rule ©   (2009-10-27 15:13) [0]

Доброго времени суток :-) Вот тут возник такой вопрос, нужно узнать все подключеные диски и определить разделы на них, причем нужно найти специфичный раздел который система не в состоянии смотнитовать (в винде пишет что типа давайте отформатируем, на никсах просто не смонтирует).

Так вот это раздел определнного специфичного типа, который системе неизвестен.

Так вот задача такова: получить таблицу раздела всех дисков на Линуксе, Винде и МакОС.
Под линуксом все просто - там есть GNU gparted. Под Мак ОС приблизительно представляю - все разделы появляются в /dev/disk[n]s[n] пожно с них прочитать первые нацать байт меджик слова чтоб определить тип раздела.

А вот как обстоит дело в Винде ? И вообще мож кто книжку по этой теме знает типа "Inside File Systems" или чтонить в этом роде, чтоб побольше узнать как вообще устроены разные системы разбиения дисков (насколько я знаю их 3 бывает) и различить разные файловые системы.

С уважением.


 
Игорь Шевченко ©   (2009-10-27 15:52) [1]

Everest запусти - оно тебе все покажет.
Или тут реклама была на Paragon Partition Manager - бесплатная закачка


 
Rule ©   (2009-10-27 17:41) [2]

нет это не реклама,
просто есть неким японцем придуманая файловая система
естественно ни одной ОС она не определяется
задача написать програмулинку которая при запуске обнаруживала на дисках этот раздел и работала с ним далее по известному алгоритму :-)
И приложение должно быть кроссплатформенным, поэтому я интересуюсь.
Под всеми ОС я в принципе знаю как это сделать, кроме виндовз. Вот и интересуюсь.
Вот меня собственно и интересует как Eveerest например узнает таблицу разделов.


 
oldman ©   (2009-10-27 17:49) [3]


> Rule ©   (27.10.09 17:41) [2]
> просто есть неким японцем придуманая файловая система
> естественно ни одной ОС она не определяется


Ну и на фига она нужна?


 
Dennis I. Komarov ©   (2009-10-27 18:00) [4]


> Ну и на фига она нужна?

Не нужна, но она есть и видимо с ней нужно работать...


 
Игорь Шевченко ©   (2009-10-27 18:02) [5]


> Вот меня собственно и интересует как Eveerest например узнает
> таблицу разделов.


Очевидно читает. Под Windows легко с помощью функции DeviceIoControl - я даже когда-то программу писал, которая это делает и показывает, как в Everest

Но как ты понимаешь, для того, чтобы файловую систему можно было распознать, надо написать драйвер этой файловой системы и подключить его к драйверу распознавания файловых систем. А это уже не такая простая задача, как кажется. Даже имеющиеся драйвера для ext2fs были кривыми и падали, увлекая за собой систему - а Ext2fs изучена вдоль и поперек.


 
Rule ©   (2009-10-27 18:03) [6]

Все верно, она уже есть :-) и есть только инструменты командной строки для работы с ней. Необходимо сделать ГУИ для дураков.
Тем более там как таковые файлы не хранятся в этой файловой системе, там хранятся блоки данных. большие, до 9 гиг каждый но в среднем где-то 4. И все в принципе.


 
Rule ©   (2009-10-27 18:07) [7]

Игорь Шевченко ©   (27.10.09 18:02) [5]
Не задача не чтоб винда распознала, а чтоб я распознал в своем коде. Насколько я знаю достаточно знать раздел и прочитать с него как с блочного устройства первые там 100 байт и по ним можно определить тип раздела. Либо по магическому числу либо по структуре заголовка.

Как раз чтоб винда распознала - это не так сложно. Там системой все перекрывается распознание дисков и разделов. Я писал уже драйвера файловых систем, правда для линукса, но думаю что под виндовз не сильно отличается. Учитывая что можно вообще FUSE использовать, тогда ничего переписывать и не нужно будет.


 
Rule ©   (2009-10-27 18:09) [8]

Вот вопрос и состоит в том как вот получить энумератор девайсов (на это Игорь уже ответил, спасибо за это) и как прочитать с этого устройства первые n байт. Насколько я понимаю виндовз не очень посикс и устройства не обязаны являтся файлами. И читать с раздела как с файла не получится хотябы потому что у меня нет файлового дискриптора.

Вот как это прочитать ?


 
Игорь Шевченко ©   (2009-10-27 18:16) [9]


> и как прочитать с этого устройства первые n байт


CreateFile ("\\.\PhysicalDriveX",
где X - порядковый номер диска

получаешь доступ ко всему диску. Рассчитываешь первый блок нужного раздела по смещению в partition table, читаешь блок.

Если Windows монтирует этот раздел, как том (Voulme), то можно вызвать CreateFile с GUID-ом этого тома, тогда пересчитывать не придется.


 
Rule ©   (2009-10-27 19:25) [10]


> Игорь Шевченко ©   (27.10.09 18:16) [9]


ООО именно то что нада, огромное спасибо.
По вашей наводке нашел:
http://technet.microsoft.com/en-us/library/cc739412(WS.10).aspx
http://developer.apple.com/mac/library/technotes/tn2006/tn2166.html
http://en.wikipedia.org/wiki/GUID_Partition_Table

Мож кому пригодится.
Этого более чем более чем достаточно :-)



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
1-1231859045
Игорь_Залозных
2009-01-13 18:04
2009.12.27
DrawText и текст, который не вместился в прямоугольник


2-1257165542
Andrewtitoff
2009-11-02 15:39
2009.12.27
DBComboBox


1-1231821699
CodeMaster
2009-01-13 07:41
2009.12.27
И снова Drag and Drop


2-1256271770
Delphi2020
2009-10-23 08:22
2009.12.27
Проблема с сохранением Raw в exe


1-1230778579
self
2009-01-01 05:56
2009.12.27
синхронное прокручивание 2х RxRichEdit ов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский