15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
08.10.2024

Использование команды `mkfs` в Linux: полное руководство по форматированию дисков и разделов

Команда `mkfs` (создание файловой системы) является основной утилитой Linux для записи структуры файловой системы на блочное устройство — будь то необработанный диск, раздел или логический том. Она инициализирует суперблок, таблицы инодов, группы блоков и структуры журнала, необходимые перед записью каких-либо данных на устройство.

Прежде чем работать с любым диском, запомните: `mkfs` — это деструктивная, необратимая операция. Она не просто стирает запись в таблице разделов — она перезаписывает критически важные метаданные на диске. Запуск команды на неправильном устройстве, даже кратковременный, делает существующие данные невосстановимыми без криминалистических инструментов. Проверяйте целевое устройство с помощью `lsblk` или `blkid` перед каждым вызовом.

Что `mkfs` делает под капотом

Когда вы выполняете `mkfs -t ext4 /dev/sdb1`, ядро не просто «форматирует» раздел в понимании Windows. Команда вызывает соответствующий бинарный файл для конкретной файловой системы (в данном случае `mkfs.ext4`, который фактически является `mke2fs` с настройками ext4 по умолчанию) и выполняет следующее:

  • Записывает суперблок и резервные копии суперблока по фиксированным смещениям групп блоков
  • Выделяет и инициализирует таблицу инодов во всех группах блоков
  • Создаёт таблицу дескрипторов групп блоков
  • Инициализирует журнал (для журналируемых файловых систем, таких как ext4 и XFS)
  • Записывает инод корневого каталога (инод 2 для ext4)
  • Присваивает файловой системе UUID для постоянной идентификации

Это различие важно на больших дисках. Форматирование раздела ext4 объёмом 4 TB с полной инициализацией таблицы инодов может занять несколько минут. XFS, напротив, откладывает большую часть этой работы до времени выполнения, что делает `mkfs.xfs` практически мгновенным независимо от размера тома.

Определение правильного устройства перед форматированием

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

Использование `lsblk`

“`bash

lsblk -o NAME,SIZE,FSTYPE,LABEL,UUID,MOUNTPOINT

“`

Пример вывода:

“`

NAME SIZE FSTYPE LABEL UUID MOUNTPOINT

sda 100G

├─sda1 20G ext4 a1b2c3d4-… /

└─sda2 80G ext4 e5f6a7b8-… /home

sdb 500G

└─sdb1 500G

“`

Пустое поле `FSTYPE` подтверждает, что `/dev/sdb1` не имеет существующей файловой системы — его можно безопасно форматировать.

Использование `blkid`

“`bash

sudo blkid /dev/sdb1

“`

Если команда не возвращает вывода, раздел не содержит распознанной сигнатуры файловой системы. Если она возвращает тип, вы собираетесь перезаписать существующие данные.

Использование `fdisk -l`

“`bash

sudo fdisk -l /dev/sdb

“`

Это позволяет увидеть границы разделов, типы разделов и использует ли диск MBR или GPT. Если `/dev/sdb` не показывает таблицы разделов вообще, возможно, сначала потребуется разбить диск на разделы с помощью `fdisk`, `gdisk` или `parted` перед запуском `mkfs`.

Основной синтаксис и шаблоны вызова `mkfs`

Канонический синтаксис:

“`bash

mkfs -t <filesystem_type> [options] <device>

“`

Однако `mkfs` сам по себе является тонкой обёрткой. Каждый тип файловой системы поставляется со своим собственным выделенным бинарным файлом:

Псевдоним `mkfs`Базовый бинарный файлФайловая система
`mkfs.ext4``mke2fs`Fourth Extended Filesystem
`mkfs.xfs``mkfs.xfs`XFS
`mkfs.btrfs``mkfs.btrfs`B-Tree Filesystem
`mkfs.vfat``mkdosfs`FAT16/FAT32
`mkfs.exfat``mkfs.exfat`exFAT
`mkfs.ntfs``mkntfs`NTFS
`mkfs.f2fs``mkfs.f2fs`Flash-Friendly Filesystem

Вызов `mkfs -t ext4` и прямой вызов `mkfs.ext4` функционально идентичны — первый просто разрешается во второй. В производственных скриптах предпочтительнее использовать явный псевдоним (`mkfs.ext4`), чтобы намерение было однозначным.

