"Rm: no se puede eliminar xxx: no queda espacio en el dispositivo" en BTRFS

17

Ejecutando OpenSuse 12.2.

De repente, la partición raíz parece estar llena (99%) pero ya no puedo eliminar archivos manualmente.

"rm: no se puede eliminar xxx: no queda espacio en el dispositivo" aunque 450mb todavía están libres según df. El sistema de archivos es BTRFS.

Intenté verificar el FS usando btrfsck pero no me ayudó.

¿Qué hacer?

Andreas Jung
fuente
1
¿Tiene las instantáneas habilitadas?
MadHatter
¿ha verificado si hay algún proceso en ejecución que todavía use el archivo? (verifique con lsof), si es así, detenga el proceso e intente eliminar el archivo nuevamente.
chocripple

Respuestas:

20

Lo más probable es que se encuentre con un problema en el que BTRFS tiene que asignar un poco de metadatos antes de que pueda eliminar el archivo. Uno de los puntos débiles de BTRFS es su manejo de la condición de falta de espacio; Mejorar el comportamiento en esta área es una de las prioridades del proyecto.

Una sugerencia en el wiki de btrfs es golpear el archivo en lugar de eliminarlo.

#instead of this
rm -f ./some_file

# do this
true >| ./some_file

Eso eliminará el contenido del archivo sin cambiar la entrada del directorio. Una vez que haya salido de la esquina en la que se encuentra, puede eliminar archivos como de costumbre. Si eso le causa problemas, es posible que desee volver a montar temporalmente con la nodatacowopción, que desactiva el comportamiento de copiar en escritura. Pero ... no estoy seguro de si eso ayudará o no.

En general, sin embargo: no ejecute un sistema de archivos BTRFS en seco. Todavía es un software de preproducción, y los casos de esquina son un poco difíciles.

tylerl
fuente
2
El truco funciona muy bien también para una unidad de red montada en cifs, ¡gracias!
markusN
2

Me he enfrentado al mismo mensaje de error, pero en mi caso el sistema de archivos no se informó como lleno:

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

Pero preguntarle a BTRFS reveló que de hecho estaba lleno:

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

Incluso sobrescribir cualquier archivo (como ha sugerido tylerl) era imposible. Mi solución se encontró en http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html que aconseja ejecutar un reequilibrio manual del sistema de archivos usando btrfs balance start -dusage=55 /path/to/filesystem.

zovits es compatible con GoFundMonica
fuente
0

Para mí, usando ZFS, descubrí que eliminar otros archivos liberaba suficiente espacio en la partición ZFS, y luego pude eliminar los archivos en cuestión.

user1429980
fuente
0

En mi caso, con un sistema de archivos ZFS en Linux, ni siquiera pude truncar el archivo. La destrucción de las instantáneas antiguas hizo el truco (si está presente).

zfs destroy /path/of/snapshot

John White
fuente