web-dev-qa-db-fra.com

df signale qu'une partition ext4 est pleine, mais il n'y a pas de données

J'ai récemment reçu un avertissement, que ma partition home est pleine. C'est une partition Ext4 montée sur /home, /dev/sda est un SSD de 240 Go:

hannes@XFLR6 ~> 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

comme vous pouvez le constater, df -h (et gparted) indique que /dev/sda5 est plein à 96%. Cependant, Ubuntu Disk Usage Analyzer et du -h ne trouvent que 89 Go environ de données. ~/.gvfs est vide et il n'y a pas d'autres systèmes de fichiers montés sous /home. Comment cela peut-il être? J'ai déjà essayé de lancer du en tant que root, mais cela ne change rien.

root@XFLR6 ~# 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

Edit: whoops - Je n'ai exécuté que du sur ~ pas sur /home - de nombreuses données ont été copiées par inadvertance sur /home. Mon mauvais, désolé.

6
hannes

Il se peut qu'un processus ait encore des fichiers supprimés ouverts. Si tel est le cas, ils n'apparaîtront pas dans la sortie du mais seront tout de même comptés dans la sortie df.

Un moyen rapide de vérifier ceci est de lister /proc comme utilisateur root (indice Sudo su devrait vous fournir un shell racine). Tous les fichiers ouverts, mais supprimés, auront (deleted) à la fin du nom de la cible du lien symbolique.

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

devrait vous donner une liste de tous les fichiers ouverts. Une fois que vous avez cela, un ls -lL du fichier spécifique devrait vous donner la taille du fichier.

Par exemple (en utilisant /tmp sur mon système car il n'y a pas d'exemple sur /home ici), je vois quelques fichiers appartenant à l'utilisateur mysql.

richm@viking:/$ Sudo su
root@viking:/# 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)
root@viking:/# ls -lL /proc/1489/fd/11
-rw------- 0 mysql2 mysql2 0 Aug 24 14:09 /proc/1489/fd/11
root@viking:/# ls -lL /proc/1491/fd/12
-rw------- 0 mysql mysql 1320 Oct 15 13:40 /proc/1491/fd/12

Si des processus contenant des fichiers supprimés volumineux sont ouverts, l’arrêt du processus devrait suffire à récupérer l’espace disque. Sinon, un redémarrage devrait faire la même chose.

11
Richm

Chaque système de fichiers ne contient qu'une certaine quantité d'inodes et de blocs pouvant être stockés. Même s'il y a suffisamment d'espace, vous ne pouvez pas aller plus loin.

Vérifiez vos paramètres avec

dumpe2fs /dev/sda5

(seules les 50 premières lignes sont importantes ici).

Si vous avez beaucoup de petits fichiers plus petits que la taille de bloc, vous perdez beaucoup d’espace.

1
ddeimeke