Создание Файловых систем в 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
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
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.
Работа файловой системы похожа на функционирование быстрой файловой системы 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ос, чтобы изменить параметры системы.