15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
08.10.2024

Използване на командата `mkfs` в Linux: Пълно ръководство за форматиране на дискове и дялове

Командата `mkfs` (make filesystem) е основната Linux помощна програма за записване на файлова система върху блоково устройство — независимо дали е суров диск, дял или логически том. Тя инициализира суперблока, таблиците с inode, блоковите групи и структурите на журнала, необходими преди да може да се запишат данни на устройството.

Преди да докоснете какъвто и да е диск, разберете следното: `mkfs` е деструктивна, необратима операция. Тя не просто изтрива запис в таблицата на дяловете — тя презаписва критични метаданни на диска. Изпълнението й върху грешното устройство, дори за кратко, прави съществуващите данни невъзстановими без съдебни инструменти. Проверете целевото устройство с `lsblk` или `blkid` преди всяко извикване.

Какво всъщност прави `mkfs` под капака

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

  • Записва суперблока и резервните копия на суперблока при фиксирани отмествания на блоковите групи
  • Разпределя и инициализира таблицата с inode във всички блокови групи
  • Създава таблицата с дескриптори на блоковите групи
  • Инициализира журнала (за файлови системи с журналиране като ext4 и XFS)
  • Записва inode на основната директория (inode 2 за ext4)
  • Отпечатва UUID върху файловата система за постоянна идентификация

Това разграничение е важно при големи дискове. Форматирането на 4 TB ext4 дял с пълна инициализация на таблицата с inode може да отнеме няколко минути. 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`Четвърта разширена файлова система
`mkfs.xfs``mkfs.xfs`XFS
`mkfs.btrfs``mkfs.btrfs`B-Tree файлова система
`mkfs.vfat``mkdosfs`FAT16/FAT32
`mkfs.exfat``mkfs.exfat`exFAT
`mkfs.ntfs``mkntfs`NTFS
`mkfs.f2fs``mkfs.f2fs`Файлова система, оптимизирана за флаш памет

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

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

Изборът на грешна файлова система за дадено натоварване е честа и скъпоструваща грешка. Следващата таблица съпоставя характеристиките на файловите системи с реални случаи на употреба.

Файлова системаМаксимален размер на томаМаксимален размер на файлЖурналиранеНай-добър случай на употребаПоддръжка между ОС
**ext4**1 EiB16 TiBДа (наредено/writeback)Универсални Linux root и томове с данниРодна за Linux; само за четене на macOS/Windows с драйвери
**XFS**8 EiB8 EiBДа (само метаданни по подразбиране)Големи файлове, бази данни, съхранение с висока пропускателна способност, NFS експортиРодна за Linux
**Btrfs**16 EiB16 EiBCoW (без традиционен журнал)Снимки, RAID, подтомове, NAS натоварванияРодна за Linux
**vFAT/FAT32**2 TiB4 GiBНеUSB устройства, EFI системен дял (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 системният дял: 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` — налага пълна инициализация на таблицата с inode по време на форматиране, вместо да я отлага за фонов I/O; критично за производствени сървъри, където фоновата инициализация може да причини неочаквани I/O пикове часове след внедряването

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

“`bash

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

“`

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

За натоварвания с PostgreSQL или MySQL върху XFS, задайте също опцията за монтиране `noatime` в `/etc/fstab`, за да премахнете режийните разходи за запис на времето за достъп до inode при всяка операция за четене.

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

“`bash

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

“`

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

Пример 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 файловата система; 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Контролира плътността на inode; намалете за файлови системи, съхраняващи милиони малки файлове
`-N <inode-count>`ext4Задава явен брой inode; полезно, когато знаете очаквания брой файлове
`-E lazy_itable_init=0`ext4Деактивира мързеливата инициализация на inode; по-бавно форматиране, елиминира фоновия I/O след внедряването
`-f`XFSНалага форматиране дори ако съществува сигнатура на файлова система
`-d su=,sw=`XFSКонфигурира единицата на ивицата и ширината за I/O, изравнен с RAID
`-F 32`vFATНалага FAT32 (вместо FAT16)
`-q`ext4Тих режим; потиска изхода за напредъка (полезно в скриптове)

Чести грешки и как да ги избегнете

Форматиране на монтирана файлова система: Linux не винаги ще предотврати това. Изпълнението на `mkfs` върху монтиран дял незабавно поврежда файловата система и може да причини паники на ядрото. Винаги проверявайте статуса на монтиране с `mount | grep /dev/sdb1` преди да продължите.

Изчерпване на inode при ext4: Ако зададете голям размер на блока (напр. 4096 байта) за том, който ще съхранява милиони малки файлове (пощенски спули, кешове на сесии), ще изчерпите inode много преди дисковото пространство. Използвайте `-i 4096` или `-i 2048` за увеличаване на плътността на inode. Това е особено честа проблема на сървъри за имейл хостинг и уеб сървъри с голям трафик, съхраняващи файлове за всяка сесия.

XFS и свиване: XFS томовете не могат да бъдат свити след създаването. Ако форматирате 2 TB XFS том и по-късно трябва да освободите място, единствената ви опция е архивиране, преформатиране и възстановяване. Планирайте размерите на XFS томовете консервативно или използвайте LVM тънко осигуряване отдолу.

Изравняване на ивицата за RAID и SSD: Форматирането без задаване на изравняване на ивицата върху RAID масив или SSD причинява неизравнен I/O, значително влошавайки производителността. За 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

“`

Това е критично съображение при внедряване на Dedicated сървъри от образи на дискове или осигуряване на множество възли от един шаблон.

Съображения за файловата система при VPS и облачни среди

На виртуални машини и облачни инстанции, основното хранилище често е тънко осигурен виртуален диск, поддържан от разпределена система за съхранение. Няколко решения за `mkfs` стават по-въздействащи в този контекст:

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

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

Матрица за решения: Избор на правилната файлова система

Използвайте тази матрица, за да изберете файлова система въз основа на основното ви ограничение:

Основно изискванеПрепоръчана файлова системаИзбягвайте
Универсален Linux сървърext4Btrfs (сложност на управлението)
Големи файлове, бази данни, NFSXFSFAT32 (без права)
Снимки, подтомове, NASBtrfsext4 (без родни снимки)
USB/сменяеми носители между ОСexFAT или FAT32ext4 (лоша поддръжка на Windows)
EFI системен дялFAT32 (`mkfs.vfat -F 32`)Всяка не-FAT
NVMe SSD, интензивно записванеF2FS или XFSFAT32
Том с данни при двойно зареждане с WindowsNTFSext4
Милиони малки файловеext4 с `-i 2048`XFS (фиксиран брой inode)

Контролен списък с технически ключови изводи

Преди да изпълните `mkfs` в каквато и да е среда, преминете през този контролен списък:

  • Потвърдете целевото устройство с `lsblk -f` и `blkid` — никога не разчитайте на памет или предположение
  • Демонтирайте целта с `umount /dev/sdXN` и проверете с `mount | grep sdX`
  • Архивирайте всички данни на устройството; `mkfs` не е обратимо
  • Изберете типа файлова система въз основа на натоварването (вижте матрицата за решения по-горе), а не по навик
  • Задайте етикет на файловата система с `-L` за четима от човека идентификация в журналите и `fstab`
  • Намалете запазените блокове при големи томове с данни (`-m 1` за ext4) за освобождаване на използваемо пространство
  • Деактивирайте мързеливата инициализация (`-E lazy_itable_init=0`) на производствени сървъри за предотвратяване на I/O пикове след внедряването
  • Използвайте 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 инициализира таблицата с inode за всяка блокова група по време на форматиране (освен ако не е зададено `lazy_itable_init=1`). При 4 TB том, това включва записване на гигабайти нулирани данни от таблицата с inode. 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 хранилище: създайте LV с `lvcreate`, форматирайте с `mkfs`, монтирайте и запазете в `/etc/fstab`.

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало