df segnala che una partizione ext4 è piena, ma non ci sono dati

Recentemente ho ricevuto un avvertimento, che la mia partizione home è piena. È un Ext4-Partition montato su /home , /dev/sda è un SSD da 240 GB:

 hann[email protected] ~> df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 19G 5.2G 13G 30% / none 3.9G 792K 3.9G 1% /dev none 3.9G 2.4M 3.9G 1% /dev/shm none 3.9G 712K 3.9G 1% /var/run none 3.9G 0 3.9G 0% /var/lock /dev/sda5 193G 175G 7.9G 96% /home /dev/sdb5 357G 92G 264G 26% /mnt/schacht 

come puoi vedere, df -h (e gparted) riporta che /dev/sda5 è pieno al 96%. Tuttavia, l’Ubuntu Disk Usage Analyzer e du -h trovano solo circa 89 GB di dati. ~/.gvfs è vuoto e non ci sono altri filesystem montati sotto /home . Come può essere? Ho già provato a eseguire du come root, ma non cambia nulla.

 [email protected] ~# sudo fdisk -l /dev/sda Disk /dev/sda: 240.1 GB, 240057409536 bytes 255 heads, 63 sectors/track, 29185 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0003e4c5 Device Boot Start End Blocks Id System /dev/sda1 * 1 2432 19530752 83 Linux /dev/sda2 2432 28450 208984065 5 Extended /dev/sda5 2432 27963 205077504 83 Linux /dev/sda6 27963 28450 3905536 82 Linux swap / Solaris 

Modifica: whoops – Ho solo eseguito du on ~ non su /home – c’erano molti dati copiati non intenzionalmente su /home . Il mio male, mi dispiace.

Potrebbe essere che alcuni processi abbiano ancora i file cancellati aperti. Se questo è il caso, non appariranno nell’output ma saranno comunque conteggiati nell’output di df .

Un modo rapido per controllarli è elencare /proc come utente root (suggerimento sudo su dovrebbe ottenere una shell di root). Qualsiasi file aperto, ma cancellato, avrà (deleted) alla fine del nome di destinazione del link simbolico.

 ls -l /proc/*/fd/* | grep deleted | grep /home 

dovrebbe darti una lista di tutti i file aperti. Una volta ottenuto ciò, un ls -lL del file specifico dovrebbe darti la dimensione del file.

Ad esempio (usando /tmp sul mio sistema perché non ci sono esempi su /home qui) vedo alcuni file di proprietà dell’utente mysql .

 [email protected]:/$ sudo su [email protected]:/# ls -l /proc/*/fd/* | grep deleted | grep /tmp lrwx------ 1 root root 64 Oct 13 06:30 /proc/1489/fd/11 -> /tmp/ibwmCqpg (deleted) lrwx------ 1 root root 64 Oct 13 06:30 /proc/1491/fd/12 -> /tmp/ib9MTMQi (deleted) [email protected]:/# ls -lL /proc/1489/fd/11 -rw------- 0 mysql2 mysql2 0 Aug 24 14:09 /proc/1489/fd/11 [email protected]:/# ls -lL /proc/1491/fd/12 -rw------- 0 mysql mysql 1320 Oct 15 13:40 /proc/1491/fd/12 

Se si dispone di processi aperti con file eliminati di grandi dimensioni, interrompere il processo dovrebbe essere sufficiente per recuperare lo spazio su disco. In alternativa, il riavvio dovrebbe fare la stessa cosa.

Ogni file system ha solo una certa quantità di inode e blocchi che possono essere memorizzati su di esso. Anche nel caso ci sia abbastanza spazio, non puoi andare oltre.

Controlla le tue impostazioni con

 dumpe2fs /dev/sda5 

(solo le prime 50 linee sono importanti qui).

Se si hanno molti piccoli file che sono più piccoli del blocco, viene sprecato molto spazio.