Разработка файловой системы linux

Создание Файловых систем в Linux

Мы уже делали обзор популярных Файловых систем в Linux и разобрались как они работают. Для того что бы размещать файлы на жестком диске или другом носителе например флешке нам нужно как минимум проделать несколько этапов а именно — разбить диск на разделы (создать таблицу разделов) и создать файловую систему (формотирование) с последующим монтированием в систему.

Разбитие диска на разделы и создание ФС в Linux делается при помощи специальных утилит — cfdisk fdisk sfdisk mke2fs mkfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkswap partimage parted указывая им в качестве аргумента конкретное блочное устройство (/dev/***).

Блочные устройства HDD вида /dev/sda можно использовать целиком для единственной ФС, но это редко применяется на практике. Лучше разделить все пространство на разделы меньшего размера и использовать их под разные задачи.

Посмотреть какие есть блочные устройства в системе можно так

root@debian ~ # ls -l /dev/sd*
brw-rw—- 1 root disk 8, 0 Мар 11 19:03 /dev/sda
brw-rw—- 1 root disk 8, 1 Мар 10 21:23 /dev/sda1
brw-rw—- 1 root disk 8, 2 Мар 10 21:23 /dev/sda2
brw-rw—- 1 root disk 8, 5 Мар 10 21:23 /dev/sda5
brw-rw—- 1 root disk 8, 16 Мар 10 22:31 /dev/sdb
brw-rw—- 1 root disk 8, 17 Мар 10 21:23 /dev/sdb1
brw-rw—- 1 root disk 8, 18 Мар 10 21:23 /dev/sdb2
brw-rw—- 1 root disk 8, 21 Мар 10 21:23 /dev/sdb5
brw-rw—- 1 root disk 8, 32 Мар 11 19:05 /dev/sdc
brw-rw—- 1 root disk 8, 33 Мар 11 17:59 /dev/sdc1

b — блочное устройство, судя по выводу у нас 3 физических диска.

Вывестии информацию о жестком диске можно так

hdparm -I /dev/sdХ
smartctl -a /dev/sdХ

Рассмотрим на примере диска /dev/sda

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

Посмотреть таблицу разделов диска можно при помощи fdisk (p вывести таблицу разделов диска).

root@debian ~ # fdisk /dev/sdc

Disk /dev/sdc: 60.0 GB, 60022480896 bytes
255 heads, 63 sectors/track, 7297 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xdf87df87

Device Boot Start End Blocks Id System
/dev/sdc1 * 1 7297 58613121 83 Linux

root@debian ~ # fdisk -l /dev/sdc

Disk /dev/sdc: 60.0 GB, 60022480896 bytes
255 heads, 63 sectors/track, 7297 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xdf87df87

Читайте также:  Линукс на usb hdd

Device Boot Start End Blocks Id System
/dev/sdc1 * 1 7297 58613121 83 Linux

Давайте переразобьем диск /dev/sdc (у меня это пустой ssd диск)
Внимание! Все данные на диске будут удалены =)

Вариант при помощи fdisk

a переключение флага загрузки
b редактирование метки диска bsd
c переключение флага dos-совместимости
d удаление раздела
l список известных типов файловых систем
m вывод этого меню
n добавление нового раздела
o создание новой пустой таблицы разделов DOS
p вывод таблицы разделов
q выход без сохранения изменений
s создание новой чистой метки диска Sun
t изменение id системы раздела
u изменение единиц измерения экрана/содержимого
v проверка таблицы разделов
w запись таблицы разделов на диск и выход
x дополнительная функциональность (только для экспертов)

Command (m for help): d
Command (m for help): 1
Command (m for help): w

я выбрал удаление раздела d, раздел 1 и записал изменения на диск, теперь он не содержит разделы.

Command (m for help): n
p primary partition (1-4)
Partition number (1-4): 1
First cylinder (1-7297, default 1):1
Last cylinder, +cylinders or +size (1-7297, default 7297): +10G
Command (m for help): w

Мы создали раздел размером 10гб, если вывод аналогичен то все получилось

root@debian ~ # fdisk -l /dev/sdc

Disk /dev/sdc: 60.0 GB, 60022480896 bytes
255 heads, 63 sectors/track, 7297 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xdf87df87

Device Boot Start End Blocks Id System
/dev/sdc1 1 1306 10490413+ 83 Linux

Таким макаром можно делать остальные разделы, по умолчанию тип фс Linux если нужен другой то

Command (m for help): t
Hex code (type L to list codes): ХХХ — номер.
Command (m for help): w
Command (m for help): l

Вариант при помощи cfdisk

Тут все еще проще визуально все понятно, например:

для создания раздела выберите New
для удаления delete
по окончанию работы нажмите Write что бы применить изменения.

Are you sure you want to write the partition table to disk? (yes or no): yes — пишите yes.

Ну и для полного счастья осталось только отформатировать созданные ранее разделы.

Формирование диска

Формотировать и создовать новую фс будем при помощи утилиты mkfs, можно посмотреть что у нас есть

root@debian ~ # mkfsmkfs mkfs.cramfs mkfs.ext3 mkfs.ext4devmkfs.bfs mkfs.ext2 mkfs.ext4 mkfs.minix

Файловые системы типо XFS команда mkfs не поддерживает для этого надо поставить пакет xfsprogs.

Будем форматировать /dev/sdc1 в ext4.

root@debian ~ # mkfs.ext4 /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3670016 inodes, 14653280 blocks
732664 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
448 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424

Читайте также:  Настройка xdebug phpstorm linux

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

SWAP делается так (тип созданного раздела должен быть специальным 82 Linux swap)

mkswap /dev/sdc5
swapon /dev/sdc5

root@debian ~ # mkswap /dev/sdc5
Setting up swapspace version 1, size = 9783548 KiB
no label, UUID=fe193ed2-6e46-45f0-82ee-9fc6b652a6b5
root@debian ~ #
root@debian ~ # swapon /dev/sdc5
root@debian ~ #
root@debian ~ # swapon -s
Filename Type Size Used Priority
/dev/sdc5 partition 9783544 0 -1
root@debian ~ #

Источник

7.5.4. Реализация файловой системы Linux

Изначально в операционной системе Linux использовалась файловая система опе­рационной системы MINIX. Однако в системе MINIX длина имен файлов ограни­чивалась 14 символами (для совместимости с UNIX Version 7), а максимальный размер файла был равен 64 Мбайт. Поэтому у разработчиков операционной систе­мы Linux практически сразу появился интерес к усовершенствованию файловой системы. Первым шагом вперед стала файловая система Ext, в которой длина имен файлов была увеличена до 255 символов, а размер файлов – до 2 Гбайт. Однако эта система была медленнее файловой системы MINIX, поэтому была разработана файловая система Ext2 с длинными именами файлов, длинными файлами и высокой производительностью. Эта файловая система и стала основной файловой системой Linux. Однако опера­ционная система Linux также поддерживает еще более десятка файловых систем, используя для этого файловую систему NFS (описанную в следующем разделе). При компоновке операционной системы Linux предлагается сделать выбор файло­вой системы, которая будет встроена в ядро. Другие файловые системы при необхо­димости могут динамически подгружаться во время исполнения в виде модулей.

Файловая система Ext2 очень похожа на файловую систему Berkeley Fast с небольшими изменениями. Вместо того, чтобы использовать группы цилин­дров, что практически ничего не значит при современных дисках с виртуальной геометрией, она делит диск на группы блоков, независимо от того, где располага­ются границы между цилиндрами. Каждая группа блоков начинается с суперблока, в котором хранится информация о том, сколько блоков и i-узлов находятся в дан­ной группе, о размере группы блоков и т. д. Затем следует описатель группы, содер­жащий информацию о расположении битовых массивов, количестве свободных блоков и i-узлов в группе, а также количестве каталогов в группе. Эта информация важна, так как файловая система Ext2 пытается распространить каталоги равномер­но по всему диску. В двух битовых массивах ведется учет свободных блоков и свободных i-узлов. Размер каждого битового массива равен одному блоку. При размере блоков в 1 Кбайт такая схема ограничивает размер группы блоков 8192 блоками и 8192 i-узлами. На практике ограничение числа i-узлов никогда не встречается, так как блоки заканчиваются раньше. Затем располагаются сами i-узлы. Размер каждого i-узла – 128 байт, что в два раза больше размера стандартных i-узлов в UNIX. Дополнительные байты в i-узле используются следующим образом. Вместо 10 пря­мых и 3 косвенных дисковых адресов файловая система Linux позволяет 12 пря­мых и 3 косвенных дисковых адреса. Кроме того, длина адресов увеличена с 3 до 4 байт, и это позволяет поддерживать дисковые разделы размером более 224 бло­ков (16 Гбайт), что уже стало проблемой для UNIX.

Читайте также:  Linux at command with arguments

Работа файловой системы похожа на функционирование быстрой файловой системы Berkeley. Однако в отличие от BSD, в системе Linux используются дис­ковые блоки только одного размера – 1 Кбайт. Быстрая файловая система Berkeley использует 8-килобайтные блоки, которые затем разбиваются при необходимости на килобайтные фрагменты. Файловая система Ext2 делает примерно то же самое, но более простым способом. Как и система Berkeley, когда файл увеличивается в размерах, файловая система Ext2 пытается поместить новый блок файла в ту же группу блоков, что и остальные блоки, желательно сразу после предыдущих бло­ков. Кроме того, при создании нового файла в каталоге файловая система Ext2 ста­рается выделить ему блоки в той же группе блоков, в которой располагается ката­лог. Новые каталоги, наоборот, равномерно распределяются по всему диску.

Другой файловой системой Linux является файловая система rос (process – процесс). Идея этой файловой системы изначально была реализована в 8-й редак­ции операционной системы UNIX, созданной лабораторией Bell Labs, а позднее скопированной в 4.4BSD и System V. Однако в операционной системе Linux дан­ная идея получила дальнейшее развитие. Основная концепция этой файловой системы заключается в том, что для каждого процесса системы создается подката­лог в каталоге /рrос. В этом каталоге располагаются файлы, которые хранят информацию о процессе – его командную строку, строки окружения и маски сигналов. В действительности этих файлов на диске нет. Когда они считываются, система получает информацию от фактического процесса и возвращает ее в стандартном формате. Многие расширения, реализованные в операционной системе Linux, относятся к файлам и каталогам, расположенным в каталоге /рrос. Они содержат информацию о центральном процессоре, дисковых разделах, векторах прерывания, счетчиках ядра, файловых системах, подгружаемых модулях и о многом другом. Непривилегирован­ные программы пользователя могут читать большую часть этой информации, что позволяет им узнать о поведении системы безопасным способом. Некоторые из этих файлов могут записываться в каталог /рrос, чтобы изменить параметры системы.

Источник

Оцените статью
Adblock
detector