15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
08.10.2024

Używanie polecenia `mkfs` w Linux: Kompletny przewodnik po formatowaniu dysków i partycji

Polecenie `mkfs` (make filesystem) jest podstawowym narzędziem Linux służącym do zapisywania struktury systemu plików na urządzeniu blokowym — niezależnie od tego, czy jest to surowy dysk, partycja czy wolumin logiczny. Inicjalizuje ono superblok, tablice i-węzłów, grupy bloków oraz struktury dziennika wymagane przed zapisaniem jakichkolwiek danych na urządzeniu.

Przed dotknięciem jakiegokolwiek dysku należy zrozumieć jedno: `mkfs` jest operacją destrukcyjną i nieodwracalną. Nie usuwa jedynie wpisu tablicy partycji — nadpisuje krytyczne metadane na dysku. Uruchomienie go na niewłaściwym urządzeniu, nawet na chwilę, sprawia, że istniejące dane stają się nieodzyskiwalne bez narzędzi forensycznych. Przed każdym wywołaniem zweryfikuj docelowe urządzenie za pomocą `lsblk` lub `blkid`.

Co `mkfs` faktycznie robi pod spodem

Gdy wykonujesz `mkfs -t ext4 /dev/sdb1`, jądro nie „formatuje” partycji w sensie Windows. Polecenie wywołuje odpowiedni plik binarny specyficzny dla systemu plików (w tym przypadku `mkfs.ext4`, który jest w rzeczywistości `mke2fs` z domyślnymi ustawieniami ext4) i wykonuje następujące czynności:

  • Zapisuje superblok i kopie zapasowe superbloku przy stałych przesunięciach grup bloków
  • Przydziela i inicjalizuje tablicę i-węzłów we wszystkich grupach bloków
  • Tworzy tablicę deskryptorów grup bloków
  • Inicjalizuje dziennik (dla systemów plików z dziennikowaniem, takich jak ext4 i XFS)
  • Zapisuje i-węzeł katalogu głównego (i-węzeł 2 dla ext4)
  • Nadaje systemowi plików UUID do trwałej identyfikacji

To rozróżnienie ma znaczenie na dużych dyskach. Formatowanie partycji ext4 o pojemności 4 TB z pełną inicjalizacją tablicy i-węzłów może zająć kilka minut. XFS natomiast odkłada większość tej pracy do czasu wykonania, dzięki czemu jego `mkfs.xfs` jest niemal natychmiastowe niezależnie od rozmiaru woluminu.

Identyfikacja właściwego urządzenia przed formatowaniem

Nigdy nie zgaduj nazwy urządzenia. Użyj poniższych narzędzi, aby zmapować fizyczny sprzęt na węzły urządzeń jądra.

Używanie `lsblk`

“`bash

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

“`

Przykładowe wyjście:

“`

NAME SIZE FSTYPE LABEL UUID MOUNTPOINT

sda 100G

├─sda1 20G ext4 a1b2c3d4-… /

└─sda2 80G ext4 e5f6a7b8-… /home

sdb 500G

└─sdb1 500G

“`

Puste pole `FSTYPE` potwierdza, że `/dev/sdb1` nie ma istniejącego systemu plików — można je bezpiecznie sformatować.

Używanie `blkid`

“`bash

sudo blkid /dev/sdb1

“`

Jeśli polecenie nie zwraca żadnych danych wyjściowych, partycja nie zawiera rozpoznanego podpisu systemu plików. Jeśli zwraca typ, zamierzasz nadpisać istniejące dane.

Używanie `fdisk -l`

“`bash

sudo fdisk -l /dev/sdb

“`

Ujawnia to granice partycji, typy partycji oraz to, czy dysk używa MBR czy GPT. Jeśli `/dev/sdb` nie pokazuje żadnej tablicy partycji, może być konieczne najpierw podzielenie dysku na partycje za pomocą `fdisk`, `gdisk` lub `parted` przed uruchomieniem `mkfs`.

Podstawowa składnia `mkfs` i wzorce wywołań

Kanoniczna składnia to:

“`bash

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

“`

Jednak `mkfs` sam w sobie jest cienką warstwą opakowującą. Każdy typ systemu plików dostarcza własny dedykowany plik binarny:

Alias `mkfs`Podstawowy plik binarnySystem plików
`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

Wywołanie `mkfs -t ext4` i bezpośrednie wywołanie `mkfs.ext4` są funkcjonalnie identyczne — pierwsze po prostu rozwiązuje się do drugiego. W skryptach produkcyjnych preferuj jawny alias (`mkfs.ext4`), aby intencja była jednoznaczna.

Wybór typu systemu plików: porównanie techniczne

Wybór niewłaściwego systemu plików dla danego obciążenia to częsty i kosztowny błąd. Poniższa tabela mapuje charakterystyki systemów plików na rzeczywiste przypadki użycia.

System plikówMaks. rozmiar woluminuMaks. rozmiar plikuDziennikowanieNajlepszy przypadek użyciaObsługa między systemami operacyjnymi
**ext4**1 EiB16 TiBTak (ordered/writeback)Ogólne woluminy główne i danych LinuxNatywny Linux; tylko do odczytu na macOS/Windows ze sterownikami
**XFS**8 EiB8 EiBTak (domyślnie tylko metadane)Duże pliki, bazy danych, pamięć masowa o wysokiej przepustowości, eksporty NFSNatywny Linux
**Btrfs**16 EiB16 EiBCoW (brak tradycyjnego dziennika)Migawki, RAID, podwoluminy, obciążenia NASNatywny Linux
**vFAT/FAT32**2 TiB4 GiBNieDyski USB, partycja systemowa EFI (ESP), wymienne nośniki między systemami operacyjnymiUniwersalny
**exFAT**128 PiB16 EiBNieDuże wymienne nośniki, gdzie limit rozmiaru pliku FAT32 stanowi ograniczenieUniwersalny (nowoczesne systemy operacyjne)
**NTFS**256 TiB256 TiBTakPartycje danych Windows przy podwójnym rozruchuNatywny Windows; pełna obsługa na Linux przez `ntfs-3g`
**F2FS**16 TiB3.94 TiBLog-structuredSSD, eMMC, karty SD, wewnętrzna pamięć AndroidNatywny Linux

Krytyczny przypadek brzegowy — partycja systemowa EFI: ESP musi być sformatowana jako `vfat` (konkretnie FAT32). Użycie jakiegokolwiek innego systemu plików uniemożliwi oprogramowaniu układowemu UEFI zlokalizowanie programu ładującego. Zawsze formatuj ESP za pomocą:

“`bash

sudo mkfs.vfat -F 32 /dev/sda1

“`

Flaga `-F 32` jawnie wymusza FAT32 zamiast FAT16, co ma znaczenie dla partycji ESP większych niż 32 MiB.

Praktyczne przykłady `mkfs` z opcjami klasy produkcyjnej

Przykład 1: Tworzenie systemu plików ext4 z dostrojonymi parametrami

“`bash

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

“`

Co robi każda flaga:

  • `-L "data_vol"` — przypisuje trwałą etykietę, umożliwiając wpisom `/etc/fstab` używanie `LABEL=data_vol` zamiast surowej ścieżki urządzenia (bezpieczniejsze w systemach, gdzie kolejność wyliczania urządzeń może się zmieniać)
  • `-m 1` — zmniejsza procent zarezerwowanych bloków z domyślnych 5% do 1%; na woluminie danych o pojemności 2 TB wartość domyślna marnuje ~100 GB, z których może korzystać tylko root
  • `-E lazy_itable_init=0,lazy_journal_init=0` — wymusza pełną inicjalizację tablicy i-węzłów w czasie formatowania zamiast odkładania jej do operacji I/O w tle; krytyczne dla serwerów produkcyjnych, gdzie inicjalizacja w tle może powodować nieoczekiwane skoki I/O godziny po wdrożeniu

Przykład 2: Tworzenie systemu plików XFS dla serwera bazy danych

“`bash

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

“`

  • `-f` — wymusza tworzenie nawet jeśli wykryto istniejący podpis systemu plików; używaj tylko wtedy, gdy potwierdziłeś, że urządzenie można poświęcić
  • XFS nie obsługuje zmniejszania; starannie zaplanuj rozmiar woluminu przed formatowaniem

W przypadku obciążeń PostgreSQL lub MySQL na XFS ustaw również opcję montowania `noatime` w `/etc/fstab`, aby wyeliminować narzut zapisu czasu dostępu do i-węzłów przy każdej operacji odczytu.

Przykład 3: Tworzenie systemu plików Btrfs z RAID-1 na dwóch urządzeniach

“`bash

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

“`

Btrfs może natywnie obejmować wiele urządzeń blokowych. `-d raid1` tworzy lustro danych; `-m raid1` tworzy lustro metadanych. Jest to uzasadniona alternatywa dla programowego RAID mdadm w środowiskach, gdzie potrzebna jest również funkcjonalność migawek i podwoluminów.

Przykład 4: Tworzenie systemu plików vFAT dla dysku USB

“`bash

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

“`

  • `-n "BACKUP_USB"` — ustawia etykietę woluminu (etykiety FAT32 są ograniczone do 11 znaków, wielkie litery)
  • `-F 32` — jawnie wybiera FAT32 zamiast FAT16

Przykład 5: Tworzenie systemu plików F2FS na SSD

“`bash

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

“`

F2FS jest specjalnie zaprojektowany dla pamięci flash NAND. Zmniejsza wzmocnienie zapisu i zarządza wyrównywaniem zużycia na poziomie systemu plików. Na instancjach VPS Hosting opartych na pamięci masowej NVMe, F2FS może przewyższać ext4 w przypadku woluminów pamięci podręcznej o dużej rotacji zapisu.

Formatowanie całego dysku bez tablicy partycji

W określonych scenariuszach — woluminy fizyczne LVM, Ceph OSD lub urządzenia pamięci masowej do jednego celu — możesz zapisać system plików bezpośrednio na całym dysku zamiast na partycji:

“`bash

sudo mkfs.ext4 /dev/sdb

“`

Kiedy jest to właściwe:

  • Dysk jest dedykowany do jednego celu i elastyczność partycjonowania nie jest potrzebna
  • Przygotowujesz dysk dla LVM (`pvcreate` obsługuje to inaczej, ale koncepcja jest podobna)
  • Tworzysz obraz systemu plików na urządzeniu pętlowym

Kiedy jest to niewłaściwe:

  • Każdy dysk, który musi się uruchamiać (wymaga tablicy partycji z flagą rozruchu)
  • Każdy dysk współdzielony między wieloma systemami plików lub systemami operacyjnymi
  • Dyski w systemach, gdzie reguły udev lub narzędzia infrastruktury chmurowej oczekują tablicy partycji

Montowanie sformatowanej partycji i utrwalanie konfiguracji

Formatowanie tworzy system plików; montowanie sprawia, że jest on dostępny. Zawsze używaj odwołań opartych na UUID w `/etc/fstab` zamiast nazw urządzeń, ponieważ nazwy urządzeń (`/dev/sdb1`) nie są gwarantowane jako stabilne między restartami w systemach z wieloma dyskami lub pamięcią masową podłączaną na gorąco.

“`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` na końcu wpisu fstab kontroluje `dump` (narzędzie kopii zapasowej, ustaw na 0 aby wyłączyć) i kolejność przejścia `fsck` (2 oznacza sprawdzanie po głównym systemie plików; root powinien mieć 1).

Weryfikacja integralności systemu plików po formatowaniu

Nie zakładaj, że formatowanie zakończyło się sukcesem bez weryfikacji.

“`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

“`

Flaga `-n` zarówno dla `e2fsck` jak i `xfs_repair` wykonuje sprawdzenie na sucho bez modyfikowania systemu plików. Można to bezpiecznie uruchomić na zamontowanym systemie plików w celach diagnostycznych, choć pełna naprawa wymaga najpierw odmontowania.

Dokumentacja zaawansowanych opcji

OpcjaDotyczyEfekt
`-L <label>`WszystkiePrzypisuje czytelną dla człowieka etykietę systemu plików
`-b <block_size>`ext4, XFSUstawia rozmiar bloku (512, 1024, 2048, 4096 bajtów); większe bloki poprawiają przepustowość dla dużych plików, marnują miejsce dla małych plików
`-m <percent>`ext4Procent zarezerwowanych bloków dla roota (domyślnie 5%); zmniejsz do 1% na dużych woluminach danych
`-i <bytes-per-inode>`ext4Kontroluje gęstość i-węzłów; zmniejsz dla systemów plików przechowujących miliony małych plików
`-N <inode-count>`ext4Ustawia jawną liczbę i-węzłów; przydatne gdy znasz oczekiwaną liczbę plików
`-E lazy_itable_init=0`ext4Wyłącza leniwą inicjalizację i-węzłów; wolniejsze formatowanie, eliminuje operacje I/O w tle po wdrożeniu
`-f`XFSWymusza formatowanie nawet jeśli istnieje podpis systemu plików
`-d su=,sw=`XFSKonfiguruje jednostkę paska i szerokość dla I/O wyrównanego do RAID
`-F 32`vFATWymusza FAT32 (zamiast FAT16)
`-q`ext4Tryb cichy; pomija dane wyjściowe postępu (przydatne w skryptach)

Typowe pułapki i jak ich unikać

Formatowanie zamontowanego systemu plików: Linux nie zawsze temu zapobiega. Uruchomienie `mkfs` na zamontowanej partycji natychmiast uszkadza system plików i może powodować paniki jądra. Zawsze weryfikuj status montowania za pomocą `mount | grep /dev/sdb1` przed kontynuowaniem.

Wyczerpanie i-węzłów na ext4: Jeśli ustawisz duży rozmiar bloku (np. 4096 bajtów) na woluminie, który będzie przechowywał miliony małych plików (kolejki poczty, pamięci podręczne sesji), wyczerpiesz i-węzły na długo przed wyczerpaniem miejsca na dysku. Użyj `-i 4096` lub `-i 2048`, aby zwiększyć gęstość i-węzłów. Jest to szczególnie powszechny problem na serwerach Email Hosting i serwerach WWW o dużym ruchu przechowujących pliki dla każdej sesji.

XFS i zmniejszanie: Woluminów XFS nie można zmniejszyć po utworzeniu. Jeśli sformatujesz wolumin XFS o pojemności 2 TB i później będziesz potrzebować odzyskać miejsce, jedyną opcją jest kopia zapasowa, ponowne formatowanie i przywrócenie. Planuj rozmiary woluminów XFS zachowawczo lub używaj pod spodem cienkiego provisioningu LVM.

Wyrównanie pasków dla RAID i SSD: Formatowanie bez określenia wyrównania pasków na macierzy RAID lub SSD powoduje niewyrównane I/O, znacznie obniżając wydajność. Dla macierzy RAID-5 z paskiem 512 KB i 4 dyskami:

“`bash

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

“`

Gdzie `stride = stripe_size / block_size` i `stripe-width = stride * (data_disks)`.

Kolizje UUID po klonowaniu dysku: Klonowanie dysku za pomocą `dd` duplikuje UUID systemu plików. Dwa urządzenia z identycznymi UUID powodują błędy montowania i uszkodzenie danych. Po klonowaniu wygeneruj ponownie UUID:

“`bash

sudo tune2fs -U random /dev/sdb1 # ext4

sudo xfs_admin -U generate /dev/sdb1 # XFS

“`

Jest to krytyczna kwestia przy wdrażaniu Serwerów Dedykowanych z obrazów dysków lub provisioningu wielu węzłów z jednego szablonu.

Kwestie dotyczące systemu plików w środowiskach VPS i chmurowych

Na maszynach wirtualnych i instancjach chmurowych bazowa pamięć masowa jest często wirtualnym dyskiem z cienkim provisioningiem opartym na rozproszonym systemie pamięci masowej. Kilka decyzji `mkfs` staje się bardziej znaczących w tym kontekście:

  • Obsługa Discard/TRIM: Formatuj ext4 z `-E discard` lub dodaj opcję montowania `discard`, aby włączyć online TRIM, który zwraca zwolnione bloki do bazowej puli pamięci masowej i utrzymuje wydajność w czasie na instancjach VPS z cPanel opartych na SSD.
  • Tryb dziennika: W przypadku aplikacji wrażliwych na opóźnienia rozważ tryb dziennika `data=writeback` w `/etc/fstab` dla ext4. Wymienia to ścisłe porządkowanie danych na niższe opóźnienie zapisu, akceptowalne dla baz danych zarządzających własnymi dziennikami zapisu z wyprzedzeniem.
  • Unikaj formatowania swap jako systemu plików: Partycje swap używają `mkswap`, nie `mkfs`. Uruchomienie `mkfs` na partycji swap niszczy podpis swap bez tworzenia użytecznego systemu plików.

Podczas zarządzania pamięcią masową na Panelach Sterowania VPS, dodatkowe woluminy dysków zazwyczaj pojawiają się jako niesformatowane urządzenia blokowe. Przepływ pracy jest zawsze następujący: identyfikacja za pomocą `lsblk`, partycjonowanie jeśli potrzebne za pomocą `fdisk`/`gdisk`, formatowanie za pomocą `mkfs`, montowanie i utrwalanie w `/etc/fstab`.

Macierz decyzyjna: wybór właściwego systemu plików

Użyj tej macierzy, aby wybrać system plików na podstawie głównego ograniczenia:

Główne wymaganieZalecany system plikówUnikaj
Ogólny serwer Linuxext4Btrfs (narzut złożoności)
Duże pliki, bazy danych, NFSXFSFAT32 (brak uprawnień)
Migawki, podwoluminy, NASBtrfsext4 (brak natywnych migawek)
Wymienne nośniki USB między systemami operacyjnymiexFAT lub FAT32ext4 (słaba obsługa Windows)
Partycja systemowa EFIFAT32 (`mkfs.vfat -F 32`)Jakikolwiek inny niż FAT
NVMe SSD, duża rotacja zapisuF2FS lub XFSFAT32
Wolumin danych przy podwójnym rozruchu WindowsNTFSext4
Miliony małych plikówext4 z `-i 2048`XFS (stała liczba i-węzłów)

Techniczna lista kontrolna kluczowych wniosków

Przed uruchomieniem `mkfs` w dowolnym środowisku, przejdź przez tę listę kontrolną:

  • Potwierdź docelowe urządzenie za pomocą `lsblk -f` i `blkid` — nigdy nie polegaj na pamięci ani założeniach
  • Odmontuj cel za pomocą `umount /dev/sdXN` i zweryfikuj za pomocą `mount | grep sdX`
  • Wykonaj kopię zapasową danych na urządzeniu; `mkfs` jest nieodwracalne
  • Wybierz typ systemu plików na podstawie obciążenia (patrz macierz decyzyjna powyżej), a nie przyzwyczajenia
  • Ustaw etykietę systemu plików za pomocą `-L` dla czytelnej identyfikacji w dziennikach i `fstab`
  • Zmniejsz zarezerwowane bloki na dużych woluminach danych (`-m 1` dla ext4), aby odzyskać użyteczne miejsce
  • Wyłącz leniwą inicjalizację (`-E lazy_itable_init=0`) na serwerach produkcyjnych, aby zapobiec skokom I/O po wdrożeniu
  • Używaj UUID w `/etc/fstab`, a nie nazw urządzeń, dla trwałości montowania
  • Sprawdź poprawność za pomocą `mount -a` po edycji `/etc/fstab`, aby wykryć błędy przed restartem
  • Uruchom `e2fsck -n` lub `xfs_repair -n` po formatowaniu, aby potwierdzić integralność systemu plików
  • Wygeneruj ponownie UUID na każdym dysku sklonowanym z obrazu szablonu

FAQ

P: Czy mogę uruchomić `mkfs` na partycji, która jest aktualnie zamontowana?

O: Technicznie jądro może na to pozwolić, ale zrobienie tego natychmiast uszkadza system plików i może wywołać paniki jądra lub utratę danych. Zawsze najpierw odmontuj partycję i potwierdź za pomocą `mount | grep <device>` przed uruchomieniem `mkfs`.

P: Jaka jest różnica między `mkfs.ext4` a `mke2fs`?

O: `mkfs.ext4` jest dowiązaniem symbolicznym lub wrapperem, który wywołuje `mke2fs` z domyślnymi ustawieniami `-t ext4`. Są one funkcjonalnie identyczne. `mke2fs` jest kanonicznym narzędziem i akceptuje pełen zakres opcji tworzenia ext2/ext3/ext4.

P: Dlaczego formatowanie dużej partycji ext4 trwa tak długo w porównaniu z XFS?

O: ext4 inicjalizuje tablicę i-węzłów dla każdej grupy bloków w czasie formatowania (chyba że ustawiono `lazy_itable_init=1`). Na woluminie 4 TB wiąże się to z zapisem gigabajtów wyzerowanych danych tablicy i-węzłów. XFS odkłada inicjalizację struktury do czasu wykonania, dzięki czemu `mkfs.xfs` kończy się w sekundach niezależnie od rozmiaru woluminu.

P: Jak zmienić etykietę systemu plików po formatowaniu bez ponownego formatowania?

O: Dla ext4 użyj `sudo tune2fs -L "NewLabel" /dev/sdb1`. Dla XFS użyj `sudo xfs_admin -L "NewLabel" /dev/sdb1`. Dla FAT32 użyj `sudo fatlabel /dev/sdb1 NEWLABEL`. Zmiana etykiety nie wpływa na dane.

P: Czy bezpiecznie jest używać `mkfs` na woluminie logicznym LVM?

O: Tak. Woluminy logiczne LVM pojawiają się jako urządzenia blokowe (np. `/dev/mapper/vg0-lv_data` lub `/dev/vg0/lv_data`) i są traktowane identycznie jak fizyczne partycje przez `mkfs`. Jest to standardowy przepływ pracy dla produkcyjnej pamięci masowej Linux: utwórz LV za pomocą `lvcreate`, sformatuj za pomocą `mkfs`, zamontuj i utrwal w `/etc/fstab`.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij