Мы — долго запрягаем, быстро ездим, и сильно тормозим.

RFC
Программирование
FreeBSD
  IPFW
  Документация на Unix
  UFS2
  MPD
man
EXIM


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. Данная информация несёт ознакомительный характер, поэтому не расписывал ёё подробно.



Ссылка на обсуждение: Incorrect URL.

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

оценить статью:

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

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


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 23 чел.
За последние 30 мин было: 84 человек
За сегодня было
6018 показов,
1157 уникальных IP
 

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1087 секунд
Из них PHP: 57%; SQL: 43%; Число SQL-запросов: 49 шт.
Исходный размер: 58498; Сжатая: 13379