#!/usr/bin/env bash set -e setvar dir = "$1" if test -z $dir { do { echo 'This script is for destroying old /var/lib/docker directories more safely than' echo ' "rm -rf", which can cause data loss or other serious issues.' echo echo "usage: $0 directory" echo " ie: $0 /var/lib/docker" } >&2 exit 1 } if test $(id -u) != 0 { echo >&2 "error: $0 must be run as root>&2 "error: $0 must be run as root" exit 1 } if test ! -d $dir { echo >&2 "error: $dir is not a directory>&2 "error: $dir is not a directory" exit 1 } setvar dir = "$(readlink -f "$dir")" echo echo "Nuking $dir ..." echo ' (if this is wrong, press Ctrl+C NOW!)' echo shell { set -x; sleep 10 } echo proc dir_in_dir { setvar inner = "$1" setvar outer = "$2" test ${inner#$outer} != $inner } # let's start by unmounting any submounts in $dir # (like -v /home:... for example - DON'T DELETE MY HOME DIRECTORY BRU!) for mount in $(awk '{ print $5 }' /proc/self/mountinfo) { setvar mount = "$(readlink -f "$mount" || true)" if test $dir != $mount && dir_in_dir $mount $dir { shell { set -x; umount -f $mount } } } # now, let's go destroy individual btrfs subvolumes, if any exist if command -v btrfs > /dev/null 2>&1 { # Find btrfs subvolumes under $dir checking for inode 256 # Source: http://stackoverflow.com/a/32865333 for subvol in $(find "$dir" -type d -inum 256 | sort -r) { if test $dir != $subvol { shell { set -x; btrfs subvolume delete $subvol } } } } # finally, DESTROY ALL THINGS shell { shopt -s dotglob; set -x; rm -rf "$dir"/* }