Előfordul, hogy a df -h szerint a lemez tele van (vagy majdnem tele), a du paranccsal összeadott mappaméretek viszont jóval kevesebbet mutatnak, és nem található, mi foglalja a hiányzó helyet. A két parancs használatáról a Hogyan ellenőrizhető a lemezhasználat Linux szerveren (du és df parancsok)? cikk szól. Az eltérésnek néhány tipikus oka van; ezeket érdemes sorban végignézni.
1. Törölt, de még nyitott fájlok
A leggyakoribb ok: egy nagy fájlt (jellemzően naplófájlt) törölt, de egy futó program (webszerver, adatbázis, PHP folyamat) még nyitva tartja. Linuxon a fájl tartalma ilyenkor nem szabadul fel, amíg a program be nem zárja: a fájl már nem látszik a könyvtárban, így a du sem számolja, a df szerint viszont továbbra is foglalja a helyet.
A törölt, de nyitott fájlok listája:
sudo lsof +L1
vagy, ha az lsof nincs telepítve (sudo dnf install lsof / sudo apt install lsof):
sudo find /proc/*/fd -ls 2>/dev/null | grep '(deleted)'
Egy jellemző kimenet:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
httpd 1234 apache 2w REG 253,0 8589934592 0 13371 /var/log/httpd/error_log (deleted)
A COMMAND oszlop mutatja a programot, a SIZE/OFF a fájl méretét bájtban. A hely felszabadításához indítsa újra az érintett szolgáltatást:
sudo systemctl restart httpd
Ha a szolgáltatást nem lehet újraindítani, a fájl tartalma a folyamat fájlleíróján keresztül is kiüríthető. A PID és az FD oszlop számából (a betű nélkül, a fenti példában 1234 és 2):
sudo truncate -s 0 /proc/1234/fd/2
Hogyan kerülheti el legközelebb?
Egy használatban lévő naplófájlt ne törölje (rm), hanem ürítse ki:
sudo truncate -s 0 /var/log/httpd/error_log
Így a program tovább írhatja, és a hely azonnal felszabadul. A nagy naplófájlok megkereséséről: Hogyan találd meg és távolítsd el a nagy error_log fájlokat Linux alatt.
2. Elfogytak az inode-ok
Ha a „No space left on device” hiba ellenére a df -h szerint van szabad hely, a fájlrendszeren a fájlok száma érhette el a korlátot. Ezt a -i kapcsoló mutatja:
df -i
Ha az IUse% oszlop 100%-hoz közeli, rengeteg apró fájl van a lemezen, jellemzően munkamenet-fájlok (sessions), gyorsítótár vagy kézbesítetlen levelek. Hogy melyik könyvtárban van a legtöbb fájl:
sudo du --inodes -x / 2>/dev/null | sort -n | tail -n 20
Az inode fogalmáról a Mit jelent egy inode? cikkben olvashat.
3. A root számára fenntartott hely (ext4)
Az ext4 fájlrendszer alapértelmezésként a hely 5%-át a root felhasználónak tartja fenn, hogy a rendszer akkor is működőképes maradjon, ha a felhasználók megtöltötték a lemezt. Ezért a df szerinti Used és Avail összege kisebb a Size értékénél, és egy normál felhasználó már akkor „tele” lemezt lát, amikor a root még tud írni.
Adatlemezen (nem a rendszerlemezen) a fenntartott hely csökkenthető, például 1%-ra:
sudo tune2fs -m 1 /dev/vdb1
Az XFS fájlrendszer (AlmaLinux, Rocky Linux alapértelmezése) nem tart fenn ilyen helyet.
4. Csatolási pont alatt eltakart fájlok
Ha egy könyvtárba (például /mnt/data vagy /home) egy másik lemezt csatolt, a könyvtárban korábban lévő fájlokat a csatolt lemez eltakarja: a du nem látja őket, de a rendszerlemezen helyet foglalnak. Ez jellemzően akkor fordul elő, ha a második lemez egy újraindítás után nem csatolódott fel, és közben a programok a rendszerlemezre írtak.
Az eltakart fájlok úgy tekinthetők meg, hogy a gyökér-fájlrendszert egy másik helyre is felcsatolja:
sudo mkdir /mnt/rootfs
sudo mount --bind / /mnt/rootfs
sudo du -sh /mnt/rootfs/mnt/data
Ha itt adatot talál, helyezze át a csatolt lemezre, majd bontsa a kötést:
sudo umount /mnt/rootfs
5. Egyéb okok
- A systemd napló: a
journalctl --disk-usageparanccsal ellenőrizhető, és ajournalctl --vacuum-size=500Mparanccsal csökkenthető (lásd: Naplófájlok olvasása Linuxon). - Régi kernelek és a csomagkezelő gyorsítótára:
sudo dnf clean allvagysudo apt cleanéssudo apt autoremove. - Docker: a nem használt képek és konténerek a
/var/lib/dockeralatt sok helyet foglalhatnak; adocker system dfmutatja, adocker system prunetakarítja. - Adatbázis bináris naplók: a MariaDB/MySQL replikációs naplói (
binlog) korlátlanul nőhetnek, ha nincs beállítva lejárati idejük.
Ha a hely tartósan kevés, a lemez bővíthető (lásd: Hogyan bővíthetem VPS csomagom erőforrásait? és Hogyan növelhetem meg a fájlrendszert a VPS lemezének bővítése után?).