OSDev

для всех
Текущее время: 29 апр 2024, 12:30

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 02:13 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
Корневой каталог в фат вроде как неограничен (т.е. можно в корено много много много файлов писать), я записал один файл размером в 3кб. кластер у меня размером 4 кб, соответственно файл занимает один кластер. корневой каталог находится по адресу 204000h. файл записан по адресу 205000h. если я запишу туда 128 файлов (что есть (205000h-204000)/20h - (начальный адрес области данных - начальный адрес корневого каталога)/размер_структуры_описания_файла), то что дальше? файлы закончатся? или корневой каталог переместится?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 05:26 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
еперь рассмотрим саму структуру FAT. Структура содержит однонаправленные списки “блоков” (кластеров) файлов. Директория (или контейнер файлов) FAT представляет собой не что иное, а обычный файл, со специальным атрибутом «директория». Особенностью директории является то, что хранимые данные (файлы) представляют собой массив 32-байтных структур (их описание ниже). Во всём остальном, директория ни чем не отличается от файла. FAT распределяет данные по номерам кластеров. Номер самого первого кластера 2.

Корнейвой каталог не непрерывный. Он просто продолжиться в любом свободном кластере.
Переместиться он может только когда будете перезаписывать кластер с корневым каталогом, с защитой от потери данных


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 10:00 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Все верно. В FAT32 корневой каталог может фрагментироваться, как и любой другой. Стартовый кластер обычно имеет номер 2, а дальше как получится. Хотя конечно имеет смысл зарезервировать под корень хотя бы еще несколько кластеров, начиная с номера 3.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 11:00 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
понятно, спасибо. еще один вопрос: записал я на диск два файла, затем через hex-редактор решил руками их удалить. для этого я лезу в корневой каталог, тру все записи нулями, затем иду в фат, первые две записи резервные оставляю (то бишь кластеры 0 и 1), а остальные опять тру нулями. это проделываю с двумя копиями фат. далее иду в fsinfo, правлю кол-во свободных кластеров, первый свободный ставлю 2, сохраняю все это дело. затем открываю диск - все ок, он пустой. НО! когда я в следующий раз пытаюсь записать что-то на диск появляются лишние файлы с корявыми именами (коды символов типа нуль, 08h, 7fh и т.д.), огромного размера, которые занимают кластеры с номерами 6000000h и больше. вопрос: что я делаю не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 11:52 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Кластер 2 должен оставаться занятым. Или переносите корень в другое место.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 13:08 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
хм. окау, пусть будет так. НО! как только я отформатировал раздел у меня корневой каталог пустой, в таблице ФАТ первые два элемента как и положено заняты, далее элемент под ИНДЕКСОМ 2 занят (то бишь третий элемент таблицы, кластер 2), но при этом в корневом каталоге об этом ничего не сказано. в структуре fsinfo первый свободный кластер - 2. вопрос: как сие понимать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 13:56 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
А как вы себе представляете, чтобы в корневом каталоге было что-то сказано. Именно по FAT определяется принадлежность кластера к каталогу. А нулевой первый байт кластера говорит о том, что весь кластер (а также все последующие кластеры каталога, если они присутствуют) доступен для размещения файловых записей. Поля FSInfo – это лишь "подсказки". Они могу содержать неактуальные данные. Более того, содержимое поля, о котором, видимо, идет речь, нужно трактовать не как "первый свободный кластер", а как "кластер, начиная с которого нужно выполнять поиск свободных кластеров". Свободные кластеры могут размещаться и до этого кластера, но их нужно искать в последнюю очередь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 16:56 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
хм. возможно я тупой, но я не понял. я читаю кулакова и у него там ничего не сказано про то, что должно быть три кластера заняты. вобщем вот что у меня в фате после форматирования
Код:
f8 ff ff 0f               ff ff ff 0f               f8 ff ff 0f
этот служебный               этот служебный   а этот хз какой

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 17:25 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Толи у Кулокова ошибка. Толи вы что-то неправильно поняли. Но поля первого свободного кластера нет, а есть FSI_Nxt_Free.
Вот из официальной документации.

