#!/bin/sh layer_dir=/home/d/sami seed_file=debian-live-8.4.0-amd64-standard.btrfs layer_file=debian-live-8.4.0-amd64-standard.layer.$$.btrfs layer_size=1000 mountpoint=layer_dest.$$ disable_stdout() { exec 3>&1; exec >&2; } enable_stdout() { exec >&3; } with_stdout() { enable_stdout; "$@"; disable_stdout; } create_layer_filesystem() { [ ! -e "$layer_file" ] || return mkdir -p "$mountpoint" && dd if=/dev/zero of="$layer_file" bs=1M count="$layer_size" && mount -o subvol=/,compress "$seed_file" "$mountpoint" && layer_dev=$(losetup -f --show "$layer_file") && btrfs device add "$layer_dev" "$mountpoint" && mount -o rw,remount "$mountpoint" } finish() { umount "$mountpoint" && btrfstune -S1 "$layer_file" } set -ex cd "$layer_dir" && disable_stdout && create_layer_filesystem && with_stdout btrfs receive "$mountpoint" && finish