Выбор типа файловой системы: техническое сравнение

Выбор неподходящей файловой системы для рабочей нагрузки — распространённая и дорогостоящая ошибка. Следующая таблица сопоставляет характеристики файловых систем с реальными сценариями использования.

Файловая системаМакс. размер томаМакс. размер файлаЖурналированиеЛучший сценарий использованияКросс-платформенная поддержка
**ext4**1 EiB16 TiBДа (ordered/writeback)Универсальные корневые и дисковые тома LinuxНативная для Linux; только чтение на macOS/Windows с драйверами
**XFS**8 EiB8 EiBДа (только метаданные по умолчанию)Большие файлы, базы данных, высокопроизводительное хранилище, NFS-экспортыНативная для Linux
**Btrfs**16 EiB16 EiBCoW (без традиционного журнала)Снимки, RAID, подтома, рабочие нагрузки NASНативная для Linux
**vFAT/FAT32**2 TiB4 GiBНетUSB-накопители, EFI System Partition (ESP), кросс-платформенные съёмные носителиУниверсальная
**exFAT**128 PiB16 EiBНетБольшие съёмные носители, где ограничение размера файла FAT32 является проблемойУниверсальная (современные ОС)
**NTFS**256 TiB256 TiBДаРазделы данных Windows при двойной загрузкеНативная для Windows; полная поддержка на Linux через `ntfs-3g`
**F2FS**16 TiB3.94 TiBЖурнально-структурированнаяSSD, eMMC, SD-карты, внутреннее хранилище AndroidНативная для Linux

Критический граничный случай — EFI System Partition: ESP должен быть отформатирован как `vfat` (конкретно FAT32). Использование любой другой файловой системы здесь не позволит прошивке UEFI найти загрузчик. Всегда форматируйте ESP с помощью:

“`bash

sudo mkfs.vfat -F 32 /dev/sda1

“`

Флаг `-F 32` явно принудительно задаёт FAT32 вместо FAT16, что важно для ESP-разделов размером более 32 MiB.

Практические примеры `mkfs` с производственными параметрами

Пример 1: Создание файловой системы ext4 с настроенными параметрами

“`bash

sudo mkfs.ext4 -L "data_vol" -m 1 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdb1

“`

Что делает каждый флаг:

  • `-L "data_vol"` — присваивает постоянную метку, позволяя записям `/etc/fstab` использовать `LABEL=data_vol` вместо пути к необработанному устройству (безопаснее в системах, где порядок перечисления устройств может меняться)
  • `-m 1` — уменьшает процент зарезервированных блоков с 5% по умолчанию до 1%; на томе данных объёмом 2 TB значение по умолчанию расходует впустую ~100 GB, которые может использовать только root
  • `-E lazy_itable_init=0,lazy_journal_init=0` — принудительно выполняет полную инициализацию таблицы инодов во время форматирования, а не откладывает её на фоновый ввод-вывод; критически важно для производственных серверов, где фоновая инициализация может вызвать неожиданные всплески ввода-вывода спустя часы после развёртывания

Пример 2: Создание файловой системы XFS для сервера баз данных

“`bash

sudo mkfs.xfs -L "pg_data" -f /dev/sdb1

“`

  • `-f` — принудительно создаёт файловую систему, даже если обнаружена существующая сигнатура файловой системы; используйте только при подтверждении, что устройство можно перезаписать
  • XFS не поддерживает уменьшение размера; тщательно планируйте размер тома перед форматированием

Для рабочих нагрузок PostgreSQL или MySQL на XFS также установите параметр монтирования `noatime` в `/etc/fstab`, чтобы устранить накладные расходы на запись времени доступа к инодам при каждой операции чтения.

Пример 3: Создание файловой системы Btrfs с RAID-1 на двух устройствах

“`bash

sudo mkfs.btrfs -L "btrfs_mirror" -d raid1 -m raid1 /dev/sdb /dev/sdc

“`

Btrfs может нативно охватывать несколько блочных устройств. `-d raid1` зеркалирует данные; `-m raid1` зеркалирует метаданные. Это является законной альтернативой программному RAID mdadm для сред, где также требуется функциональность снимков и подтомов.

