BTRFS und Swap-Files

Heute hatte ich ein bisschen Not an Swap-Space auf meiner Linux-Kiste und kam auf die Idee, ich könnte das Problem schnell durch ein Swap-File nutzen. Also kurz mit dd ein bisschen Platz angelegt und mit mkswap vorbereitet.

# dd if=/dev/zero of=/extra-swap bs=1024
count=1024
1024+0 records in
1024+0 records out
# mkswap /extra-swap 1024
Setting up swapspace, size = 1044480
bytes
#

Als ich das File dann mit swapon einbinden wollte, gab es die Ernüchterung:

# swapon /extra-swap
swapon: /extra-swap: Invalid argument

dmesg:

swapon: swapfile has holes

Was ist denn da nur los?

Der Kernel kann auf fast alles swappen, so lange das Ganze eine zusammenhängende Datei bildet. Durch die Eigenheit des Copy-on-Write verschiebt BTRFS die Swap-Datei bei Änderungen quer über die Platte, was dem Kernel keine Freude bereitet, da die Swap-Datei dadurch nicht mehr zusammenhängend und ohne Löcher ist.