Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> документация —> FreeBSD —> UFS2

Как устроена UFS2

Автор: dikens3.


1. Суперблок.
2. Группы цилиндров.
3. Дескрипторы групп цилиндров.

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

Рассмотрим создание файловой системы UFS2:
# newfs -L NameVolume -O2 -U -n /dev/ad1

/dev/ad1: 2014.0MB (4124736 sectors) block size 16384, fragment size 2048
        using 11 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
        with soft updates
super-block backups (for fsck -b #) at:
 160, 376512, 752864, 1129216, 1505568, 1881920, 2258272,
 2634624, 3010976, 3387328, 3763680

Объём созданного раздела составляет 2014.0 Мбайт и содержит 4124736 секторов, размер блока равен 16384 байта, а размер фрагмента 2048 байт. В созданном разделе будут использоваться 11 групп цилиндров и объём информации, хранящийся в каждой группе, не более  183.77 Мбайт. Каждая группа цилиндров (Возможно кроме последней группы) содержит 11761 блок и 23552 индексных узла.(По умолчанию размер блока равен 8 фрагментам, а значит, в 11761 блоке содержится 94088 фрагментов.)
Soft Updates включены.
Копии суперблока будут находиться в секторах 160, 376512, 752864, 1129216, 1505568, 1881920, 2258272, 2634624, 3010976, 3387328, 3763680.(В каждой группе по одной резервной копии суперблока)

Воспользуемся TSK (/usr/ports/sysutils/sleuthkit):
# fsstat -f ufs /dev/ad1 | head -n 30

FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: UFS 2 		- Тип файловой системы
Last Written: Thu Oct 18 23:13:23 2007	- Время последнего монтирования
Last Mount Point: /mnt/target		- Куда последний раз была смонтирована
Volume Name: NameVolume		        - Имя тома
System UID: 0
Flags:  Soft Dependencies		- Включён SoftUpdate

METADATA INFORMATION
--------------------------------------------
Inode Range: 0259071			- Общее количество индексных узлов. (диапазон)
Root Directory: 2			- Где находится корневой каталог
Num of Avail Inodes: 259069		- Количество свободных индексных узлов
Num of Directories: 1			- Количество директорий на данный момент

CONTENT INFORMATION
--------------------------------------------
Fragment Range: 0 - 1031183		- Общее количество фрагментов. (диапазон)
Block Size: 16384			- Размер блока (Состоит из 8 фрагментов)
Fragment Size: 2048			- Размер фрагмента (1/8 часть блока)
Num of Avail Full Blocks: 124821	- Количество свободных блоков
Num of Avail Fragments: 14		- Количество свободных фрагментов

CYLINDER GROUP INFORMATION
--------------------------------------------
Number of Cylinder Groups: 11		- Количество групп цилиндров
Inodes per group: 23552			- Количество индексных узлов в каждой группе
Fragments per group: 94088		- Количество фрагментов в каждой группе

Исходя из названия, суперблок, можно предположить, что он занимает  1 блок. В данном примере он равен 16384 байта и состоит из 8 фрагментов или 32 секторов. В UFS2 суперблок всегда находится в секторе 128.

Группы цилиндров.
Система UFS делится на секции, называемые группами цилиндров. Каждая группа цилиндров содержит более подробную информацию о своей группе.

Вот как выглядит нулевая группа:
# fsstat -f ufs /dev/ad1 | fgrep -A 22 "Group 0:"

Group 0:
  Last Written: Fri Oct 19 23:28:15 2007 - Время последней записи
  Inode Range: 023551		 - Диапазон/количество индексных узлов.
  Fragment Range: 094087		 - Диапазон/количество фрагментов
    Boot Block: 03			 - Загрузочный код.
    Super Block: 411			 - Резервная копия суперблока.
    Super Block: 4047		 - Резервная копия суперблока.
    Group Desc: 4855			 - Дескриптор группы. (диапазон)
    Inode Table: 562999		 - Таблица индексных узлов. (диапазон)
    Data Fragments: 300094087	 - Диапазон фрагментов для записи данных
  Global Summary (from the superblock summary area):	Данные от суперблока:
    Num of Dirs: 1			 - Количество директорий на данный момент
    Num of Avail Blocks: 11384		 - Количество свободных блоков
    Num of Avail Inodes: 23549		 - Количество свободных индексных узлов
    Num of Avail Frags: 14		 - Количество свободных фрагментов
  Local Summary (from the group descriptor):		Данные от дескриптора группы:
    Num of Dirs: 1			 - Количество директорий на данный момент
    Num of Avail Blocks: 11384		 - Количество свободных блоков
    Num of Avail Inodes: 23549		 - Количество свободных индексных узлов
    Num of Avail Frags: 14		 - Количество свободных фрагментов
    Last Block Allocated: 0		 - Последний выделенный блок
    Last Fragment Allocated: 0		 - Последний выделенный фрагмент
    Last Inode Allocated: 0		 - Последний выделенный индексный узел

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

Примеры:
1. Список файлов и директорий?
Корневой каталог всегда находится в индексном узле 2, посмотрим, что там:
# fls -f ufs -a /dev/ad1 2

d/d 2:  .
d/d 2:  ..
d/d 188416:     dir1
r/r 3:  foremost
r/r 4:  file1.pdf
r/r 5:  file2.pdf
r/r 6:  file3.pdf
r/r 7:  file4.pdf
r/r 8:  file5.pdf
r/r 9:  file6.pdf
d/d 164864:     dir2

2. Список файлов и директорий в dir1?
# fls -f ufs /dev/ad1 188416

d/d 188417:     22
r/r 188418:     file2.pdf

3. Сколько блоков/фрагментов занимает file6.pdf?
# istat -f ufs /dev/ad1 9

inode: 9
Allocated
Group: 0
uid / gid: 1001 / 1001
mode: -rw-r--r--
size: 2328268
num of links: 1

Inode Times:
Accessed:       Fri Oct 19 22:22:23 2007
File Modified:  Mon Sep 18 23:29:07 2006
Inode Modified: Sat Oct 20 16:11:57 2007

Direct Blocks:
23824 23825 23826 23827 23828 23829 23830 23831
23832 23833 23834 23835 23836 23837 23838 23839
23840 23841 23842 23843 23844 23845 23846 23847
…
[skip]
…

Indirect Blocks:
3144 3145 3146 3147 3148 3149 3150 3151

Indirect Blocks - блоки косвенной адресации, т.е. содержат указатели на другие блоки. (В нашем случае задействован только один)

P.S. Данная информация несёт ознакомительный характер, поэтому не расписывал ёё подробно.



размещено: 2007-10-20,
последнее обновление: 2007-10-20,
автор: dikens3


Caparzo, 2009-08-07 в 6:08:32

Уважаемый, dikens3!
Приведённая Вами информация показывает файловую систему изнутри. Вы помогли сложное, сделать доступным и простым для понимания. С понятием блока/фрагмента меня познакомила книга Лукаса и Вы. Спасибо.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0341 секунд
Из них PHP: 35%; SQL: 65%; Число SQL-запросов: 49 шт.
Исходный размер: 25127; Сжатая: 6435