Перейти к содержимому

Fat32 lba что это

  • автор:

Форматирование USB-накоптеля в FAT32

Это самый простой способ, но не всегда контроллер видит накопители, отформатированные таким образом:

  1. Откройте проводник Windows и перейдите в Мой компьютер.
  2. Выберите нужный накопитель и правой кнопкой мыши откройте контекстное меню.
  3. В меню выберите пункт Форматировать….
  4. Укажите параметры форматирования:
    • Файловая система — FAT32.
    • Размер единицы распределения — 8192 байт.
    • Метка тома — любое слово.
    • Быстрое форматирование — флажок установлен.
  5. Нажмите кнопку Начать и дождитесь окончания операции.

Готово. Накопитель отформатирован в FAT32.

Контекстное меню проводника Windows

Окно выбора параметров форматирования

Утилита Rufus

Если контроллер не видит накопитель отформатированный встроенными средствами, то вы можете использовать утилиту Rufus:

  1. Скачайте утилиту Rufus и запустите её.
  2. Укажите параметры форматирования:
    • Device — выберите накопитель, который нужно отформатировать.
    • Boot selection — Non bootable.
    • Volume label — любое слово.
    • File system — FAT32.
    • Cluster size — 8192 байт.
    • Quick format — флажок установлен.
    • Create extended label and icon files — флажок снят.
    • Check device fo bad sectors — флажок снят.
  3. Нажмите кнопку START и дождитесь окончания операции.

Готово. Накопитель отформатирован в FAT32.

Настройки для форматирования накопителя

Форматирование успешно завершено

ОС Linux

Этим способом можно отформатировать накопитель с помощью контроллера или компьютера с ОС Linux.

Для создания разделов и форматирования мы будем использовать встроенную в ОС Linux утилиту fdisk:

  1. Важно правильно определить путь к накопителю:
    • Не вставляя накопитель, выполните команду lsblk :
