Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # btrfs-snapshots.sh
- # Erzeuge hourly, daily, weekly, and monthly Snapshots der btrfs Dateisysteme
- # Basiert auf http://article.gmane.org/gmane.comp.file-systems.btrfs/12609
- # Here's my crontab:
- # 0 * * * * /usr/local/bin/snapshot hourly 6
- # 0 0 * * * /usr/local/bin/snapshot daily 7
- # 0 0 * * 0 /usr/local/bin/snapshot weekly 4
- if [ "$#" -ne 2 ]; then
- echo "Usage: $0 SNAPSHOT_PREFIX NUM_SNAPSHOTS"
- exit 1
- fi
- SNAPSHOT_PREFIX="$1"
- NUM_SNAPSHOTS="$2"
- #a@ewzw032:~$ sudo btrfs subv snaps -r /.backup /.backup/.blub ; sudo btrfs subv snaps -r /.backup/Syno /.backup/Syno/.blub
- snap_prefix=".snapshot:$SNAPSHOT_PREFIX:"
- snap_name="$snap_prefix`date +%Y-%m-%d--%H.%M.%S.%N`"
- # Finde alle btrfs
- df -T | grep ' btrfs ' | perl -p -e 's,^(.*?) .* (/.*)$,$1 $2,' | while read dev mp; do
- # Find alle subvolumes dieses btrfs
- # z.B.: ID 268 gen 3176 top level 5 path foo/bar
- # Zeige alle subvolumes und zusätzliche alle "readonly" (snapshot)
- # Volumes. Filtere dann das raus, was doppelt angezeigt wurde; das
- # sind die snapshots. Dadurch werden nur die "richtigen" Volumes
- # angezeigt.
- ( btrfs subv list -r "$mp" ; btrfs subv list "$mp" ) | sort | uniq -u | while read id Id gen Gen top level Toplevel path Path; do
- # Erzeuge den Snapshot
- #echo "`date +%Y-%m-%d--%H.%M.%S.%N`: Erzeuge Snapshot $mp/$Path/$snap_name fuer $mp/$Path"
- set -x; btrfs subv snapshot -r "$mp/$Path" "$mp/$Path/$snap_name"; set +x
- done
- # Lösche alte Snapshot(s)
- # Zeige alle read only Subvolumes an. Und zusätzlich "doppelt" die letzten
- # $NUM_SNAPSHOTS Snapshots. Führt dazu, das die gewünchte Anzahl an zu
- # behaltenden Snapshots doppelt angezeigt wird.
- # Nun sortiere die Liste und zeige nur die an, die nur 1x vorkommen.
- # Das sind die Snapshots, die gelöscht werden sollen.
- # ID 257 gen 28590 top level 256 path a
- # a@ewzw032:~$ ( sudo btrfs subv list -r /.backup/ | grep ' \.boing:' | tail -$n ; sudo btrfs subv list -r /.backup/ | grep ' \.boing:' ) | sort | uniq -u
- ( btrfs subv list -r "$mp" | grep " path $snap_prefix" | tail -"$n"; sudo btrfs subv list -r "$mp" | grep " path $snap_prefix" ) | sort | uniq -u | while read id Id gen Gen top level Toplevel path Path; do
- #echo "`date +%Y-%m-%d--%H.%M.%S.%N`: Entferne Snapshot $mp/$Path/$snap_name fuer $mp/$Path"
- set -x; btrfs subv delete "$mp/$Path"; set +x
- done
- echo
- done
- exit 0
- # EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement