Karakteristike file sistema

Prethodna lekcija je pokrila koji fajl sistemi postoje. Ova objašnjava kako rade iznutra — i zašto ti to treba.

Konkretno: zašto disk ume da bude „pun" iako df pokazuje da ima mesta, zašto server posle nagle nestanke struje ne izgubi podatke, i zašto se logovi na aktivnom serveru podešavaju sa noatime.

Od čega se fajl sistem sastoji

Disk sam po sebi zna samo za blokove — numerisane komadiće prostora. Fajl sistem je sloj koji od toga pravi fajlove i direktorijume.

StrukturaŠta sadrži
Superblokpodaci o samom fajl sistemu: veličina, broj blokova, stanje, UUID
Tabela inode-ovametapodatke o svakom fajlu
Blokovi podatakasam sadržaj fajlova
Journaldnevnik nedovršenih operacija

Superblok je toliko važan da se čuva u više kopija po disku — ako se glavni ošteti, sistem se može oporaviti iz rezervne.

Inode

Ovo je pojam koji vredi razumeti, jer objašnjava mnogo toga.

Inode je zapis o fajlu, i sadrži sve osim dve stvari:

  • tip fajla i dozvole
  • vlasnika i grupu
  • veličinu
  • vremenske oznake
  • broj linkova
  • adrese blokova gde je sadržaj

Ne sadrži ime fajla ni sam sadržaj. Ime stoji u direktorijumu, koji je zapravo tabela parova ime → broj inode-a.

$ ls -i
 262145 beleske.txt
 262146 skripta.sh
 262203 Documents
$ stat beleske.txt
  File: beleske.txt
  Size: 1240        Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 262145      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/ alen)   Gid: ( 1000/ alen)
Access: 2026-08-21 14:32:07
Modify: 2026-08-21 14:31:52
Change: 2026-08-21 14:31:52

Odatle sledi da preimenovanje fajla ne dira ni inode ni podatke — menja se samo zapis u direktorijumu. Zato je mv unutar istog fajl sistema trenutan, bez obzira na veličinu fajla.

Disk je pun, a ima mesta

Broj inode-ova se određuje pri formatiranju i ne može se kasnije povećati na ext4. Ako ih potrošiš, ne možeš napraviti nijedan nov fajl iako prostora ima.

$ df -h /var
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        50G   22G   28G  45% /var

$ df -i /var
Filesystem      Inodes   IUsed  IFree IUse% Mounted on
/dev/sda3      3276800 3276800      0  100% /var

Prvi ispis kaže da je disk 45% pun. Drugi otkriva pravi problem — svi inode-ovi su zauzeti. Poruka koju dobijaš je zbunjujuća:

touch: cannot touch 'test': No space left on device

Uzrok je gotovo uvek isti: ogroman broj sitnih fajlova. Redovi mejlova, keš sesija, privremeni fajlovi koje niko ne čisti. Ko troši:

# for d in /var/*; do echo "$(find "$d" | wc -l) $d"; done | sort -rn | head

Zato je df -i obavezna druga komanda kad ti neko kaže da je disk pun. XFS ovaj problem nema u istoj meri, jer inode-ove alocira dinamički.

Journaling

Upis fajla nije jedna operacija nego nekoliko: izmena inode-a, označavanje blokova kao zauzetih, upis podataka, izmena direktorijuma. Ako struja nestane između njih, fajl sistem ostaje u nedoslednom stanju.

Journal je dnevnik: pre nego što nešto uradi, fajl sistem tu upiše šta namerava. Posle pada sistem pročita dnevnik i ili dovrši ili poništi nedovršene operacije.

Praktična posledica: server posle nestanka struje ustaje za nekoliko sekundi umesto da satima proverava ceo disk. To je i razlog zašto danas gotovo niko ne koristi fajl sisteme bez journal-a.

Tri režima kod ext4

RežimŠta se beležiKompromis
journali metapodaci i podacinajsigurnije, najsporije
orderedmetapodaci, uz garanciju redosledapodrazumevano
writebacksamo metapodacibrže, fajl posle pada može imati smeće
$ tune2fs -l /dev/sda1 | grep -i journal
Filesystem features:  has_journal ext_attr resize_inode dir_index
Journal inode:        8

Podrazumevani ordered je dobar izbor u skoro svakoj situaciji. XFS ima samo ekvivalent writeback režima — beleži metapodatke, ne podatke.

Veličina bloka

Blok je najmanja jedinica prostora. Podrazumevano je 4 KB.

$ tune2fs -l /dev/sda1 | grep "Block size"
Block size:               4096

Fajl od 100 bajtova zauzima ceo blok od 4 KB. Ostatak se ne može iskoristiti — to je unutrašnja fragmentacija. Zato milion sitnih fajlova troši mnogo više prostora nego što je zbir njihovih veličina:

$ ls -l sitni.txt
-rw-r--r--. 1 alen alen 100 Aug 21 14:32 sitni.txt

$ du -h sitni.txt
4.0K    sitni.txt

ls pokazuje stvarnu veličinu, du zauzeti prostor. Razlika između to dvoje često zbunjuje.

Vremenske oznake

OznakaMenja se kad
atimefajl je pročitan
mtimesadržaj je izmenjen
ctimeizmenjen je inode — dozvole, vlasnik, ime

Ovde je bitan atime. Znači da čitanje fajla izaziva upis na disk — svaki `cat`, svaki pristup veb servera nekoj slici.

Na serveru sa velikim prometom to je značajno opterećenje, pa se isključuje kroz opcije montiranja u /etc/fstab:

/dev/sda3  /var  xfs  defaults,noatime  0 0

Moderna jezgra podrazumevano koriste relatime, kompromis koji atime ažurira najviše jednom dnevno. Za većinu sistema je dovoljan; noatime uzimaš kad ti trebaju poslednji procenti performansi i siguran si da nijedna aplikacija ne zavisi od vremena pristupa.

Opcije montiranja

$ mount | grep sda3
/dev/sda3 on /var type xfs (rw,relatime,attr2,inode64,noquota)
OpcijaŠta radi
ro / rwsamo čitanje / čitanje i upis
noatimene ažurira vreme pristupa
noexeczabranjuje izvršavanje programa
nosuidignoriše suid bit
nodevignoriše fajlove uređaja

Poslednje tri su bezbednosne. Za /tmp, u koji svako sme da piše, uobičajena kombinacija je:

/dev/sda5  /tmp  ext4  defaults,nosuid,nodev,noexec  0 2

Time se sprečava da neko ostavi izvršni program u /tmp i pokrene ga.

Rezervisani prostor

Ext fajl sistemi podrazumevano čuvaju 5% prostora za root:

$ tune2fs -l /dev/sda1 | grep -i reserved
Reserved block count:     655360
Reserved GID:             0

Svrha je da sistem nastavi da radi i kad se disk napuni — root i dalje može da upiše log i popravi situaciju. Zato df ume da pokaže 100% zauzeća a sistem još diše.

Na disku od 4 TB namenjenom samo za podatke, 5% je 200 GB bačenog prostora. Tamo se smanjuje:

# tune2fs -m 1 /dev/sdb1

Nikad ne postavljaj na nulu na sistemskoj particiji — ostaješ bez rezerve baš kad ti najviše treba.

Provera stanja

ext4

$ tune2fs -l /dev/sda1

Vredi pogledati red Filesystem state. Ako piše clean, sve je u redu. Provera:

# fsck -n /dev/sda1

Fajl sistem mora biti odmontiran pre popravke. Opcija -n samo prijavljuje probleme, bez ispravljanja — to je jedini bezbedan način da pogledaš montiran fajl sistem.

XFS

$ xfs_info /var
# xfs_repair -n /dev/sdb1

XFS nema fsck u klasičnom smislu; koristi xfs_repair, i takođe traži odmontiran fajl sistem.

Ograničenja

ext4XFS
Najveći fajl16 TB8 EB
Najveći fajl sistem1 EB8 EB
Smanjivanjemogućenije moguće
Inode-ovifiksni brojdinamički

Red o smanjivanju je najvažniji u praksi. XFS particija se može proširiti u radu, ali nikada smanjiti — jedini put je backup, ponovno formatiranje i vraćanje podataka. Ovo vredi znati pre nego što raspodeliš prostor, ne posle.

Vežba

  1. Pogledaj df -h i df -i za svoje particije
  2. Uzmi neki fajl i pogledaj njegov stat ispis
  3. Napravi fajl od nekoliko bajtova i uporedi ls -l sa du -h
  4. Pročitaj fajl sa cat, pa proveri je li se atime promenio
  5. Pogledaj sa čime su montirane tvoje particije (mount | grep ^/dev)
  6. Kroz tune2fs -l pronađi veličinu bloka i rezervisani prostor
  7. Napravi mali fajl sistem u fajlu, montiraj ga i namerno mu potroši sve inode-ove sa hiljadama praznih fajlova

Povezano: Tipovi fajl sistema · mkfs · tune2fs · /etc/fstab · df · Administracija i servisi

Comments

Popular posts from this blog

Početak u Linuxu — šta je i zašto se uči

Konverzija tipova podataka u Pythonu

groupadd