Il problema
Su un sistema basato su Linux, il file system di root viene riempito da un processo sconosciuto. Continua indipendentemente da quali file vengono spostati o eliminati dal file system.
# df -hP / /dev/mapper/VGExaDb-LVDbSys1 ext3 30G 29G 0 100% /
Non ci sono file di grandi dimensioni da considerare per l'intero file system:
# find / -xdev -type f -size +100M -exec ls -lh {} \;
Non ci sono directory di grandi dimensioni per tenere conto del file system completo:
# du -h --max-depth=1 / 42M /sbin 13M /etc 2.4G /usr 45M /tmp 451M /var 192M /lib (and so on) ...
La soluzione
A un certo punto in passato, due o più processi utilizzavano un file; ad esempio,/tmp/top.log. Un processo ha interrotto l'accesso a /tmp/top.log eliminandolo (in realtà è una voce di directory) e l'altro processo ha continuato a scrivere nel riferimento dell'inode, consentendo al file di continuare a crescere.
Questo può essere visto nell'output di:“lsof +L 1 ”
# lsof +L 1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME top 34261 root 1W REG 252,0 21460567592 0 1785896 /tmp/top.log (deleted)
Erano elencati anche altri file, ma erano molto più piccoli.
Questo mostra che user=root stava eseguendo un comando top che stava effettuando lo spooling su /tmp/top.log e che attualmente non ci sono collegamenti a quel file. Quel file di spool aveva una dimensione di 21 Gb ma non riportava nell'output "du –h –max-depth=1 /", dove /tmp elencava solo 45M.
Segui i passaggi seguenti per identificare e terminare tale processo.
1. Identifica i file sul sistema che hanno meno di 1 collegamento con il comando:
# lsof +L 1
2. Interrompere tutti i processi che stanno scrivendo su qualsiasi file insolitamente grande elencato. Nell'esempio sopra, eseguiresti:
# kill 34261
3. Lo spazio verrà rilasciato quando il processo finale smetterà di utilizzare il file.