As Aragorn mentioned, in Btrfs the use of @ is just a convention. It’s commonly used for subvolumes that are intended to be mounted (like @ for /, @home, etc.), but it’s not required. You can name subvolumes anything you like.
In Btrfs, if you want to mount or otherwise work with a subvolume, you typically reference it either by:
subvol= (its name)
subvolid= (its ID)
In your example, @swapfile is mounted via fstab at /swapfile. Once mounted, you’re interacting with it through that mount point; not by its subvolume name directly.
This is a common pattern in Btrfs: many commands operate on paths rather than explicitly on subvolume names. That said, it’s a helpful convention because it makes mountable subvolumes easy to distinguish, and it’s a common convention to follow. If a command expects a subvolume, you can usually just pass a path that resides on that subvolume.
e.g.
btrfs sub show .
This shows information about the subvolume containing your current directory. So the output depends on where you run it. Chances are you are on your root (/) aka subvol=@ ; or subvol=@home aka /home, or You may need to cd into a subvolume for it to return meaningful results.
You will find most commands will want a path rather than a subvol name or ID, but there are exceptions.
From man btrfs-subvolume (the btrfs delete subcommand), you can either pass a path or ID:
-i|--subvolid <subvolid>
subvolume id to be removed instead of the <path> that should point to the filesystem with the subvolume
(So you can delete subvolumes without mounting them.)
I started learning btrfs just by reading their man pages. They are actually pretty useful. You can runman btrfs, and you will see these at the bottom:
SEE ALSO
btrfs(5) <>, btrfs-balance(8) <>, btrfs-check(8) <>, btrfs-convert(8) <>, btrfs-device(8) <>, btrfs-filesystem(8) <>, btrfs-inspect-internal(8) <>, btrfs-property(8) <>, btrfs-qgroup(8) <>, btrfs-quota(8) <>,
btrfs-receive(8) <>, btrfs-replace(8) <>, btrfs-rescue(8) <>, btrfs-restore(8) <>, btrfs-scrub(8) <>, btrfs-send(8) <>, btrfs-subvolume(8) <>, btrfstune(8) <>, mkfs.btrfs(8) <>
So you can..
man btrfs-subvolume
man btrfs-filesystem
man btrfs-scrub
# etc