Пример 4: Создание файловой системы vFAT для USB-накопителя

“`bash

sudo mkfs.vfat -F 32 -n "BACKUP_USB" /dev/sdc1

“`

  • `-n "BACKUP_USB"` — задаёт метку тома (метки FAT32 ограничены 11 символами в верхнем регистре)
  • `-F 32` — явно выбирает FAT32 вместо FAT16

Пример 5: Создание файловой системы F2FS на SSD

“`bash

sudo mkfs.f2fs -l "ssd_cache" /dev/sdb1

“`

F2FS специально разработана для флэш-хранилищ NAND. Она снижает усиление записи и управляет выравниванием износа на уровне файловой системы. На экземплярах VPS Хостинга, использующих хранилище NVMe, F2FS может превосходить ext4 для эфемерных кэш-томов с интенсивной записью.

Форматирование целого диска без таблицы разделов

В определённых сценариях — физические тома LVM, Ceph OSD или специализированные устройства хранения — вы можете записать файловую систему непосредственно на весь диск, а не на раздел:

“`bash

sudo mkfs.ext4 /dev/sdb

“`

Когда это уместно:

  • Диск предназначен для единственной цели и гибкость разделов не нужна
  • Вы подготавливаете диск для LVM (`pvcreate` обрабатывает это иначе, но концепция аналогична)
  • Вы создаёте образ файловой системы на loopback-устройстве

Когда это неуместно:

  • Любой диск, с которого нужно загружаться (требует таблицы разделов с загрузочным флагом)
  • Любой диск, совместно используемый несколькими файловыми системами или операционными системами
  • Диски в системах, где правила udev или инструменты облачной инфраструктуры ожидают наличия таблицы разделов

Монтирование отформатированного раздела и обеспечение его постоянства

Форматирование создаёт файловую систему; монтирование делает её доступной. Всегда используйте ссылки на основе UUID в `/etc/fstab` вместо имён устройств, поскольку имена устройств (`/dev/sdb1`) не гарантированно стабильны при перезагрузках в системах с несколькими дисками или горячим подключением хранилища.

“`bash

Create the mount point

sudo mkdir -p /mnt/data_vol

Mount temporarily to verify

sudo mount /dev/sdb1 /mnt/data_vol

Retrieve the UUID

sudo blkid /dev/sdb1

Output: /dev/sdb1: LABEL="data_vol" UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"

Add a persistent, UUID-based fstab entry

echo 'UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/data_vol ext4 defaults,noatime 0 2' | sudo tee -a /etc/fstab

Validate the fstab entry without rebooting

sudo mount -a

“`

Значение `0 2` в конце записи fstab управляет `dump` (утилита резервного копирования, установите 0 для отключения) и порядком прохода `fsck` (2 означает проверку после корневой файловой системы; для root должно быть 1).

Проверка целостности файловой системы после форматирования

Не предполагайте, что форматирование прошло успешно без проверки.

“`bash

Check filesystem type, label, and UUID

lsblk -f /dev/sdb1

For ext4: run e2fsck in read-only check mode

sudo e2fsck -n /dev/sdb1

For XFS: verify the filesystem structure

sudo xfs_repair -n /dev/sdb1

Check available space after mounting

df -hT /mnt/data_vol

“`

Флаг `-n` как для `e2fsck`, так и для `xfs_repair` выполняет пробную проверку без изменения файловой системы. Это безопасно запускать на смонтированной файловой системе в диагностических целях, хотя полное восстановление требует предварительного размонтирования.

Справочник расширенных параметров

ПараметрПрименимо кЭффект
`-L <label>`ВсеПрисваивает удобочитаемую метку файловой системы
`-b <block_size>`ext4, XFSЗадаёт размер блока (512, 1024, 2048, 4096 байт); более крупные блоки повышают пропускную способность для больших файлов, расходуют пространство впустую для маленьких файлов
`-m <percent>`ext4Процент зарезервированных блоков для root (по умолчанию 5%); уменьшите до 1% на больших томах данных
`-i <bytes-per-inode>`ext4Управляет плотностью инодов; уменьшите для файловых систем, хранящих миллионы маленьких файлов
`-N <inode-count>`ext4Задаёт явное количество инодов; полезно, когда известно ожидаемое количество файлов
`-E lazy_itable_init=0`ext4Отключает ленивую инициализацию инодов; более медленное форматирование, устраняет фоновый ввод-вывод после развёртывания
`-f`XFSПринудительно форматирует, даже если существует сигнатура файловой системы
`-d su=,sw=`XFSНастраивает единицу полосы и ширину для выровненного ввода-вывода RAID
`-F 32`vFATПринудительно задаёт FAT32 (вместо FAT16)
`-q`ext4Тихий режим; подавляет вывод прогресса (полезно в скриптах)

Распространённые ошибки и способы их избежать

Форматирование смонтированной файловой системы: Linux не всегда предотвращает это. Запуск `mkfs` на смонтированном разделе немедленно повреждает файловую систему и может вызвать панику ядра. Всегда проверяйте статус монтирования с помощью `mount | grep /dev/sdb1` перед продолжением.

Исчерпание инодов на ext4: Если вы задаёте большой размер блока (например, 4096 байт) на томе, который будет хранить миллионы крошечных файлов (почтовые спулы, кэши сессий), вы исчерпаете иноды задолго до дискового пространства. Используйте `-i 4096` или `-i 2048` для увеличения плотности инодов. Это особенно распространённая проблема на серверах Email Хостинга и высоконагруженных веб-серверах, хранящих файлы для каждой сессии.

XFS и уменьшение размера: Тома XFS не могут быть уменьшены после создания. Если вы форматируете том XFS объёмом 2 TB и позже вам нужно освободить пространство, единственный вариант — резервное копирование, переформатирование и восстановление. Планируйте размеры томов XFS консервативно или используйте тонкое выделение LVM в качестве основы.

Выравнивание полос для RAID и SSD: Форматирование без указания выравнивания полос на массиве RAID или SSD вызывает невыровненный ввод-вывод, значительно снижая производительность. Для массива RAID-5 с полосой 512 KB и 4 дисками:

“`bash

sudo mkfs.ext4 -E stride=128,stripe-width=384 /dev/md0

“`

Где `stride = stripe_size / block_size` и `stripe-width = stride * (data_disks)`.

Коллизии UUID после клонирования диска: Клонирование диска с помощью `dd` дублирует UUID файловой системы. Два устройства с одинаковыми UUID вызывают сбои монтирования и повреждение данных. После клонирования пересоздайте UUID:

“`bash

sudo tune2fs -U random /dev/sdb1 # ext4

sudo xfs_admin -U generate /dev/sdb1 # XFS

“`

Это критически важное соображение при развёртывании Выделенных Серверов из образов дисков или подготовке нескольких узлов из единого шаблона.

Особенности файловых систем для VPS и облачных сред

На виртуальных машинах и облачных экземплярах базовое хранилище часто представляет собой тонко выделенный виртуальный диск, поддерживаемый распределённой системой хранения. Несколько решений `mkfs` становятся более значимыми в этом контексте:

  • Поддержка Discard/TRIM: Форматируйте ext4 с `-E discard` или добавьте параметр монтирования `discard` для включения онлайн-TRIM, который возвращает освобождённые блоки в базовый пул хранилища и поддерживает производительность с течением времени на экземплярах VPS с cPanel, использующих SSD.
  • Режим журнала: Для приложений, чувствительных к задержкам, рассмотрите режим журнала `data=writeback` в `/etc/fstab` для ext4. Это жертвует строгим порядком данных ради меньшей задержки записи, что приемлемо для баз данных, управляющих собственными журналами упреждающей записи.
  • Избегайте форматирования swap как файловой системы: Разделы подкачки используют `mkswap`, а не `mkfs`. Запуск `mkfs` на разделе подкачки уничтожает сигнатуру swap без создания пригодной файловой системы.

При управлении хранилищем на Панелях управления VPS дополнительные дисковые тома обычно отображаются как неотформатированные блочные устройства. Рабочий процесс всегда таков: определите с помощью `lsblk`, при необходимости разбейте на разделы с помощью `fdisk`/`gdisk`, отформатируйте с помощью `mkfs`, смонтируйте и сохраните в `/etc/fstab`.

Матрица решений: выбор правильной файловой системы

Используйте эту матрицу для выбора файловой системы на основе вашего основного требования:

Основное требованиеРекомендуемая файловая системаИзбегать
Универсальный Linux-серверext4Btrfs (накладные расходы на сложность)
Большие файлы, базы данных, NFSXFSFAT32 (нет прав доступа)
Снимки, подтома, NASBtrfsext4 (нет нативных снимков)
Кросс-платформенные USB/съёмные носителиexFAT или FAT32ext4 (плохая поддержка Windows)
EFI System PartitionFAT32 (`mkfs.vfat -F 32`)Любая не-FAT
NVMe SSD, интенсивная записьF2FS или XFSFAT32
Том данных Windows при двойной загрузкеNTFSext4
Миллионы маленьких файловext4 с `-i 2048`XFS (фиксированное количество инодов)

Технический контрольный список ключевых выводов

Перед запуском `mkfs` в любой среде пройдите этот контрольный список:

  • Подтвердите целевое устройство с помощью `lsblk -f` и `blkid` — никогда не полагайтесь на память или предположения
  • Размонтируйте цель с помощью `umount /dev/sdXN` и проверьте с помощью `mount | grep sdX`
  • Создайте резервную копию данных на устройстве; `mkfs` необратима
  • Выберите тип файловой системы исходя из рабочей нагрузки (см. матрицу решений выше), а не привычки
  • Задайте метку файловой системы с помощью `-L` для удобочитаемой идентификации в журналах и `fstab`
  • Уменьшите зарезервированные блоки на больших томах данных (`-m 1` для ext4) для освобождения используемого пространства
  • Отключите ленивую инициализацию (`-E lazy_itable_init=0`) на производственных серверах для предотвращения всплесков ввода-вывода после развёртывания
  • Используйте UUID в `/etc/fstab`, а не имена устройств, для постоянства монтирования
  • Проверьте с помощью `mount -a` после редактирования `/etc/fstab` для обнаружения ошибок перед перезагрузкой
  • Запустите `e2fsck -n` или `xfs_repair -n` после форматирования для подтверждения целостности файловой системы
  • Пересоздайте UUID на любом диске, клонированном из шаблонного образа

Часто задаваемые вопросы

В: Можно ли запустить `mkfs` на разделе, который в данный момент смонтирован?

О: Технически ядро может это разрешить, но это немедленно повреждает файловую систему и может вызвать панику ядра или потерю данных. Всегда сначала размонтируйте раздел и подтвердите с помощью `mount | grep <device>` перед запуском `mkfs`.

В: В чём разница между `mkfs.ext4` и `mke2fs`?

О: `mkfs.ext4` — это символическая ссылка или обёртка, которая вызывает `mke2fs` с настройками `-t ext4` по умолчанию. Они функционально идентичны. `mke2fs` является канонической утилитой и принимает полный набор параметров создания ext2/ext3/ext4.

В: Почему форматирование большого раздела ext4 занимает так много времени по сравнению с XFS?

О: ext4 инициализирует таблицу инодов для каждой группы блоков во время форматирования (если не установлен `lazy_itable_init=1`). На томе объёмом 4 TB это включает запись гигабайт обнулённых данных таблицы инодов. XFS откладывает инициализацию структур до времени выполнения, что позволяет `mkfs.xfs` завершиться за секунды независимо от размера тома.

В: Как изменить метку файловой системы после форматирования без переформатирования?

О: Для ext4 используйте `sudo tune2fs -L "NewLabel" /dev/sdb1`. Для XFS используйте `sudo xfs_admin -L "NewLabel" /dev/sdb1`. Для FAT32 используйте `sudo fatlabel /dev/sdb1 NEWLABEL`. Переименование не влияет на данные.

В: Безопасно ли использовать `mkfs` на логическом томе LVM?

О: Да. Логические тома LVM отображаются как блочные устройства (например, `/dev/mapper/vg0-lv_data` или `/dev/vg0/lv_data`) и обрабатываются `mkfs` идентично физическим разделам. Это стандартный рабочий процесс для производственного хранилища Linux: создайте логический том с помощью `lvcreate`, отформатируйте с помощью `mkfs`, смонтируйте и сохраните в `/etc/fstab`.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать