User:L29Ah/Reflink-based snapshots for fun and profit
From Gentoo Wiki
I figured filesystems without native snapshotting support, but having the "reflink" functionality (at the time of writing of the article it's XFS, CIFS, NFS, OCFS and bcachefs), still can provide "snapshots" immensely useful for major Gentoo system development (e.g. trying out new toolchains, libraries and so on) in case you don't feel like running more radical and all-encompassing filesystems like ZFS and BTRFS.
This script creates a new "snapshot" of the currently running system that you can chroot into and break things at your leisure (well, except the kernel-wide `/dev` and friends that handle your hardware and you don't generally want to break):
#!/bin/bash
grab () {
cp -ar --reflink=always "/$1" "$path/$1"
}
set -x
set -e
path=/opt/chroots/gentoo_reflink
binds='
var/paludis/repositories/gentoo/distfiles
var/paludis/repositories/gentoo/packages
var/lib/layman
'
if ! [ -e "$path" ]; then
mkdir -p "$path"
cd "$path"
mkdir dev proc tmp sys run
chmod 1777 tmp
grab bin
grab etc
grab lib
grab lib32
grab lib64
grab libexec
grab sbin
grab usr
grab var
for d in $binds; do
rm -rf "$d/*"
done
fi
mount -o rbind /dev dev
mount -t proc proc proc
mount -t sysfs sys sys
mount -t tmpfs run run
for d in $binds; do
mount -o rbind /"$d" "$d"
done