FSI_Nxt_Free смещение 492 размер 4
Вспомогательное значение для драйвера FAT. Содержит номер кластера, начиная с которого надо искать свободный кластер. Поскольку FAT32 таблица FAT велика, могут происходить значительные затраты времени, когда в начале FAT много занятых кластеров, а драйвер ищет свободный начиная с номера 2. Обычно здесь номер последнего выделенного кластера. Если здесь значение 0xFFFFFFFF, то нет вспомогательного значения, и поиск должен производиться с номера 2. Любое другое значение может использоваться, но должно предварительно проверяться на условие <= количества кластеров на диске.


FSI_Nxt_Free 492 4
This is a hint for the FAT driver. It indicates the cluster number at which the driver should start looking for free clusters. Because a FAT32 FAT is large, it can be rather time consuming if there are a lot of allocated clusters at the start of the FAT and the driver starts looking for a free cluster starting at cluster 2. Typically this value is set to the last cluster number that the driver allocated. If the value is 0xFFFFFFFF, then there is no hint and the driver should start looking at cluster 2. Any other value can be used, but should be checked first to make sure it is a valid cluster number for the volume.

http://msdn.microsoft.com/en-us/gg463080.aspx
перевод
http://usuperl.googlecode.com/svn-histo ... 03-rus.pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Корневой каталог FAT32
СообщениеДобавлено: 09 июл 2014, 17:32 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Rammstein писал(а):
хм. возможно я тупой, но я не понял. я читаю кулакова и у него там ничего не сказано про то, что должно быть три кластера заняты. вобщем вот что у меня в фате после форматирования
Код:
f8 ff ff 0f               ff ff ff 0f               f8 ff ff 0f
этот служебный               этот служебный   а этот хз какой

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

Скорее всего 3-тий кластер корневой каталог. Каталог тоже файл. Начальный сектор корневого каталога определяется как

Цитата:
Директория FAT - ни что иное как “файл”, состоящий из списка 32-байтных структур. Лишь одна специальная директория, которая всегда должна присутствовать, это корневая директория. На дисках FAT12 и FAT16, корневая директория расположена в фиксированном месте - непосредственно после последней таблицы FAT, и состоит из фиксированного количества секторов, вычисляемого из BPB_RootEntCnt (смотри вычисление RootDirSectors выше). Для дисков FAT12 и FAT16, номер первого сектора корневой директории зависит от номера первого сектора таблицы FAT:

FirstRootDirSecNum = BPB_ResvdSecCnt + (BPB_NumFATs * BPB_FATSz16);

Для FAT32, корневая директория может быть произвольного размера из последовательности кластеров, так же как любая другая директория. Номер первого кластера корневой директории FAT32 хранится в BPB_RootClus. В отличие от других директорий, корневая директория любой FAT не имеет штампа даты и времени, не имеет имени файла (кроме неявного имени “\”), и не содержит “.” и “..” в первых двух записях. Ещё один аспект - только в корневой директории может содержаться файл, у которого установлен единственный атрибут ATTR_VOLUME_ID (смотри ниже).


Еще думаю стоит учитывать замечание про битые кластеры не только к FAT32 но и 16,12
Цитата:
BPB_RootClus
44
4
Это поле есть только в FAT32, и отсутствует в FAT12 и FAT16. Номер первого кластера корневой директории. Обычно 2, но может быть и другим.
ЗАМЕТКА: Дисковые утилиты, которые изменяют положение корневой директории, должны стараться в качестве первого кластера использовать первый не повреждённый кластер. Специально для того, чтобы в случае аварийного обнуления поля, утилита исправления диска смогла легко найти начало директории.
В переводе слово пропустили "первый".


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB