Как делить диск на разделы.

Тема в разделе "WASM.ASSEMBLER", создана пользователем Antolflash, 13 мар 2009.

  1. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Имеется диск с файловой системой NTFS, треубется написать бутовую программу (т.е. запихнуть код в первые 512кб, например дискетки) которой можно будет делить диск на разделы (C, D, E, и так далее). Подскажите, с чего начать? Где вообще в NTFS храниться таблица разделов, и так далее?
     
  2. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Таблица разделов не имеет никакого отношения к файловым системах, которые установлены на этих разделах. Хранится таблица разделов в самом первом секторе физического диска. В ~400 байт такая программа не влезет, особенно если нужен интерфейс с пользователем. Начать можно с википедии, можно с английской, оттуда уже по ссылкам.
    На дискету без проблем влезает например partition magic, которая всё это может без потери информации, или fdisk, который может чуть меньше и с потерей информации, но занимает на порядки меньше места.
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Antolflash
    Нигде. Таблица разделов хранится в mbr или GUID Partition Table. Который существует только на жеских. На флопи там бут сектор.
    И к NFTS это неимеет ниакого отношения.
     
  4. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    http://ru.wikipedia.org/wiki/Главная_загрузочная_запись

    Как я понимаю, нужно вот это читать?
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Еще сюда заглени.
    http://ru.wikipedia.org/wiki/Таблица_разделов_GUID
     
  6. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    0x018A Четыре 9-байтных записи таблицы основных разделов (IBM-расширения к схеме таблицы разделов MBR)

    Как я понимаю, это физический адресс, на жёстком диске, где хранится описание разделов диска, так???


    Структура Главной загрузочной записи (MBR)
    Смещение Длина Описание
    000h 446 Код загрузчика
    1BEh 64 Таблица разделов
    16 Раздел 1
    1CEh 16 Раздел 2
    1DEh 16 Раздел 3
    1EEh 16 Раздел 4
    1FEh 2 Сигнатура (55h AAh)

    А вот это - смещения от 0x018A , так? Т.е. по адрессу 0x018Ah + 1BEh я должен описать раздел.


    Т.е. в первом байте этого адресса написать 80h - описание того, что раздел активен.



    Только вот остальные параметры мне не очень понятны:

    Структура описания разделаСмещение Длина Описание
    00h 1 Признак активности раздела
    01h 1 Начало раздела — головка
    02h 1 Начало раздела — сектор (биты 0-5), дорожка (биты 6,7)
    03h 1 Начало раздела — дорожка (старшие биты 8,9 хранятся в байте номера сектора)
    04h 1 Код типа раздела
    05h 1 Конец раздела — головка
    06h 1 Конец раздела — сектор (биты 0-5), дорожка (биты 6,7)
    07h 1 Конец раздела — дорожка (старшие биты 8,9 хранятся в байте номера сектора)
    08h 4 Смещение первого сектора
    0Ch 4 Количество секторов раздела


    Опишите какие значения нужно пихать в соответствующие адресса?
     
  7. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Тут огромное поле изучения, всё это со временем познается, а я хочу здесь и сейчас узнать, какие байты куда запихнуть, чтобы компьютер считал, что диск разбит, предположим, на два логических раздела (с ними, вроде-как, проще) ???
     
  8. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Чем не устраивают готовые программы?
    Значения зависят от размеров и положения разделов.
     
  9. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    БДЗ - написать пободбную программу.
     
  10. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    ээээ.... что это такое???

    Секторы я могу просматривать в специальной проге HxD Hex editor, а вот "дорожка" что-то очень низкоуровневое, как вообще там всё устроенно???

    Где бы найти пример простенькой проги по редактированию таблицы MBR???
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    http://frolov-lib.ru/books/bsp/v01b/ch2_1.htm
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Antolflash
    Существует два способа адресация LBA и CHS.
    Для дисков до 8ГБ можно произвести сопоставление CHS и LBA используя геометрию диска.
    В 2002 введен стандарт ATA\ATAPI-6 в котором отказались от CHS.
    В 2006 году введен UEFI и GPT что позволяет разбивать диски на разделы, тем самым преодален барьер для дисков объемом более 2ТБайт.

    У дисков это вечная проблема. Барьеры вечно приодалевают.
     
  13. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Требуется чисто ассемблерный код, чтобы грузить его как бутовый код.
     
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Antolflash
    Не смеши в 400 Байт это не влезит.
    Почему именно ассемблер? И именно бут?
     
  15. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    В сях используют какие-то библиотеки для этого, там уже готовые функции для изменения таблицы. Я так не хочу, а во-вторых у меня БДЗ на ассемблере, и я хочу честно во всём разобраться. Поясните, пожалуйста, что и как надо изменять, как получать доступ к записи на жёсткий диск в ассемблерном коде и т.д.
     
  16. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Какие-такие библиотеки? Может что-то подобное и есть, но это, так сказать, из частной коллекции... А вообще ты хочешь побыстрому слепить программу, не прилагая особых усилий... точнее вообще никаких усилий. Изучи для начала структуру MBR. Затем определись, какие средства необходимы и достаточны для создания подобной программы, например, с помощью чего ты собираешься определять общую емкость диска или как должен быть организован интерфейс программы. В программе для реального режима практически все можно сделать с помощью функций BIOS. В MBR пихать эту программу не следует, потому что во-первых это тупо, а во-вторых не поместится. Далее сделай загрузку программы за два этапа, чтобы к примеру грузить com-файл, или поищи подходящий загрузчик в сети. Короче наскоком не получится... трудись...
     
  17. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    В 512Кб не проблема. ;)
    Проблема в том что сектора по 512 БАЙТ, а в них ты не засунеш менеджер разделов.
    Особенно если учесть что не все 512байт ещё и доступны.
     
  18. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Говоря про первые 512 кб, я имел ввиду, что программа должна уместиться в boot сектор дискетки или cd диска.

    Да, и вот ещё, как я понял, если я просто изменю таблицу разделов в MBR, которая начинается со смещения 1BEh от начала жёсткого диска, то я потеряю все предыдущие данные, точнее не смогу ими больше воспользоваться без шаманства. И каким образом назначать всякие начала головок, дорожек и т.д.? ОТ балды?
     
  19. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Ты уж определись сначала - сколько у тебя места 512 байт или 512 килобайт. А то народ путается.