Daten|teiler
Kopieren als Kulturtechnik

Festplatte voll mit Btrfs-Subvolumes

2. März 2019 von Christian Imhorst

Ich hatte eine ganze Reihe Btrfs-Subvolumes im Dateisystem von openSUSE Tumbleweed einhängen, die Platz auf der Festplatte gebraucht haben, aber im Root-Verzeichnis leer waren. Es waren vor allem Subvolumes von Docker, die den Platz beansprucht haben:

$ sudo btrfs subvolume list /
ID 257 gen 101389 top level 5 path var/tmp
[...]
ID 1599 gen 101254 top level 5 path var/lib/docker/btrfs/subvolumes/5d6eb5431d75641963973f53ab44ffbb328981d3a3781219b0224534cb17cca3
ID 1605 gen 101254 top level 5 path var/lib/docker/btrfs/subvolumes/b4adf86f01370d6b00e3e300cf75ab9d7e540b66af91d46a794f10a78c7aa7b0
ID 1607 gen 101254 top level 5 path var/lib/docker/btrfs/subvolumes/2c35776404fa91d25d4a3009055a1c98f1d8568173fca15911f2ee4989b5f511
ID 1614 gen 101254 top level 5 path var/lib/docker/btrfs/subvolumes/4bced6174066e61a9f01bf99e2d80eddb3865b6c3593b35d4609972af90987f5-init
ID 1615 gen 101254 top level 5 path var/lib/docker/btrfs/subvolumes/4bced6174066e61a9f01bf99e2d80eddb3865b6c3593b35d4609972af90987f5
 
[...]

Meine erste Idee, sie einfach zu löschen, hat nicht funktioniert:

$ sudo btrfs subvolume delete </path/of/subvolume>
   ERROR: cannot access '<subvolume>': No such file or directory

Einen Ansatz, die Subvolumes zu löschen, der funktioniert, habe ich im Unix-Forum von StackExchange gefunden. Ich konnte die Subvolumes löschen, nachdem ich das ganze Btrfs-Volume komplett unter /mnt ins Dateisystem eingehangen habe:

$ sudo mount /dev/mapper/system-root /mnt/ -o subvol=/
$ ls /mnt
   .snapshots  dev   lib64  proc  selinux  tmp
   .w3m        etc   media  root  snap     usr
   bin         home  mnt    run   srv      var
   boot        lib   opt    sbin  sys
$ sudo btrfs subvolume delete /mnt/var/lib/docker/btrfs/subvolumes/4bced6174066e61a9f01bf99e2d80eddb3865b6c3593b35d4609972af90987f5-init/
   Delete subvolume (no-commit): '/mnt/var/lib/docker/btrfs/subvolumes/4bced6174066e61a9f01bf99e2d80eddb3865b6c3593b35d4609972af90987f5-init'

Nachdem ich mit dem Löschen der einzelnen Subvolumes fertig war, habe ich /mnt wieder ausgehangen und das Btrfs-Dateisystem neu ausbalanciert:

$ sudo umount /mnt
$ btrfs balance start -m /
   Done, had to relocate 4 out of 103 chunks
$ sudo btrfs fi df /
   Data, single: total=95.05GiB, used=61.86GiB
   System, single: total=32.00MiB, used=16.00KiB
   Metadata, single: total=1.97GiB, used=1.42GiB
   GlobalReserve, single: total=175.34MiB, used=0.00B

Der disk free Befehl zeigt nach dem Ausbalancieren, dass ich jetzt wieder über 20 GB mehr zur Verfügung habe als vorher. Jetzt muss ich mir nur überlegen, was ich mit Docker und Btrfs zukünftig mache, um mein Btrfs-Volume nicht wieder zu „überfüllen“.

Geschrieben in Gnu/Linux, OpenSuse