Ukaz du podrobno: primeri za analizo porabe diska

Linux Branje: 6 min

du (disk usage) pokaže, koliko prostora na disku zaseda datoteka ali imenik. Za hitro iskanje prostora, skupaj z ukazom df, recept daje članek Kako preverim porabo diska na strežniku Linux?. Ta članek po vrsti pregleda stikala in posebnosti du: zakaj kaže drugače kot ls, kako obravnava trde povezave in redke (sparse) datoteke ter kako filtriraš njegov izpis.

Primere smo zagnali v sistemu AlmaLinux 10.2, z ukazom du iz GNU coreutils 9.5, na vzorčnem imeniku (/var/www/pelda.hu), v katerem so bili dnevniki, naložen videoposnetek, varnostna kopija, njena trda povezava in 2-GB redka slika diska.

Osnove

du -sh /var/www/pelda.hu      # imenik skupaj
du -h /var/www/pelda.hu       # vsi podimeniki, rekurzivno
  • -s (summarize): le vsota, brez podimenikov;
  • -h (human-readable): enote K, M, G namesto števila blokov.

V imenike drugih uporabnikov du kot navaden uporabnik ne vidi in to javi kot napako (du: cannot read directory '/var/log/chrony': Permission denied). Tudi takrat izpiše vsoto, vendar je manjša od resnične: v preizkusu je du -sh /root kot navaden uporabnik izpisal 0, poleg tega sporočilo o napaki, in se ustavil z izhodno kodo 1. Sistemske imenike meri s sudo, sporočil o napakah pa ne skrivaj (2>/dev/null), dokler ne veš, kaj je du izpustil.

Nadomestni znak * ne vključuje datotek in imenikov, ki se začnejo s piko (skritih). du -sh * zato lahko pokaže manj kot du -sh .; v preizkusu je s seznama izpadla 5-MB datoteka .rejtett-nagy. Skupaj s skritimi elementi izpiše du -h -d 1 ..

Globina in razvrščanje

sudo du -h -d 1 /var/www/pelda.hu | sort -h
85M     /var/www/pelda.hu/logs
120M    /var/www/pelda.hu/public_html
300M    /var/www/pelda.hu/backup
505M    /var/www/pelda.hu

-d 1 (dolgo: --max-depth=1) izpiše le neposredne podimenike. sort -h pravilno razvrsti velikosti v človeški obliki (K, M, G); sort -rh obratno, od največje, | head pa obdrži le prve vrstice.

Stikala du v sistemu AlmaLinux 10: velikosti map po -d 1 in sort -h, navidezna velikost 2.5G, mapa backup po ls -lh 600M, du trdo povezavo šteje enkrat, redka slika diska 0

Tudi datoteke, ne le imeniki

sudo du -ah /var/www/pelda.hu | sort -rh | head -5

-a (all) izpiše tudi datoteke. V preizkusu se je seznam začel s celotnim imenikom, 300-MB varnostno kopijo in 120-MB videoposnetkom.

Vsota za več elementov: -c

