Детектирование файловой системы
Здравствуйте! Я программирую под Bochs-2.3.5 ОС в pmode, мне бы хотелось узнать, каким образом другие операционные системы (DOS, Windows, Linux) определяют файловую систему FAT на hdd. Как, во-первых, система узнает FAT12/FAT16/FAT32 и узнает, где находится тот или иной boot-record, в котором и записана информация о файловой системе? Я посмотрел в .img-файл виртуального hdd, там: MBR + 6 подряд идущих секторов с сигнатурой 0xAA55. Сложность в том, что MBR может вообще не содержать BPB. Если бы MBR содержал BPB, было бы легко определить структуру логических дисков по BPB_FATsz16/BPB_FATsz32 + BPB_ReservedRegion + ... А также где можно увидеть информацию о разметке диска?
Смотри инф. о Partoitional Table.
З.Ы. а что системе узнавать тип фата? один драйвер читает все типы фата) А распознает она уже конкретный тип (12/16/32) по BPB.
MBR здесь ни причем, хотя в таблице разделов и имеются однобайтовые поля, определяющие тип раздела/ОС - использовать их для детекта типа ФС не следует. В документации на FAT четко сказано, что определять тип FAT нужно только исходя из числа кластеров в томе (эти сведения находятся в BPB) и никак иначе.
Спасибо. Оказывается, в MBR существует 64 байта, описывающие разделы :) Но ведь можно создавать FAT32 для дисков 50мб, а это - 12800-N (на FAT и reserved region) кластеров по 4096 байт. Как я увидел из документации по FAT, тип файловой системы будет FAT16 (т.к. Countofclusters < 65525). Однако все проги правильно определяют тип: FAT32.
Цитата: Phantom-84
MBR здесь ни причем, хотя в таблице разделов и имеются однобайтовые поля, определяющие тип раздела/ОС - использовать их для детекта типа ФС не следует. В документации на FAT четко сказано, что определять тип FAT нужно только исходя из числа кластеров в томе (эти сведения находятся в BPB) и никак иначе.
Читай внимательней, никто и не предлагал определять тип FAT по MBR. Я написал только то, что из имеющейся там информации можна только строить предположения, то-есть как минимум существуют такие значения, про которые можна сказать, что это явно не фат32 или что это точно фат12 (только исходя из простых арифметических вычислений), но в общем случае этого делать, конечно, нельзя.
Все верно. Обычно при детекте FAT в MBR проверяется наличие хоть одного допустимого для FAT идентификатора, а уже потом (если это условие выполняется) определяется тип FAT по числу кластеров.