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 |
|---|---|
| Superblok | podaci o samom fajl sistemu: veličina, broj blokova, stanje, UUID |
| Tabela inode-ova | metapodatke o svakom fajlu |
| Blokovi podataka | sam sadržaj fajlova |
| Journal | dnevnik 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ži | Kompromis |
|---|---|---|
journal | i metapodaci i podaci | najsigurnije, najsporije |
ordered | metapodaci, uz garanciju redosleda | podrazumevano |
writeback | samo metapodaci | brž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
| Oznaka | Menja se kad |
|---|---|
| atime | fajl je pročitan |
| mtime | sadržaj je izmenjen |
| ctime | izmenjen 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 / rw | samo čitanje / čitanje i upis |
noatime | ne ažurira vreme pristupa |
noexec | zabranjuje izvršavanje programa |
nosuid | ignoriše suid bit |
nodev | ignoriš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
| ext4 | XFS | |
|---|---|---|
| Najveći fajl | 16 TB | 8 EB |
| Najveći fajl sistem | 1 EB | 8 EB |
| Smanjivanje | moguće | nije moguće |
| Inode-ovi | fiksni broj | dinamič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
- Pogledaj
df -hidf -iza svoje particije - Uzmi neki fajl i pogledaj njegov
statispis - Napravi fajl od nekoliko bajtova i uporedi
ls -lsadu -h - Pročitaj fajl sa
cat, pa proveri je li seatimepromenio - Pogledaj sa čime su montirane tvoje particije
(
mount | grep ^/dev) - Kroz
tune2fs -lpronađi veličinu bloka i rezervisani prostor - 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
Post a Comment