«Rm: impossible de supprimer xxx: il ne reste plus d'espace sur l'appareil» sur BTRFS

17

Exécution d'OpenSuse 12.2.

Soudain, la parition racine semble être pleine (99%) mais je ne peux plus supprimer les fichiers manuellement.

"rm: impossible de supprimer xxx: il ne reste plus d'espace sur l'appareil" bien que 450 Mo soient toujours libres selon df. Le système de fichiers est BTRFS.

J'ai essayé de vérifier le FS en utilisant btrfsck mais cela n'a pas aidé.

Que faire?

Andreas Jung
la source
1
Avez-vous des instantanés activés?
MadHatter
avez-vous vérifié si un processus est toujours en cours d'utilisation du fichier? (vérifiez avec lsof), si c'est le cas, veuillez arrêter le processus et réessayer de supprimer le fichier.
chocripple

Réponses:

20

Très probablement, vous rencontrez un problème où BTRFS doit allouer un peu de métadonnées avant de pouvoir supprimer le fichier. L'un des points faibles de BTRFS est sa gestion de la condition d'espace insuffisant; l'amélioration du comportement dans ce domaine est l'une des priorités du projet.

Une suggestion sur le wiki btrfs est de remplir le fichier au lieu de le supprimer.

#instead of this
rm -f ./some_file

# do this
true >| ./some_file

Cela supprimera le contenu du fichier sans modifier l'entrée de répertoire. Une fois que vous avez réussi à sortir du coin dans lequel vous vous trouvez, vous pouvez ensuite supprimer les fichiers comme d'habitude. Si cela vous pose problème, vous souhaiterez peut-être temporairement remonter avec l' nodatacowoption, qui désactive le comportement de copie sur écriture. Mais ... je ne sais pas avec certitude si cela va aider ou non.

En général, cependant: ne lancez pas un système de fichiers BTRFS à sec. C'est toujours un logiciel de pré-production, et les boîtiers d'angle sont un peu rugueux.

tylerl
la source
2
L'astuce fonctionne bien aussi pour un lecteur réseau monté en cifs, merci!
markusN
2

J'ai rencontré le même message d'erreur, mais dans mon cas, le système de fichiers n'a pas été signalé comme complet:

user@host:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       2.8G  2.0G  618M  77% /

Mais demander au BTRFS a révélé qu'il était en effet plein:

user@host:/# btrfs fi show
Label: none  uuid: {UUID redacted because reasons}
        Total devices 1 FS bytes used 1.92GiB
        devid    1 size 2.79GiB used 2.79GiB path /dev/sda3

Même l'écrasement des fichiers (comme l'a suggéré tylerl) était impossible. Ma solution a été trouvée à http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html qui conseille d'exécuter un rééquilibrage manuel du système de fichiers à l'aide btrfs balance start -dusage=55 /path/to/filesystem.

zovits
la source
0

Pour moi, en utilisant ZFS, j'ai trouvé que la suppression d'autres fichiers libérait suffisamment d'espace sur la partition ZFS, puis j'ai pu supprimer les fichiers en question.

user1429980
la source
0

Dans mon cas, avec un système de fichiers ZFS sous Linux, je ne pouvais même pas tronquer le fichier. Détruire d'anciens instantanés a fait l'affaire (le cas échéant).

zfs destroy /path/of/snapshot

John White
la source