Что такое файловые системы и как они работают часть вторая, много умных слов далее…

Основные понятия:

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

Журналирование (journal) – запись всех изменений в файловой системы и мета данных тоесть ведение журнала с целью уменьшению шанса потери изменений файлов которые вы проводите в файловой системе.

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

Суперблок (superblock) — главный элемент файловой системы, блок содержит общую информацию о фс, находится в 1024 байтах от начала раздела. Раздел с поврежденным супер блоком нельзя примонтировать. В каждой группе блоков он дублируется что позволяет восстановить его после сбоев.

Сектор диска (sector)— минимальная адресуемая единица хранения информации на дисковых запоминающих устройствах.

Раздел (partition) — часть долговременной памяти жёсткого диска, выделенная для удобства работы, и состоящая из смежных блоков.

Главная загрузочная запись (MBR) — это небольшой фрагмент исполняемого кода, таблица разделов (partition table), необходимые для последующей загрузки операционной системы и расположенные в первых физических секторах на жёстком диске или другом устройстве.

Загрузочная запись (Boot Record) — фрагмент исполняемого кода который находится в первом секторе активного раздела (помеченый как загрузочный).

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

Как это работает?

Физически весь жесткий диск разбит на секторы размером 512 байт.

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

Первый сектор (тоесть первые 512 байт) диска считаются главной загрузочной областью эта область содержит главную загрузочную запись (MBR) которая загружается первой в ОЗУ с HDD и обеспечивает опознание логических разделов (partition table) которые есть на диске, определяет активный раздел (помеченый как загрузочный).  Когда активный раздел найден, программа считывает в оперативную память первый сектор активного раздела и загружает из него загрузочную запись тоесть просто (Boot Record) которая продолжит запуск операционной системы.

Загрузчики операционных систем Linux например grub обычно состоят из двух частей:

1 загрузчик первого этапа или первичного загрузчика, который имеет достаточно малый размер чтобы разместиться в MBR.
2 большего по объему вторичного загрузчика, который может храниться уже где угодно, обычно в разделе содержащем корневую файловую систему (/) или (/boot).

Загрузчик первого этапа может быть размещен как в главном загрузочном секторе диска MBR, так и в загрузочном секторе активного раздела Boot Record. У вас есть выбор при установке ОС.

Суперблок это первый блок каждого из разделов он имеет размер 1024 байт который находится в 1024 байтах от начала раздела ext2 ext3 ext4 и является начальной точкой файловой системы. При загрузке ОС он считывается в озу и все изменения файловой системы происходят в его копии которая находится в озу а на диск происходит запись только периодически. Это повышает производительность системы, что бы каждый раз не дергать диск.

В суперблоке определяется размер файловой системы, тип файловой системы, UUID файловой системы, размер массива индексных дескрипторовколичество свободных блоков, количество свободных индексных дескрипторов, флаги, размер логического блока файловой системы, список номеров свободных индексных дескрипторов список адресов свободных блоков, etc.

Остальные сектора раздела объединены в логические блоки (disk allocation blocks) фиксированного размера, кратные размеру сектора обычно 1, 2, 4, 8Кб. Размер блока задается только при создании файловой системы на разделе диска. Меньший размер блока позволяет сэкономить место на жёстком диске, но также ограничивает максимальный размер файловой системы. Все блоки имеют порядковые номера с целью уменьшения фрагментации и количества перемещений головок жёсткого диска при чтении больших массивов данных.

Каждому файлу соответствует один индексный дескриптор (inode), который идентифицируется своим порядковым номером индексом файла. В индексном дескрипторе хранятся метаданные файла — права на файл и место расположения на диске блоков данных этого файла, etc.

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

ФС в Linux начинается с корня (/)
ФС имеет древовидную структуру, смотрите статью >> Основные каталоги в OS Linux

Справочная информация:

Структура главного загрузочного сектора:

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

Каждый 16-байтный блок, описывающий один раздел, имеет следующую структуру:

Смещение Длина Описание
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 Количество секторов раздела

Примеры:

вывод MBR

00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............|00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..|00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u|00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..|00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........|00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................|00000060 00 00 00 00 ff fa eb 07 f6 c2 80 75 02 b2 80 ea |...........u....|00000070 74 7c 00 00 31 c0 8e d8 8e d0 bc 00 20 fb a0 64 |t|..1....... ..d|00000080 7c 3c ff 74 02 88 c2 52 be 80 7d e8 1c 01 be 05 ||<.t...R..}.....|00000090 7c f6 c2 80 74 48 b4 41 bb aa 55 cd 13 5a 52 72 ||...tH.A..U..ZRr|000000a0 3d 81 fb 55 aa 75 37 83 e1 01 74 32 31 c0 89 44 |=..U.u7...t21..D|000000b0 04 40 88 44 ff 89 44 02 c7 04 10 00 66 8b 1e 5c |.@.D..D.....f..\|000000c0 7c 66 89 5c 08 66 8b 1e 60 7c 66 89 5c 0c c7 44 ||f.\.f..`|f.\..D|000000d0 06 00 70 b4 42 cd 13 72 05 bb 00 70 eb 76 b4 08 |..p.B..r...p.v..|000000e0 cd 13 73 0d f6 c2 80 0f 84 d8 00 be 8b 7d e9 82 |..s..........}..|000000f0 00 66 0f b6 c6 88 64 ff 40 66 89 44 04 0f b6 d1 |.f....d.@f.D....|00000100 c1 e2 02 88 e8 88 f4 40 89 44 08 0f b6 c2 c0 e8 |.......@.D......|00000110 02 66 89 04 66 a1 60 7c 66 09 c0 75 4e 66 a1 5c |.f..f.`|f..uNf.\|00000120 7c 66 31 d2 66 f7 34 88 d1 31 d2 66 f7 74 04 3b ||f1.f.4..1.f.t.;|00000130 44 08 7d 37 fe c1 88 c5 30 c0 c1 e8 02 08 c1 88 |D.}7....0.......|00000140 d0 5a 88 c6 bb 00 70 8e c3 31 db b8 01 02 cd 13 |.Z....p..1......|00000150 72 1e 8c c3 60 1e b9 00 01 8e db 31 f6 bf 00 80 |r...`......1....|00000160 8e c6 fc f3 a5 1f 61 ff 26 5a 7c be 86 7d eb 03 |......a.&Z|..}..|00000170 be 95 7d e8 34 00 be 9a 7d e8 2e 00 cd 18 eb fe |..}.4...}.......|00000180 47 52 55 42 20 00 47 65 6f 6d 00 48 61 72 64 20 |GRUB .Geom.Hard |00000190 44 69 73 6b 00 52 65 61 64 00 20 45 72 72 6f 72 |Disk.Read. Error|000001a0 0d 0a 00 bb 01 00 b4 0e cd 10 ac 3c 00 75 f4 c3 |...........<.u..|000001b0 00 00 00 00 00 00 00 00 f3 10 0a 00 00 00 80 20 |............... |000001c0 21 00 fd fe ff ff 00 08 00 00 00 f8 2c 01 00 fe |!...........,...|000001d0 ff ff 05 fe ff ff fe 07 2d 01 02 a8 ec 22 00 00 |........-...."..|000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|00000200
вывод inode раздела

/dev/sdc1 3670016 11 3670005 1% /mnt

размер файловой системы

/dev/sdc1 56G 180M 53G 1% /mnt

 

  Один комментарий в “Файловые системы и разделы в Linux. часть №2”

  1. Классно описано ) Все по пунктам, как надо! Спасибо.

     

 Оставить комментарий

(обязательно)

(обязательно)

   
Copyright © 2012. Linuxguru.ru