sudo du -ch /var/www/pelda.hu/logs/*.log*
15M     logs/access.log.1
15M     logs/access.log.2
15M     logs/access.log.3
40M     logs/error.log
85M     total

-c na konec doda vrstico total. Uporabno je, če te zanima skupna velikost datotek, ki ustrezajo vzorcu (na primer vseh dnevnikov).

Izključitev in prag

sudo du -sh --exclude='*.log*' /var/www/pelda.hu   # brez dnevnikov: 420M
sudo du -h -t 100M -d 3 /var/www/pelda.hu          # le tiste nad 100 MB

--exclude izpusti datoteke in imenike, ki ustrezajo vzorcu (navedeš ga lahko večkrat). Vzorec postavi med enojne narekovaje, sicer ga lupina razširi že pred du. -t (--threshold) skrije elemente, manjše od navedenega, tako tudi v globoki strukturi imenikov ostanejo le veliki elementi. Z negativno vrednostjo deluje obratno: -t -100M pokaže le elemente z največ 100 MB (v preizkusu imenik logs). S pozitivnim pragom:

120M    ./public_html/wp-content/uploads
120M    ./public_html/wp-content
120M    ./public_html
300M    ./backup
505M    .

Znotraj enega datotečnega sistema: -x

Pri merjenju korenskega imenika du privzeto prestopi tudi na druge priklopljene datotečne sisteme (na primer na ločeno particijo /boot ali omrežni pogon). -x to prepreči:

sudo du -h -d 1 -x / | sort -h | tail

V preizkusu se je du -shx / izvedel brez sporočil o napakah, z 1,3 GB, du -sh / je pokazal 1,4 GB in vmes zaradi datotek v /proc, ki so ravno izginjale, izpisal napake (du: cannot access '/proc/1210/fd/4': No such file or directory). Razlika sta /boot in /boot/efi na ločeni particiji ter /run v pomnilniku. Priklopljene datotečne sisteme našteje df -h.

-d 1 omeji le število izpisanih vrstic: du tudi takrat prehodi celotno drevo imenikov, da izračuna vsote. Na velikem datotečnem sistemu zato omejitev globine merjenja ne pospeši, le skrajša izpis. 2>/dev/null pogoltne sporočila o napakah iz /proc in podobnih imenikov.

Druga enota: -B, -k, -m

du -s -BM logs      # v megabajtih: 85M
du -sk logs         # v kilobajtih, brez enote, za skripte
du -sb logs         # v bajtih (navidezna velikost)

V skriptah sta -k ali -b boljša od -h, ker je izpis mogoče obdelati kot število.

Zakaj kaže drugače kot ls?

Zasedeni prostor in navidezna velikost

ls -l pokaže navidezno velikost datoteke (koliko bajtov vsebuje), du pa prostor, dejansko zaseden na disku. Običajno sta blizu, v dveh primerih pa se zelo razlikujeta.

Redke (sparse) datoteke

Slike navideznih diskov, datoteke podatkovnih baz in nekateri dnevniki so lahko redki: datoteka je velika, njeni deli z ničelno vsebino pa ne zasedajo prostora. V preizkusu slika diska, ustvarjena z ukazom truncate -s 2G:

ls -lh backup/lemezkep.img                  # 2.0G
du -h backup/lemezkep.img                   # 0
du -h --apparent-size backup/lemezkep.img   # 2.0G

--apparent-size da navidezno velikost, kot ls. Celoten vzorčni imenik je bil tako videti velik 2,5 GB namesto 505 MB. Če takšno datoteko kopiraš z orodjem, ki ne obravnava redkih datotek, lahko kopija zasede celotno velikost (cp jih privzeto obravnava, pri rsync je potrebno stikalo --sparse).

Trde povezave

Če ima datoteka dve imeni (trda povezava), na disku zaseda prostor le enkrat. ls -l v drugem stolpcu pokaže, koliko imen ima datoteka, in v vrstici total šteje obe; du jo šteje le enkrat:

-rw-r--r--. 2 root root 300M Oct 28 20:36 hardlink.tar.gz
-rw-r--r--. 1 root root 2.0G Oct 28 20:36 lemezkep.img
-rw-r--r--. 2 root root 300M Oct 28 20:36 mentes-2026-10.tar.gz

V preizkusu je bila mapa po ls -lh backup/ 600M, po du pa 300M. du -h backup/* drugega imena sploh ni izpisal, ker ga je že preštel pri prvem. Če želiš vsako ime šteti posebej, uporabi stikalo -l (--count-links): vzorčni imenik je tako dosegel 805 MB. Trde povezave uporabljajo na primer nekateri programi za varnostno kopiranje (skupne datoteke zaporednih kopij zasedajo prostor enkrat), zato je velikost imenika varnostnih kopij, izmerjena z du, lahko precej manjša od vsote datotek.

Simbolne povezave

du privzeto meri samo povezavo, ne tega, na kar kaže. V preizkusu je bila velikost povezave na imenik backup po du -sh 0, s stikalom -H pa 300M:

sudo du -sh /tmp/mentes-link     # 0
sudo du -shH /tmp/mentes-link    # 300M

-H sledi le povezavi, navedeni v ukazni vrstici, ne tistim v drevesu imenikov. -L sledi vsem povezavam, zato se merjenje lahko razširi tudi na mesta zunaj preučevanega imenika; uporabljaj ga le upravičeno.

Število datotek: –inodes

sudo du --inodes -s /usr /var

--inodes namesto bajtov da število datotek in imenikov. Uporabno je, če se je disk po df -i napolnil zaradi inodov (veliko drobnih datotek predpomnilnika ali sej); tako ugotoviš, v katerem imeniku je največ datotek. O inodih piše članek Kaj pomeni inode?.

Čas spremembe: –time

sudo du -h --time -d 1 /var/www/pelda.hu

Ob vsaki vrstici izpiše čas zadnje spremenjene datoteke v tem imeniku. Tako je vidno, v katero mapo nekaj ravno zdaj piše (na primer podivjan dnevnik).

Interaktivni pogled: ncdu

ncdu je različica du z menijem: imenik enkrat izmeri, nato se lahko v njem premikaš s puščicami, razvrščaš in s tipko d tudi brišeš. V AlmaLinuxu je v repozitoriju EPEL (glej: Namestitev repozitorija EPEL v AlmaLinux):

sudo dnf install ncdu
sudo ncdu /var/www/pelda.hu

ncdu 1.22 na vzorčnem imeniku: velikost map backup, public_html in logs s stolpci, spodaj skupna poraba diska 505.0 MiB in navidezna velikost 2.5 GiB

Spodnja vrstica prikazuje dejansko (Total disk usage) in navidezno velikost (Apparent size), kot du in du --apparent-size. V ncdu pomoč prikliče ?, q pa izstopi. Pri velikem imeniku ga tudi tu stikalo -x drži na enem datotečnem sistemu (sudo ncdu -x /).

Če du kaže manj kot df

Če je disk po df poln, vsota du pa precej manjša, verjetno tekoči program še drži odprto že izbrisano datoteko; to opisuje članek Disk je poln, du pa tega ne pokaže. O ravnanju z velikimi dnevniškimi datotekami govori članek o iskanju velikih datotek error_log.

Če je prostora tudi po čiščenju premalo, lahko med paketi KVM VPS preideš na paket z več prostora; na gostovanju cPanel pa članek Preverjanje porabe diska v cPanelu pokaže, kje isto vidiš grafično.

Nazaj: Linux – članki (76)