No space left

Lorsque j’ai voulu passer à la version 17.10 d’Ubuntu sur l’ordi du travail, j’ai été confronté à des messages indiquant qu’il n’y avait plus d’espace disque disponible, alors qu’un df montrait qu’il restait près de la moitié des 100 Gio de la partition libres. Outre la réparation de la mise à jour, j’ai été confronté à des problèmes sporadiques inexplicables avec souvent ce même message. Mon répertoire personnel est chiffré grâce à ecryptfs que j’ai soupçonné un temps parce que le seul autre message inquiétant dans dmesg était celui-ci :

ecryptfs_encrypt_page: Error attempting to write lower page; rc = [-28]

En lisant la page du wiki d’archlinux dédiée à ecryptfs, je comprends finalement que c’est le système de fichiers du bas de la pile qui est le fautif, pas ecryptfs donc mais celui sur lequel il s’appuie. Dans mon cas, c’est du btrfs. Le projet a une foire aux questions dont une entrée correspond exactement à mon cas, Btrfs prétend qu’il n’y a plus d’espace disponible alors qu’il devrait y en avoir encore plein. Grosso modo, pour un disque de taille importante, le système de fichiers peut avoir alloué (mais pas utilisé) tout l’espace disponible et il n’y a plus assez d’espace pour les méta données. Ceci peut se vérifier avec la commande suivante :

sudo btrfs fi show /dev/sda6                     
Label: none  uuid: e4f9588e-7f2c-4d41-b91e-ee093a7a93e0
	Total devices 1 FS bytes used 45.10GiB
	devid    1 size 100.00GiB used 100.00GiB path /dev/sda6

On voit sur la dernière ligne que les 100 Gio de la partition sont effectivement utilisés.

La commande suivante permet d’obtenir la répartition de l’utilisation du disque.

# sudo btrfs fi df /        
Data, single: total=54.97GiB, used=52.68GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.05GiB, used=906.48MiB

Si l’utilisation par les méta données sont proches de la valeur totale, on peut lancer la commande suivante pour régler le problème :

$ sudo btrfs balance start /                            
WARNING:        

	Full balance without filters requested. This operation is very
	intense and takes potentially very long. It is recommended to
	use the balance filters to narrow down the scope of balance.
	Use 'btrfs balance start --full-balance' option to skip this
	warning. The operation will start in 10 seconds.
	Use Ctrl-C to stop it.
10 9 8 7 6 5 4 3 2 1
Starting balance without any filters.