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

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: 0 – 259071 - Общее количество индексных узлов. (диапазон)

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: 0 – 23551 - Диапазон/количество индексных узлов.

Fragment Range: 0 – 94087 - Диапазон/количество фрагментов

Boot Block: 0 – 3 - Загрузочный код.

Super Block: 4 – 11 - Резервная копия суперблока.

Super Block: 40 – 47 - Резервная копия суперблока.

Group Desc: 48 – 55 - Дескриптор группы. (диапазон)

Inode Table: 56 – 2999 - Таблица индексных узлов. (диапазон)

Data Fragments: 3000 – 94087 - Диапазон фрагментов для записи данных

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 - блоки косвенной адресации, т.е. содержат указатели на другие блоки. (В нашем случае задействован только один)

Обновлено: 12.03.2015