~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT mmcblk0 179:0 0 7.1G 0 disk |-mmcblk0p1 179:1 0 16M 0 part |-mmcblk0p2 179:2 0 1G 0 part / |-mmcblk0p3 179:3 0 1G 0 part |-mmcblk0p4 179:4 0 1K 0 part |-mmcblk0p5 179:5 0 256M 0 part [SWAP] `-mmcblk0p6 179:6 0 4.8G 0 part /mnt/data mmcblk0boot0 179:8 0 16M 1 disk mmcblk0boot1 179:16 0 16M 1 disk
  • Вставьте накопитель и снова выполните команду lsblk :
~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 1 14.5G 0 disk `-sda1 8:1 1 14.5G 0 part mmcblk0 179:0 0 7.1G 0 disk |-mmcblk0p1 179:1 0 16M 0 part |-mmcblk0p2 179:2 0 1G 0 part / |-mmcblk0p3 179:3 0 1G 0 part |-mmcblk0p4 179:4 0 1K 0 part |-mmcblk0p5 179:5 0 256M 0 part [SWAP] `-mmcblk0p6 179:6 0 4.8G 0 part /mnt/data mmcblk0boot0 179:8 0 16M 1 disk mmcblk0boot1 179:16 0 16M 1 disk
~# fdisk /dev/sda Command (m for help): p Disk /dev/sda: 14.5 GiB, 15525216256 bytes, 30322688 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 30322687 30320640 14.5G c W95 FAT32 (LBA) 
Command (m for help): d Selected partition 1 Partition 1 has been deleted.
Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-30322687, default 2048): Last sector, +sectors or +sizeK,M,G,T,P> (2048-30322687, default 30322687): Created a new partition 1 of type 'Linux' and of size 14.5 GiB. Partition #1 contains a vfat signature. Do you want to remove the signature? [Y]es/[N]o: y The signature will be removed by a write command.
Command (m for help): p Disk /dev/sda: 14.5 GiB, 15525216256 bytes, 30322688 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 30322687 30320640 14.5G 83 Linux
Command (m for help): t Selected partition 1 Partition type (type L to list all types): b Changed type of partition 'Linux' to 'W95 FAT32'.
Command (m for help): p Disk /dev/sda: 14.5 GiB, 15525216256 bytes, 30322688 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 30322687 30320640 14.5G b W95 FAT32
Command (m for help): a Selected partition 1 The bootable flag on partition 1 is enabled now.
Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.

Теперь отформатируйте накопитель:

    Установите утилиту dosfstools :

apt install dosfstools
# mkfs.fat -F 32 /dev/sda1 mkfs.fat 4.1 (2017-01-24 

Готово. Накопитель отформатирован в FAT32.

Статья ASM. FAT32 – описание файловой системы

FAT датируется аж 1977-годом и пришла к нам из проприетарного DOS. Благодаря простой реализации, сейчас это способ хранения данных на таких носителях как USB-брелки, карты-памяти телефонов и ЦФК, в EFI для хранения кода загрузчика, в системах реального времени RTOS, и многое другое. В данной статье рассматриваются гендерные признаки зоопарка FAT, и в какую сущность превратила эволюция конкретно взятую FAT32. Детальный её разбор позволит понять алгоритм восстановления удалённых файлов, а так-же подтолкнёт на создание своих утилит форматирования, с широким спектром логической геометрии. Из инструментов понадобится любой (способный работать с дисками) HEX-редактор типа WinHex или HxD, штатный калькулятор Win, и

Ссылка скрыта от гостей

1. Вводная часть; ​
2. Загрузочная запись и блок BPB – Bios Parametr Block; ​
3. Таблицы FAT – File Allocation Table; ​
4. Корневой каталог «RootDir»; ​
5. Практика – разбор служебных структур; ​
6. Заключение. ​

1. Вводная часть

В основе проектирования операционных систем лежит работа с информацией. Здесь перед инженерами встают три задачи: во-первых определиться с типом накопителей (HDD, SSD, Flash), чтобы предоставить системе соответствующий драйвер. Второй момент – это способ хранения данных в виде файловых систем Ext, HPFS, FAT, NTFS и прочие. Но что ещё немаловажно, это предусмотреть возможность восстановления инфы в случае критических сбоев. Последний вопрос стоит ребром, что побудило Microsoft создать до блеска отшлифованную NTFS (New-Technology-File-System). Её мы не будем пока трогать, и отправив на скамейку запасных, рассмотрим только FAT.

1.1. Иерархия: диск[сектор] + том[кластер]

Для начала разберём геометрию накопителей.

• На нижнем уровне, производитель делит всю поверхность на 512-байтные сектора (отсчёт с единицы). Но утилиты и ОС могут предоставлять нам секторы > 512-байт, однако они по-любому будут кратны 512, например 1024-байт. Сектор – мин.порция обмена с диском, мы не сможем прочитать с него кол-во байт не кратное 512. Это нужно учитывать при вызове функций Read/WriteFile() .

Самый первый сектор всегда отводится под MBR (MasterBootRecord), где указывается объём накопителя, и смещение к его логическому тому. Вместо устаревшей трехмерной CHS с лимитом в 8 ГБ, в современном мире используется уже линейный подход LBA48 (48-bit Logical Block Address), в которой секторы нумеруются с нуля, а не как прежде с единицы. LBA позволяет адресовать диск размером 128 ПетаБайт, при размере блока 512.

• ОС не может хранить файлы на дисках без логических разделов (том, volume, макс=26 с литерами от А: до Z. Значит нужно создать этот том, и установить на него какую-нибудь файловую систему (далее FS), чтобы ОС знала о порядке расположения файлов – эта операция известна как форматирование. Бинарные файлы можно сбрасывать и на «сырой» RAW-том, только за доступ к ним будем отвечать уже сами. Такой изврат применяется редко, например при работе с дисками без поддержки их со-стороны ОС (см.прерывание BIOS int-13h).

• Допустим, имеем первый раздел C:\. Его смещение от начала диска указывается в секторе(1) MBR. У всех накопителей, первый раздел начинается как-минимум с сектора(63). Если учесть, что непосредственно данные и код MBR занимают всего 1-сектор, следовательно перед началом тома в загашнике остаётся аж 62 свободных, а это: 62*512=31 КБ пространства, где можно скрыть от FS конфиденциальную инфу. Важно понять, что FS устанавливается не на диск, а на его логический том, поэтому драйвер считает началом тома LBA(0), хотя в глазах биоса это сектор(63).

Такой расклад создаёт путаницу, но достаточно запомнить, что функцией CreateFile() можно открыть как физ.диск (тогда LBA(0) указывает на его начало), а можно запросить и логический том диска, например по букве C:\. В этом случае LBA(0) считается уже указателем на начало раздела. То-есть всё зависит от того, какой объект мы открываем.

• Каждая запись в таблице FAT указывает на определённый блок-информации в области данных. Если указателями адресовать мелкие секторы диска, то во-первых нужно будет увеличить разрядность этих указателей до 64-бит (т.к. диски могут быть исполинских размеров), а во-вторых потребуется огромное кол-во самих линков, что повлияет на размер таблицы. Файлы до 512-байт встречаются редко, а значит нет смысла искать их в каждом секторе. По этой причине, несколько секторов всегда собираются в «кластер» , что позволяет увеличить полезное пространство, за счёт уменьшения таблицы FAT.

C дефолтными настройками, все FS создают кластеры размером 4096-байт, а это 8-секторов. В служебной таблице FAT лежат теперь указатели не на секторы, а на кластеры, и соответственно размер её сокращается в 8-раз! Но помимо плюсов есть и минусы.. Если в txt-файле у нас 11-байтная строка «Hello World», на диске этот файл будет занимать 4 КБ, т.к. мин.блоком хранения данных уже получается кластер. Зайдите в свойства любого файла и посмотрите, какой он имеет реальный размер, и сколько ему выделено на диске:

Hello.png

Как видим – картина удручающая, и при кластерном распределении у нас улетает в трубу огромная часть пространства. Но говорят, «случaйнaя удaчa принocит бoльшe рaдocти, чeм зaкoнoмeрный уcпex», и видимо инженеры с этим согласны. Здесь они вынуждены сесть на шпагат и только надеяться, что большинство файлов юзера будут размером больше 4КБ. Исключительно в этом случае экономия на размере таблицы оправдает себя.

Чтобы предотвратить суицид крайне впечатлительных юзверей, инженеры построили себе хату-с-краю, и предложили нам самостоятельно выбирать кол-во секторов в кластере – данный параметр имеется у большинства приличных утилит форматирования и называется «SectorPerCluster» . Если у вас много мелких файлов и вы считаете 4КБ для хранения каждого из них слишком расточительным, то всегда можете изменить размер кластера в диапазоне от 512-байт, до 64КБ. Вот скрин одной из таких утилит «Fat32format»:

Fat32Format.png

1.2. Организация FAT – вид сверху

На рис.ниже представлены основные отличия FAT12/16, от более совершенной FAT32.
Здесь видно, что раньше, в системной области четыре служебные структуры располагались плотно друг-к-другу: это блок параметров BPB с адресом LBA(0) (не путать с MBR), далее основная таблица FAT, следом её резервная копия FAT2, и в хвосте корневой каталог. Размер таблицы зависит от общего кол-ва секторов в накопителе. Очевидно, что чем больше размер диска, тем больше в нём кластеров, и соответственно больше указателей на кластеры в таблице FAT.

Теперь посмотрим на организацию FAT32 справа..
Корневой каталог уже съехал с насиженных мест и может находится где угодно. Драйвер FS считает его обычным файлом с доступом на запись, что даёт возможность каталогу RootDir расширяться динамически. Кроме того, блок BPB разбух с одного до трёх секторов, хотя в FSInfo нет ничего интересного, а последний отправлен в резерв для наших потомков. Причём имеется и зеркало ВРВ, всегда по адресу LBA(6). В доке на FAT32 эту область назвали «Резервные сектора» , сразу после которых расположилась уже таблица FAT со-своей копией. Благодаря такой организации, драйвер FS может восстанавливать теперь не только таблицу FAT, но и загрузочный сектор ОС в блоке параметров BPB.

FAT_16_32.png

2. Загрузочная запись и блок BPB – Bios Parametr Block

В самом начале тома с адресом LBA(0), во всех версиях FAT лежит блок параметров биос ВРВ. Он занимает ровно один 512-байтный сектор и содержит в себе базовые параметры файловой системы, а так-же код загрузчика ОС с сигнатурой 0x55AA. Запустим HEX-редактор и через меню «Инструменты» откроем в нём свою флэш – вот как это выглядит у меня:

FAT_BPB.png

Загрузчик нас не интересует, ..более того, если Flash не загрузочная, Boot-block вообще забит нулями, и это часто практикуется (например на microSD телефонов). Зато ВРВ критически важен для драйвера, посколько именно в нём зарыта инфа о расположении оставшихся трёх/системных структур – это парочка FAT, и корневой каталог RootDir. Для программного доступа к этому блоку я создал инклуд, и поместил в него структуру ВРВ с описанием каждого поля. Здесь-же перечислю только те поля, которые откроют нам доступ к FAT и корневому каталогу:

BPB struct

struct BPB ;//

FAT_BPB_Decode.png

В спеке на FAT32 от Microsoft говорится, что положение корневого каталога "RootDir" строго не регламентируется, и он может лежать в произвольном кластере области данных. Однако на практике, Root в моих тестах всегда расположен сразу после двух таблиц FAT, т.е. адрес его фиксирован. Не знаю, может и есть в природе отбившиеся от стада утилиты форматирования, но лично мне таковые ещё не встречались.

В любом случае, найти каталог можно по приведённой выше формуле, и если это штатный форматер Win (как и большинство других), то вторая часть формулы (RootCluster-2) * SectorPerCluster будет всегда возвращать нуль. Тогда получается, что каталог лежит сразу после резервных секторов + размеры двух таблиц FAT (см.первый скрин FAT16). А вообще, жить без идеологии и надеяться на случай не есть гуд, а потому лучше использовать полную формулу, тем-более что мягкие уже грозно предупредили нас об этом.

3. Таблица FAT – File Allocation Table

Теперь выйдем из матрицы, и поговорим о более насущном..
Организация любой файловой системы – невероятно сложный механизм. Однако в случае с FAT, это утверждение сильно притянуто за-уши. Именно благодаря свой простоте она дожила до наших дней и не собирается уходить со-сцены, а наоборот мутировала в 64-битную ExFAT.

Значит чтобы получить указатель на таблицу, нужно прочитать поле "RsvdSectorCount" структуры ВРВ. В данном случае там прописан сектор(1000), и если умножить его на 512, получим смещение в байтах от начала тома = 0x0007D000. Далее, читаем из той-же ВРВ поле "FATSz32" с размером, и передаём оба полученных значения функции ReadFile() . Так, в приёмном буфере функции получим дамп таблицы FAT, для её детального разбора.

Таблица – это массив указателей на кластеры, без каких-либо служебных полей. Отсчёт кластеров в массиве начинается с нуля, а разрядность указателей 32-бит (отсюда и название FAT). Старшие 4-бита отправлены в резерв, остаётся 28. Тогда получается, что FAT32 может адресовать всего: 2^28=268.435.456 кластеров, и если размер каждого из них 4096-байт, то макс.объём диска = 1ТБ. Однако это теоретический предел, ведь всегда можно увеличить размер кластера в 2,4,8 и даже в 16-раз, при этом оставив 28-битные линки. Так-что на практике становится доступным диск 16ТБ, а если требуется больше, нужно переходить на ExFAT, в которой разрядность указателей расширена до 64-бит.

На рисунке ниже представлен фрагмент таблицы FAT (для удобства, в меню "Вид" сгруппируйте отображение по 4-байта).

• Два/первых элемента массива всегда равны 0x0FFFFFF8 + 0xFFFFFFFF , и не используются в качестве указателей на кластеры – это просто сигнатура таблицы, а байт(F8) определяет "MediaType" (варианты: F0=Floppy, F8=Hard, FA=Ram). Когда блок ВРВ и его резервная копия безвозвратно утеряны (бэд-сектор или вирь), по данной сигнатуре можно будет найти таблицу, чтобы попытаться спасти информацию.

FAT_Entry.png

• 32-битные элементы начиная со-смещения(8), отображают уже состояние соответствующих кластеров в области-данных диска. Он может быть свободным(0), выделенным(2), зарезервированным(F6) или повреждённым(F7). Элемент с макс.значением 0x0FFFFFFF является маркером последнего кластера файла EOC (EndOfCluster). Если файл большой и занимает несколько кластеров, указатели связываются в цепочку до тех пор, пока не встретится этот маркер (выделены красным).

• Древовидная структура расположения файлов на диске, начинается с корневого каталога – мы не видим его среди привычных нам папок, но он присутствует всегда. Ему назначается имя в виде "метки тома", которую запрашивает у нас система, при форматировании раздела. Именно поэтому второй элемент таблицы по смещению(8) имеет маркер окончания 0x0FFFFFFF , т.к. под корневой каталог отводится всего один кластер(2) (см.структуру ВРВ-->RootCluster).

Чтобы продемонстрировать организацию таблицы FAT, я форматнул свою флэш и сбросил на неё всего два файла. Первый размером 7.4КБ, поэтому занимает на диске два 4К-байтных кластера (выделен зелёным), а второй размером 20.2КБ и как видим, загребает 5 (выделенных синим) кластеров. Далее следуют null-элементы, которые информируют о свободном пространстве.

Обратите внимание, что после кластера(2), следующий элемент таблицы указывает сразу на кластер 0х00000004 . Это-же касается и записи после маркера EOC по смещению(14h) – перепрыгнув через один, она линкует сразу на кластер(6). Здесь возникает вопрос: куда подевались кластеры 3 и 5, ведь значения 0х0FFFFFFF это не указатели, а просто маркеры окончания цепочки?

Дело в том, что в таблице FAT хранятся указатели на следующие кластеры файла, а первый – прописывается в корневом каталоге RootDir, где лежит полный паспорт файла. То-есть когда файл меньше 4096-байт, выделенный под него первый кластер указывается в корневом каталоге, а в таблице получим лишь связанный с ним EOC. Но если файл выходит за границы одного кластера, то следующие указываются уже в таблице FAT, пока не встретится маркер окончания.

4. Корневой каталог " RootDirectory "

Файловая система требует базы, где хранилась-бы информация о всех, существующих на диске, файлах. Для FAT32(16) такой базой является "корневой каталог". Чтобы описать свойства одного файла, инженерам потребовался блок размером в 32-байта, где можно найти: имя файла/каталога в формате 8.3, его размер, дату создания, атрибуты, а так-же номер первого кластера , с которого начинается данный файл. Если-же хвост файла торчит снаружи выделенного кластера, номер следующего указывается уже в таблице FAT. Иначе, в таблице будет прописан только маркер окончания EOC. Таким образом, таблица и корневой-каталог логически связаны между собой, и потеря любого из них приведёт к краху всей FS.

В доках, 32-байтную запись каталога назвали SFN , что подразумевает "Short File Name". Короткая (short) она потому, что хранит имя в досовском формате(8.3). Но в современном мире мы уже отвыкли от всевозможных рамок, и предпочитаем для файлов более длинные имена, которые Win всё-же ограничивает до 256-символов. Поэтому в FAT предусмотрена родственная к SFN структура LFN (Long) – она имеет такой-же размер 32-байт, но является не самостоятельной, а дополнением к SFN. Если в имени файла меньше 8-ми символов, структура LFN может вообще отсутствовать, но SFN в наличии всегда.

Нужно признать, что организация длинных имён в FAT выполнена через известное место. Так, каждая структура LFN несёт в себе макс. 13-символов имени файла, а если их больше, то добавляется ещё одна структура и получаем 26-символов. Если-же и этого мало, то подключается сл.структура и т.д. Причём имя задаётся в Unicode (где на каждый символ расходуются по 2-байта) и внутри одной структуры разбросано по трём/разным полям. Более того, порядок следования цепочки структур обратный – т.е. сначала идёт последняя LFN(x), после неё LFN(x-1) и далее в том-же духе. Общее кол-во структур указывается в первом байте "Ordinal" . Здесь становится очевидным, что разработчик явно был под веществами.

Описание структур SFN и LFN

;//********************************************************************* ;// Время: Биты[4:0]= пары секунд (0-29), [10:5]= минуты, [15:11]= часы ;// Дата: Биты[4:0]= день, [8:5]= месяц, [15:9]= год начиная с 1980 ;//********************************************************************* struct SFN ;//

Выше упоминалось, что LBA каталога можно найти по формуле из ВРВ:
RsvdSecCount + (FATSz*2) + ((RootCluster-2) * SecPerCluster)

Для своей флэш я получил LBA=16384, и прыгнув на него в редакторе, попал в начало каталога.
Проясним некоторые моменты..

1. Первая структура SFN (синий блок) будет всегда описывать корневую папку диска. Это единственная структура, которой может быть присвоен атрибут "VolumeID" со-значением 08h. Атрибуты файлов/каталогов лежат по смещению(0Вh) от начала структур, и я заключил их в синий овал. Все остальные поля первой структуры SFN считаются не действительными! ​

2. На моей флэш всего два файла с именами "dCrypt.asm" и "usbVIDbase.txt". Чем руководствуется драйвер FAT при добавлении к SFN структуры LFN остаётся загадкой, поскольку имя первого файла меньше 8-ми символов, но дров всё-равно вставил LFN (см.красный блок). А вот имя второго файла уже 10-символов, и для него выделено две LFN в зелёном блоке. Обратите внимание, что у первой в поле-ординала лежит значение(1) (+40h маска), а у второй LFN ординал равен(2). Эти поля я выделил чёрным, и они определяют кол-во структур LFN для текущего файла. Записи LFN можно обнаружить по атрибуту(0F). ​

FAT_RootDir.png

Из чёрной таблицы с расшифровкой полей видно, что номер первого кластера разделён на две части Hi/Low. Первый файл "dCrypt.asm" размером 7.4КБ и начинается с кластера(3). Но поскольку он требует два 4К-байтных, следующий указывается уже в таблице FAT (см.зелёный dword на предыдущем скрине). Здесь нужно отметить, что номера кластеров представляются относительно начала области-данных, которая совпадает с началом рассматриваемого корневого-каталога RootDir.

Так как-же найти злополучный файл на диске?
Для этого в спеке FAT32 приведена формула такого вида: FileFirstCluster = RootDir + (SFN.FstClus - RootCluster)
Если учесть, что в стандартной реализации FAT32 поле "RootCluster" в структуре ВРВ всегда равно 2, то для первого файла получаем следующий сектор LBA:

RootDir = сектор 16384 SFN.FstClus = кластер(3) Формула: 3-2 = кластер(1) = 8 секторов ----------------------------------------- FileFirstClus = 16384 + 8 = сектор(16392)

FAT_File.png

4.1. Алгоритм поиска удалённых файлов

Когда мы удаляем файл с диска FAT, он фактически остаётся на своём месте и так-же занимает свой кластер. Просто в соответствующей структуре SFN, первому байту присваивается маркер(Е5) . Аналогичную ситуацию наблюдаем и в случае "Быстрого форматирования" тома. Такой расклад способствует восстановлению удалённых файлов. Чтобы создать их список, достаточно в корневом-каталоге с шагом в 32, проверять каждый/первый байт на маркер(Е5).

В качестве доказательства, я удалил со-своей флэш "usbVIDbase.txt", а второй файл оставил. В результате, SFN удалённого файла (и две предшествующие ей LFN) приобрели вид как на скрине ниже, а причастные к файлу элементы таблицы FAT сбросились в нуль. т.е. кластеры освободились для последующей записи. Таким образом, информация в кластерах удалённых файлов будет доступна нам до тех пор, пока драйвер FS не перезапишет их новыми данными.

FAT_Deleted.png

5. Практика – разбор служебных структур

Теперь попробуем автоматизировать весь изложенный процесс..
Код ниже покажет основную информацию об USB-Flash или карте-памяти, если они имею формат FAT32.

Здесь есть нюанс, на который советую обратить внимание..
Значит получаем букву диска, и проверяем его на съёмный носитель "Removable". Если ок, то открываем раздел диска через CreateFile() , и пытаемся прочитать с него сектор ВРВ. Суть в том, что читать рекомендуется в асинхронном режиме , поскольку том может быть занят кем-то другим, например антивирусом. Если функцией ReadFile() читать синхронно, то функция может вернуть ошибку, мол диск недоступен. Поэтому мы используем асинхронный режим, в котором запрос ставится в очередь, а нам после вызова необходимо выждать пару секунд при помощи Sleep() . Этот способ требует в параметрах ReadFile() указатель на структуру "OVERLAPPED" и никогда не даёт осечек.

format pe console include 'win32ax.inc' include 'equates\fat.inc' entry start ;//---------- .data fatBuff rb 512*3 ntName db '\\?\GLOBALROOT' dosName db 32 dup(0) usbHndl dd 0 align 16 fpuRes0 dq 0 fpuRes1 dq 0 fpuRes2 dq 0 secSize dd 0 clsSize dd 0 kByte dd 1024 mByte dd 1024*1024 gByte dd 1024*1024*1024 ol OVERLAPPED rootDir dd 0 dumpByte dd 16 dumpLen db 8 dumpStr db 16 dup('.'),0 buff db 0 ;//---------- .code start: invoke SetConsoleTitle, <'*** USB-Flash FAT info ***',0>;//---- Проверим наличие клиента в портах USB invoke GetLogicalDriveStringsA,64,buff mov esi,buff @@: push esi invoke GetDriveType,esi ;// запрашиваем тип драйва.. pop esi cmp eax,DRIVE_REMOVABLE ;// извлекаемое устройство? je @ok add esi,4 cmp byte[esi],0 ;// последнее в списке? jne @b cinvoke printf, jmp @exit ;//---- Получаем имя и открываем девайс на асинх.чтение @ok: push esi cinvoke printf,,esi pop esi mov byte[esi+2],0 invoke QueryDosDevice,esi,dosName,32 cinvoke printf,,ntName invoke CreateFile,ntName,GENERIC_READ + GENERIC_WRITE,\ FILE_SHARE_READ + FILE_SHARE_WRITE,\ 0,OPEN_EXISTING,\ FILE_FLAG_OVERLAPPED + FILE_ATTRIBUTE_NORMAL,0 mov [usbHndl],eax ;//---- Читаем структуру "Bios Parametr Block" invoke ReadFile,[usbHndl],fatBuff,512,0,ol invoke Sleep,1000 ;//---- Проверим ф.систему на FAT32, иначе ошибка mov esi,fatBuff cmp word[esi+BPB.FATSz16],0 je @f cinvoke printf, jmp @exit ;//---- Есть FAT32! - собираем инфу.. @@: mov eax,BPB_32.FilSysType add eax,esi movzx ebx,[esi+BPB_32.Header.BytePerSector] movzx ecx,[esi+BPB_32.Header.SecPerCluster] mov edx,ecx imul ecx,ebx mov [secSize],ebx mov [clsSize],ecx shr ecx,10 cinvoke printf,,\ eax,ebx,edx,ecx ;//------------------------ mov esi,fatBuff mov eax,[esi+BPB_32.Header.HiddSec] mov ebx,[esi+BPB_32.Header.TotSec32] movzx ecx,[esi+BPB_32.Header.RsvdSecCounter] mov edx,ecx shl edx,9 shr edx,10 push 0 ebx fild qword[esp] fimul [secSize] fidiv [gByte] fstp [fpuRes0] add esp,8 cinvoke printf,,\ eax,ebx,dword[fpuRes0],dword[fpuRes0+4],ecx,edx ;//------------------------ mov esi,fatBuff movzx eax,[esi+BPB_32.Header.NumFats] movzx ebx,[esi+BPB_32.BkBootSec] movzx ecx,[esi+BPB_32.Header.RsvdSecCounter] mov edx,[esi+BPB_32.FATSz32] imul edx,[secSize] shr edx,10 cinvoke printf,,\ eax,ebx,ecx,[esi+BPB_32.FATSz32],edx ;//------------------------ ;// RootDir = (RsvdSecCount + (FATSz32 * NumFats)) + (RootCluster - 2) * SecPerCluster mov esi,fatBuff mov eax,[esi+BPB_32.FATSz32] movzx ebx,[esi+BPB_32.Header.RsvdSecCounter] shl eax,1 add eax,ebx ;// RsvdSecCount + (FATSz32 * NumFats) mov ebx,[esi+BPB_32.RootCluster] sub ebx,2 movzx ecx,[esi+BPB_32.Header.SecPerCluster] imul ebx,ecx ;// (RootCluster - 2) * SecPerCluster add eax,ebx mov [rootDir],eax cinvoke printf,,\ [esi+BPB_32.RootCluster],eax ;//------------------------ mov esi,fatBuff mov eax,BPB_32.Header.OemName mov ebx,BPB_32.VolLabel mov ecx,[esi+BPB_32.VolID] movzx edx,cx shr ecx,16 add eax,esi add ebx,esi cinvoke printf,,eax,ebx,ecx,edx ;//---- Читаем таблицу FAT, и выводим фрагмент её дампа xor al,al mov ecx,sizeof.OVERLAPPED mov edi,ol rep stosb mov esi,fatBuff movzx eax,[esi+BPB_32.Header.RsvdSecCounter] shl eax,9 mov [ol.Offset],eax invoke ReadFile,[usbHndl],fatBuff,512,0,ol invoke Sleep,1000 cinvoke printf, call PrintDump ;//---- Читаем корневой каталог, и так-же дампим фрагмент xor al,al mov ecx,sizeof.OVERLAPPED mov edi,ol rep stosb mov eax,[rootDir] shl eax,9 mov [ol.Offset],eax invoke ReadFile,[usbHndl],fatBuff,512,0,ol invoke Sleep,1000 cinvoke printf, call PrintDump @exit: invoke CloseHandle,[usbHndl] cinvoke _getch cinvoke exit,0 ;//------------------------------------------ ;// Вспомогательная процедура - выводит дамп ;//------------------------------------------ PrintDump: mov esi,fatBuff @next: mov edi,dumpStr xor ebx,ebx @prn: xor eax,eax lodsb push ebx eax cinvoke printf,,eax pop eax cmp al,20h jb @f mov byte[edi],al @@: inc edi pop ebx inc ebx cmp ebx,4 jb @f cinvoke printf, xor ebx,ebx @@: dec [dumpByte] jnz @prn push esi mov [dumpByte],16 invoke CharToOem,dumpStr,dumpStr cinvoke printf,,dumpStr mov eax,'. ' mov edi,dumpStr mov ecx,4 rep stosd cinvoke printf, pop esi dec [dumpLen] jnz @next mov [dumpLen],8 ret ;//---------- section '.idata' import data readable library msvcrt,'msvcrt.dll',kernel32,'kernel32.dll',user32,'user32.dll' include 'api\msvcrt.inc' include 'api\kernel32.inc' include 'api\user32.inc'

FAT_Result_1.png

Во-втором случае я решил поинтересоваться картой-памяти своего телефона и обнаружил, что размер кластера у неё 32КБ, поэтому и таблица FAT намного меньшего размера: была 7.692 секторов в длину, а стала 951. Более того, и сам том начинается не как обычно с физ.сектора(63), а съехал аж к сектору(8192), о чём говорит поле "Volume First LBA". В такой организации пространства есть смысл, т.к. нам заранее известны ориентировочные размеры файлов – это фотки, мультимедиа и прочие, т.е. больше стандартного кластера 4КБ:

FAT_Result_2.png

6. Заключение

Если не брать во-внимание детали оформления служебных структур, основным недостатком FAT32 является полное отсутствие "инстинкта самосохранения" при критических сбоях. Хорошо хоть инженеры предусмотрели некую пародию, в виде резервных блоков ВРВ и таблицы FAT2. Зато в NTFS всё продумано до мелочей, и в этом большое её преимущество. Например метафайл NTFS под названием "$LogFile" представляет собой журнал последней удачной конфигурации. Если случается крах, то при следующей перезагрузке, все параметры считываются уже из этого журнала, который драйвер NTFS обновляет при обычном выключении компьютера. Однако выбор у пользователей должен быть всегда, и FAT как-раз нам его предоставляет.
В скрепке лежит инклуд, и ехе-файл для тестов. Увидимся теперь на пороге Нового года, пока!

Fat32 lba что это

Дисковые разделы являются стандартной составляющей описания персонального компьютера, и будут ей оставаться еще какое-то время. Однако, среди огромного количества людей, приобретающих компьютеры с предустановленной операционной системой, немногие понимают что это такое. В этой главе будут рассмотрены причины появления и использование дисковых разделов, для того чтобы вы смогли выполнить установку Red Hat Enterprise Linux AS как можно более просто и безболезненно.

Если вы достаточно хорошо знакомы дисковыми разделами, перейдите к разделу Выделение места для Red Hat Enterprise Linux AS , за дополнительной информацией о процедуре высвобождения дискового пространства для подготовки к установке Red Hat Enterprise Linux AS. В этом разделе также обсуждается схема разбиения разделов, используемая в системах Linux, разделение дискового пространства между разными операционными системами и связанные с этим вопросом темы.

Жесткие диски выполняют очень простую функцию —они хранят данные и безотказно выдают их по команде.

При обсуждении тем, таких как разбиение диска, важно немного узнать об используемом оборудовании. Однако, здесь легко запутаться в деталях. Поэтому ниже использована очень упрощенная схема диска, помогающая понять, что же собственно происходит при разбиении диска. На Рисунке F-1 , показан совершенно новый, неиспользованный диск.

Рисунок F-1. Неиспользуемый жёсткий диск

Не на что смотреть, не правда ли? Но если говорить о дисках на общем уровне, так это и будет. Теперь предположим, необходимо сохранить какие-то данные на этом диске. В таком состоянии как сейчас ничего не получится. Что-то надо сначала сделать.

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

Рисунок F-2. Диск с файловой системой

Как следует из Рисунка F-2 , организация порядка, определяющего файловую систему, выдвигает некоторые ограничения:

Небольшой процент свободного дискового пространства, тратится на хранение данных о файловой системе, и является дополнительными накладными расходами.

Файловая система делит остальное пространство на небольшие сегменты одинакового размера. В Linux, эти сегменты называются блоками . [1]

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

Также стоит заметить, что не существует одной, универсальной файловой системы. Как показано на Рисунке F-3 , на диске может располагаться одна из нескольких различных файловых систем. Как вы можете догадаться, различные файловые системы являются несовместимыми; то есть, операционная система, поддерживающая одну файловую систему (или набор родственных файловых систем), может не поддерживать другую. Однако последнее утверждение не является "железным" правилом. Например, Red Hat Enterprise Linux AS поддерживает большое количество файловых систем (включая обычно используемые в других операционных системах), что позволяет легко обмениваться данными между различными файловыми системами.

Рисунок F-3. Диск с другой файловой системой

Конечно, создание файловой системы на диске это только начало. Главной задачей все же является хранение и получение . данных. Взгляните на диск после того как на него были записаны несколько файлов.

Рисунок F-4. Диск с записанными на него данными

Как показано на Рисунке F-4 , 14 до этого незаполненных блоков теперь содержат какие-то данные. Однако, просто посмотрев на этот рисунок, нельзя определить точно, сколько файлов находятся на этом диске. Это может быть и всего один файл, или 14 файлов, так как каждый файл занимает как минимум один блок, а некоторые файлы занимают несколько блоков . Также необходимо заметить, что использованные блоки не обязательно должны находиться рядом; использованные и неиспользованные блоки могут перемежаться. Это также называется фрагментацией . Фрагментация может сказаться при попытке изменить размер существующего раздела.

Как и большинство компьютерных технологий, жесткие диски неоднократно менялись со времени своего появления. Самым главным изменением, конечно, является увеличение их объема. Объем увеличился не в физическом смысле, а как мера информационной емкости. Конечно, этот многократно увелившийся объем привел к изменению самого способа использования жестких дисков.

С ростом ёмкости дисков возник вопрос: насколько разумно использовать все форматированное пространство на диске как один большой раздел. Этот вопрос можно рассматривать с нескольких точек зрения: с философской или с технической. С философской точки зрения кажется, что чем больше места появляется на диске, тем больше на нем беспорядка. С технической точки зрения, некоторые файловые системы даже не рассчитаны на поддержку разделов, больших определенного предела. Или файловые системы могут поддерживать большие диски, но накладные расходы возникающие при этом, будут слишком большими.

Решением этой проблемы может стать разделение диска на разделы . К каждому разделу можно обращаться как к отдельному диску. Выполняется это с помощью дополнительной таблицы разделов .

Отображение на схемах в этой главе таблицы разделов отдельно от собственно диска, не является точным. В действительности, таблица разделов находится в самом начале диска, перед файловыми системами и данными пользователя. На этих схемах она отделена для ясности.

Рисунок F-5. Диск с таблицей разбиения разделов

Как показано на Рисунке F-5 , таблица разбиения разделов состоит из четырех записей. В каждой записи хранится информация, определяющая один раздел, таким образом, в таблице разбиения разделов нельзя определить больше четырех разделов.

Каждая запись таблицы разбиения разделов находятся важные параметры раздела:

Координаты начала и конца раздела на диске

Является ли раздел "активным"

Далее эти параметры будут рассмотрены более конкретно. Координаты начала и конца раздела определяют размер раздела и размещение его на диске. Флаг "активный" используется некоторыми загрузчиками операционных систем. Другими словами, операционная система будет загружена из раздела, помеченного как "активный".

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

Таблица F-1 , содержит список нескольких популярных типов разделов, вместе с соотвествующими им числовыми значениями.

Таблица F-1. Типы разделов

Тип разделаЗначениеТип разделаЗначение
Пустой00Novell Netware 38665
DOS 12-bit FAT01PIC/IX75
XENIX root02Старый MINIX80
XENIX usr03Linux/MINUX81
DOS 16-bit 04Linux swap82
Дополнительный05Linux native83
DOS 16-bit 06Linux extended85
OS/2 HPFS07Amoeba93
AIX08Amoeba BBT94
AIX загрузочный09BSD/386a5
OS/2 Boot Manager0aOpenBSDa6
Win95 FAT320bNEXTSTEPa7
Win95 FAT32 (LBA)0cBSDI fsb7
Win95 FAT16 (LBA)0eBSDI swapb8
Win95 Extended (LBA)0fSyrinxc7
Venix 8028640CP/Mdb
Novell51DOSe1
Microport52DOS R/Oe3
GNU HURD63DOS вторичныйf2
Novell Netware 28664BBTff

Познакомившись с этой таблицей, вы должно быть удивлены, как вообще можно использовать такую излишне сложную структуру. Обратитесь за примером к Рисунку F-6 .

Рисунок F-6. Диск с одним разделом

Во многих случаях, на диске создается только один раздел, занимающий весь диск, по сути повторяющий метод не использования разделов вовсе. В таком случае в таблице разделов будет только одна запись, указывающая на начало раздела.

Пусть этот раздел будет помечен как "DOS". Хотя в Таблице F-1 было приведено несколько различных типов разделов, выбранный тип хорошо подходит для дальнейшего объяснения. Это типичный вариант разбиения разделов для большинства недавно приобретенных компьютеров с предустановленной версией Microsoft Windows™.

Конечно, четырех разделов со временем может не хватить. С увеличением объемов жестких дисков, становится все более и более возможным, что при создании четырех разделов разумного размера, у вас на диске еще останется нераспределенное пространство. Должен быть какой-то способ для создания дополнительных разделов.

Введем понятие дополнительного раздела. Как вы могли заметить в Таблице F-1 , присутствует также тип раздела "Дополнительный". Этот тип раздела является базой для создания дополнительных разделов.

Когда создается раздел и его тип установлен как "Дополнительный," создается дополнительная таблица разбиения разделов. По сути, расширенный раздел похож на сам диск - в нем есть таблица разделов, указывающая на один или несколько разделов (теперь называемых логическими разделами , в противоположность четырем первичным разделам ), целиком находящихся в самом этом дополнительном разделе. На Рисунке F-7 показан диск с одним основным разделом и одним дополнительным, содержащим два логических раздела (и некоторым нераспределенным свободным местом).

Рисунок F-7. Диск с дополнительным разделом

Как вытекает из рисунка, существует различие между основными и логическими разделами - на может быть диске может быть до четырех основных разделов, но не существует какого-то определенного ограничения на число логических разделов. (Однако, в действительности, вероятно не очень разумно определять и использовать больше 12 логических разделов на одном жестком диске.)

До этого вы познакомились с разделами диска в общем, далее будет рассмотрено применений этих знаний при установке Red Hat Enterprise Linux AS.

Вы можете столкнутся с тремя различными состояниями вашего диска при попытке разбиения вашего диска на разделы:

Существует нераспределенное свободное место

Существует неиспользуемый раздел

Существует свободное место в используемом разделе

Ниже эти ситуации будут рассмотрены более подробно.

Пожалуйста, не забывайте, что следующие инструкции очень упрощены для большей ясности и не отражают точного расположения разделов, которое вы увидите при установке Linux AS.

В этой ситуации, уже созданные разделы не занимают весь жесткий диск, оставляя нераспределенным пространство, не относящееся ни к одному из разделов. На Рисунке F-8 показан пример такой ситуации.

Рисунок F-8. Жесткий диск с нераспределенным свободным пространством

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

В этом случае вы можете просто создать необходимые разделы, используя нераспределенное пространство. К сожалению, хотя эта ситуация очень простая, вряд ли вы её встретите (если только вы не приобрели новый диск только для Red Hat Enterprise Linux AS). Большинство предустановленных операционных систем настроены таким образом, что свободного места на диске не остается (смотрите Раздел Использование места, свободного на существующем разделе ).

Ниже будет рассмотрена более общая ситуация.

В этом случае, вероятно, у вас есть один или несколько разделов, которые вам больше не нужны. Возможно вы перестали использовать какую-то операционную систему, и раздел(ы) отведенные для нее, больше не понадобятся. На Рисунке F-9 показана такая ситуация.

Рисунок F-9. Диск с неиспользуемым разделом

Если вы столкнетесь с такой ситуацией, вы можете использовать место, размещенное для неиспользуемого раздела. Вам понадобится сначала удалить раздел, а затем на его месте создать соответствующий раздел(ы) Linux. Вы можете удалить раздел либо с помощью DOS-команды fdisk , либо при выполнении выборочной установки.

Это самая распространенная ситуация. И также, к сожалению, самая сложная. Основной проблемой является то, что даже если у вас есть свободное место, оно относится к существующему разделу. Если вы приобрели компьютер с предустановленным программным обеспечением, чаще всего на жестком диске будет всего один большой раздел, содержащий и операционную систему и данные.

Помимо добавления нового жесткого диска в вашу систему, у вас есть два варианта:

Разрушающее переразбиение диска на разделы

В этом случае вы удаляете один большой раздел и создайте несколько других, меньшего размера. Как вы понимаете, данные находившиеся в первоначальном разделе будут потеряны. Это значит, что необходимо выполнить полное резервное копирование. Рекомендуется сделать две резервных копии ваших данных, провести проверку копий (если это возможно в вашей программе резервного копирования), и попробовать прочитать данные с копии перед удалением раздела.

Если в этом разделе находилась какая-то операционная система, позже её придется переустановить. Будьте осторожны перед выполнением этого шага, так как с предустановленными системами могут не поставляться компакт-диски для установки этой системы. Лучше проверить, относится ли это к вашей системе, до того как вы разрушите ваш раздел и инсталляцию операционной системы.

Создав меньший раздел для вашего программного обеспечения, вы можете переустановить все программное обеспечение, восстановить свои данные, и продолжить выполнение установки Red Hat Enterprise Linux AS. На Рисунке F-10 показаны выполненные изменения.

Рисунок F-10. Диск, переразбитый с потерей данных

Как и показано на Рисунке F-10 , все данные находившиеся на этом разделе будут потеряны, если вы не выполните резервное копирование!

Не разрушающее переразбиение диска на разделы

Здесь вы сталкиваетесь с проблемой, которая кажется невыполнимой. Уменьшить большой раздел не потеряв файлов, находящихся на этом разделе. Многие считают этот метод достаточно надежным. Каким программным обеспечением вы можете воспользоваться для выполнения этой задачи? На рынке существует множество программных продуктов управления дисками. Проведите небольшое исследование чтобы найти решение, подходящее в вашей ситуации.

Тогда как не разрушающее переразбиение диска кажется довольно простым, оно состоит из нескольких этапов:

Сжатие существующих данных

Изменение размера существующего раздела

Создание одного или нескольких новых разделов

Далее эти этапы будут рассмотрены более детально.

Как показано на Рисунке F-11 , первым этапом является сжатие данных в существующем разделе. Этот шаг выполняется для того, чтобы перераспределить данные, собрав все свободное место в "конце" раздела.

Рисунок F-11. Сжатие данных на диске

Выполнение этого шага является обязательным. Без него, неудачное размещение ваших данных не позволит уменьшить раздел до требуемого размера. Также обратите внимание на то, что не все данные могут быть перемещены. Если вы столкнулись с этим ограничением (и это не дает вам уменьшить размер вашего раздела), вам придется переразбить диск без сохранения данных.

На Рисунке F-12 показан процесс изменения размера раздела. Хотя окончательный результат уменьшения раздела зависит от используемого программного обеспечения, в большинстве случаев освобожденное место используется для создания неформатированного раздела того же типа, что и исходный.

Рисунок F-12. Диск с измененным разделом

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

Как было упомянуто ранее, вам может потребоваться, а может и не потребоваться создавать новые разделы. Однако, если используемая вами программа не рассчитана на Linux, скорее всего вам понадобится удалить новый раздел, созданный в процессе уменьшения размера существующего раздела. На Рисунке F-13 показаны выполненные изменения.

Рисунок F-13. Диск с окончательным вариантом разбиения

Следующая информация относится только к компьютерам на базе x86.

Для удобства пользователей Red Hat Enterprise Linux AS, на первом компакт-диске Red Hat Linux/x86 записана утилита fips , расположенная в каталоге dosutils . Это свободно распространяемая программа которая может изменять размеры разделов FAT (File Allocation Table).

Предупреждение

Многие успешно пользуются fips для изменения разделов на своих жестких дисках. Однако, учитывая характер операций, выполняемых fips и большими отличиями в программных и аппаратных конфигурациях, где она может быть запущена, Red Hat не может гарантировать, что fips будет работать в вашей системе правильно. Именно поэтому, поддержка при установке не распространяется на утилиту fips . Используйте её на свой страх и риск.

Если вы решили переразбить ваш диск с помощью fips , жизненно важно сделать следующее:

Выполнить резервное копирование — Сделать две копии всех важных данных на вашем компьютере. Эти копии необходимо сделать на внешние устройства хранения (например, ленту или дискету), сделав их, убедитесь в том, что они читаются, перед тем как продолжить.

Прочитайте документацию — Полностью прочитайте документацию fips , размещенную в подкаталоге dosutils/fipsdocs на Red Hat Linux/x86 CD 1.

Если вы решите использовать fips , помните, что после работы fips оставляет два раздела: один, размер которого, вы уменьшали, и другой, созданный fips на освобожденном месте. Если вашей задачей является установка Red Hat Enterprise Linux AS, вы должны удалить новый раздел, либо с помощью команды fdisk в вашей операционной системе, либо при определнии разделов во время выборочной установки.

Linux обращается к дисковым разделам, используя комбинации букв и цифр, что может смущать вас, особенно если вы представляете диски как "диск C", "диск D". В мире DOS/Windows, разделы именуются следующим образом:

Тип каждого раздела проверяется на совместимость с системой DOS/Windows.

Если раздел совместим с ними, ему присваивается "буква диска". Буквы дисков начинаются с "C" и продолжаются по алфавиту, в зависимости от числа соответствующих разделов.

Затем буква диска используется для ссылки на раздел и файловую систему, содержащуюся в этом разделе.

В Red Hat Enterprise Linux AS используется более гибкая и информативная схема, чем предлагаемая другими операционными системами. Схема именования основана на именовании файлов, где названия имеют следующий вид:

Ниже расшифрована эта схема именования разделов:

Эта строка представляет собой название каталога, в котором находятся файлы всех устройств. Так как разделы располагаются на жестких дисках и жесткие диски это устройства, файлы, представляющие все возможные разделы располагаются в /dev/ .

Первые две буквы имени раздела определяют тип устройства, на котором расположен раздел. Обычно это будет либо hd (для IDE-дисков) или sd (для SCSI дисков).

Этот символ указывает конкретное устройство, на котором находится раздел. Например, /dev/hda (первый IDE жесткий диск ) или /dev/sdb (второй SCSI диск).

Последнее число определяет раздел. Первые четыре (основных или дополнительных) раздела нумеруются от 1 до 4 . Номера логических разделов начинаются с 5 . Так, например, /dev/hda3 третий основной или дополнительный раздел на первом IDE жестком диске, а /dev/sdb6 второй логический раздел на втором SCSI диске.

В этой схеме именования не определяется тип раздела; в отличие от DOS/Windows, в системе Red Hat Enterprise Linux AS все разделы могут быть идентифицированы. Конечно, это не означает что Red Hat Enterprise Linux AS может обращаться к данным на разделе всех возможных типов, но в большинстве случаев все же возможно получить доступ к данным другой операционной системы.

Возьмите эту информацию на заметку; это поможет вам понять как создавать разделы, необходимые для установки и работы Red Hat Enterprise Linux AS.

Если разделы системы Red Hat Enterprise Linux AS будут находиться на одном диске с разделами, используемыми другими операционными системами, скорее всего это не вызвовет никаких проблем. Однако, существуют определенные комбинации Linux и других операционных систем, которые требуют особого внимания. Информацию о создании дисковых разделов, совместимых с другими операционными системами вы можете найти в различных HOWTO и Mini-HOWTO, расположенных на компакт-диске с документацией Red Hat Enterprise Linux AS в каталогах HOWTO и HOWTO/mini . В частности, очень полезными для вас будут документы, имена которых начинаются со строки Linux+ .

Люди, начинающие знакомство с Linux часто путаются в том, как Linux использует разделы и обращается к ним. В DOS/Windows, это относительно несложно: Каждый раздел имеет "букву диска." Вы можете использовать соответствующую букву диска для ссылки на файлы и каталоги, расположенные на этом разделе.

Это полностью отличается от того, как Linux ведет себя с разделами, и как вообще представлено дисковое хранилище. Основным отличием является то, что каждый раздел используется как часть одного хранилища, обеспечивающего один набор файлов и каталогов. Это реализуется с помощью операции связывания раздела с каким-то каталогом, которая также называется подключением диска (монтированием) . Подключение диска делает его содержимое доступным в указанном каталоге (известном также как точка подключения (mount point) ).

Например, если раздел /dev/hda5 был смонтирован в /usr , это будет означать что все файлы и каталоги ниже /usr будут физически располагаться на /dev/hda5 . Таким образом, файл /usr/share/doc/FAQ/txt/Linux-FAQ будет находиться на диске /dev/hda5 , тогда как /etc/X11/gdm/Sessions/Gnome будет расположен на другом диске.

В продолжение этого примера, также возможно сделать, так чтобы один или несколько каталогов ниже /usr представляли собой точки подключения других разделов. Например, раздел (пусть это будет /dev/hda7 ) может быть подключен в точку /usr/local , таким образом, файл /usr/local/man/whatis будет располагаться на разделе /dev/hda7 , а не на /dev/hda5 .

На этом этапе подготовки к установке Red Hat Enterprise Linux AS вам необходимо определиться с числом и количеством разделов, которые будут использоватья вашей новой операционной системой. Вопрос "сколько разделов создавать" постоянно поднимается в спорах в Linux-сообществе, и конца этим спорам не видно, поэтому лучше будет сказать, что число вариантов разбиения диска равно числу людей, обсуждающих эту тему.

Не забывая об этом, придерживайтесь следующей рекомендации: если вы не видите причин сделать по-другому, создайте как минимум следующие разделы:

A swap partition — Раздел подкачки используется для работы виртуальной памяти. Другими словами, данные попадают в раздел подкачки (swap), когда вашей системе не хватает оперативной памяти для обработки данных. Вы должны создать раздел подкачки (swap) для корректной работы Red Hat Enterprise Linux AS. Минимальный размер вашего раздела подкачки должен равняться максимальной из двух величин: удвоенного размера оперативной памяти и 32 MB.

Раздел /boot (корневой) — Раздел подключенный в точку /boot , содержит ядро операционной системы (которое и загружает Red Hat Enterprise Linux AS), а также файлы используемые в процессе загрузки.

Убедитесь в том, что вы прочитали раздел Последнее замечание: Использование GRUB или LILO — информация, изложенная там, также касается раздела /boot !

Ввиду ограничений BIOS многих компьютеров, есть смысл создавать небольшой раздел для хранения этих файлов. Для большинства пользователей раздела размером в 32 МБ вполне достаточно.

Корневой раздел ( / ) — На корневом разделе находится / (корневой каталог). В этом варианте разбиения диска все файлы (за исключением тех, что находятся в разделе /boot ) расположены в корневом разделе. Именно поэтому, в ваших интересах сделать размер вашего корневого раздела максимальным. Корневой раздел размером 1.0 ГБ позволит вам выполнить установку Advanced Server (при этом останется очень мало свободного места), тогда как корневой раздел в 3.2 ГБ позволит вам установить все пакеты. Однозначно, чем больше места вы выделите под корневой раздел, тем лучше.

Конкретные рекомендации относительно подходящих размеров для различных разделов Red Hat Enterprise Linux AS можно найти в разделе Какой тип инсталляции вам больше подходит? в Главе 1 .

GRUB и LILO наиболее часто используемые методы загрузки системы Red Hat Enterprise Linux AS на платформе x86. Являясь загрузчиками операционных систем, они находятся "вне" какой-либо операционной системы, используя только Основную Систему Ввода Вывода (Basic I/O System (или BIOS) ), встроенную в сам компьютер. В этом разделе описывается взаимодействие GRUB и LILO с BIOS компьютера, эта информация касается только компьютеров на платформе x86.

GRUB и LILO зависят от некоторых ограничений, накладываемых BIOS в большинстве x86 компьютеров. В частности, некоторые BIOS не могут обращаться более чем к двум дискам, некоторые не могут обращаться к данным за границей в 1023 цилиндра. Заметьте, что большинство современных BIOS не имеют таких ограничений, но все-таки это не универсально.

Все данные, к которым должен обращаться GRUB или LILO, должны быть доступны во время загрузки (включая ядро Linux) в каталоге /boot . Если вы выполните рекомендации по разбиению диска, приведенные выше, или проведете установку Advanced Server, каталог /boot будет находиться в маленьком, отдельном разделе. Также он может располагаться в корневом разделе ( / ). В обоих случаях, раздел, в котором располагается /boot должен удовлетворять следующим требованиям, если вы используете для загрузки вашей системы Red Hat Enterprise Linux AS загрузчк GRUB или LILO:

На первых двух IDE-дисках

Если у вас два IDE (или EIDE) диска, /boot должен располагаться на первом из них. Обратите внимание, что ограничение на два диска касается также любых IDE CD-ROM приводов на вашем первичном IDE-контроллере. Поэтому, если у вас только один IDE жесткий диск, и один IDE CD-ROM на первичном контроллере, /boot должен располагаться только на первом жестком диске, даже если на вторичном IDE контроллере установлены другие диски.

На первом IDE или первом SCSI диске

Если у вас один IDE (или EIDE) диск и один или более SCSI дисков, /boot должен располагаться либо на IDE-диске, либо на SCSI-диске с номером (ID) 0. С другими SCSI номерами это не будет работать.

На первых двух SCSI-дисках

Если у вас установлены только SCSI жесткие диски, /boot должен располагаться на диске с номером 0 или 1. С другими SCSI номерами это не будет работать.

Раздел полностью должен располагаться в рамках 1023 цилиндров

Вне зависимости от используемой конфигурации, раздел, содержащий каталог /boot должен располагаться целиком в рамках 1023 цилиндров. Если раздел, содержащий /boot пересекает границу в 1023 цилиндра, вы можете столкнутся с ситуацией когда GRUB или LILO начнёт работать нормально (так как вся необходимая информация находится ниже 1023 цилиндра), но затем, при попытке запустить ядро произойдет сбой, если ядро располагалось дальше 1023 цилиндра.

Как было упомянуто ранее, большинство современных BIOS позволяют загрузчику (GRUB и LILO) работать с конфигурациями, не удовлетворяющими описанным выше требованиям. Помимо этого, в случаях, когда компьютер не удовлетворяет приведенным требованиям, для запуска системы Linux могут использоваться разные специфические возможности GRUB и LILO. Однако, ввиду большого количества переменных, влияющих на исход дела, Red Hat не может поддерживать такие попытки.

Disk Druid , также как установка Advanced Server, также учитывает влияние всех этих, связанных с BIOS, ограничений.

Замечания

Блоки в действительности имеют постоянный размер, в отличие от приведенных на иллюстрациях. Также учтите, что средний диск состоит из тысяч таких блоков. Все эти небольшие неточности были допущены ради доступности изложения.

Назад Начало Вперед
Проблемы, возникающие после установки Вверх Диски с драйверами

Работа с HDD на уровне LBA используя возможности функций BIOS INT 13(42/43).

Работа c HDD на уровне LBA используя возможности функций BIOS

INT 13(42/43).

С помощью простенькой программы (рис. 1) мы можем прочитать в оперативную память (в буфер с адреса 240) любой сектор любого жесткого диска ( MBR или GPT), но адресация порций файлов производится с помощью кластеров, а программа использует адресацию LBA. Поэтому нужно уметь переводить номер нужного кластера в номер начального сектора этого кластера и знать размер кластера.

Разделы FAT12/16 состоят из системных областей (Boot- сектор, FAT1, FAT2, каталог ) и области данных (состоящей из кластеров пронумерованных с номера 2 ) .

Разделы FAT 32 состоят из системных областей ( область резервных секторов, содержащая Boot- сектор и FSINFO, и FAT1, FAT2), и области данных (состоящей из кластеров пронумерованных с номера 2 ) . Корневой каталог в FAT32 расположен в области данных.

Разделы NTFS состоят из кластеров пронумерованных с номера 0 , вся информация в разделе (метафайлы, каталоги, программы, данные . ) — все хранится в виде файлов.

Принципы организации хранения информации в виде файлов в разделах FAT :

Принципы организации хранения информации в виде файлов в разделах NTFS:

П ример пересчета номера кластера (5 кластер) в номер сектора (размер кластера 2 сектора) для FAT32 показан на рис. 2 :

Размер области резервных секторов, содержащей Boot- сектор и FSINFO, и размер FAT1, FAT2 (в секторах) указан в Boot- секторе (номер начального кластера корневого каталога тоже указан в Boot- секторе), а адрес Boot- сектора (начальный сектор раздела) указан в соответствующей строке таблицы разделов в MBR. Используя эту информацию легко найти начальный сектор области данных раздела (номер начального сектора кластера 2 (на рис. 2 это сектор 104). Допустим нам нужен номер нач. сектора 5-го кластера, который является начальным кластером файла корневого каталога.

Номер нач. сектора 5-го кластера = (5 - 2) х 2 + 104 = 10А. Из номера искомого кластера вычитаем 2 т. к. нумерация кластеров начинается с номера 2. Полученное число умножаем на количество секторов в кластере (2) и результат прибавляем к номеру начального сектора области данных раздела (104). Получили номер начального сектора 5-го кластера равный 10А.

Пример пересчета номера кластера (5 кластер) в номер сектора (размер кластера 2 сектора) для раздела NTFS:

А дрес Boot- сектора (начальный сектор раздела 100) указан в соответствующей строке таблицы разделов в MBR.

В разделе NTFS в LBA 100 находится Boot-сектор раздела, а в нем по адресу 30 от начала 8 байтов содержат номер начального кластера файла $MFT (например равный 5 ) .

Номер нач. сектора 5-го кластера = (5 х 2) + 100 = 10А. Номер нужного кластера умножаем на размер кластера (2) и полученный результат прибавляем к номеру начального сектора раздела (100).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *