contrib/nuke-graph-directory.sh
52379fa7
 #!/usr/bin/env bash
047ce47d
 set -e
 
 dir="$1"
 
 if [ -z "$dir" ]; then
 	{
 		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
 fi
 
 if [ "$(id -u)" != 0 ]; then
 	echo >&2 "error: $0 must be run as root"
 	exit 1
 fi
 
 if [ ! -d "$dir" ]; then
 	echo >&2 "error: $dir is not a directory"
 	exit 1
 fi
 
 dir="$(readlink -f "$dir")"
 
 echo
 echo "Nuking $dir ..."
 echo '  (if this is wrong, press Ctrl+C NOW!)'
 echo
 
 ( set -x; sleep 10 )
 echo
 
 dir_in_dir() {
 	inner="$1"
 	outer="$2"
 	[ "${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); do
 	mount="$(readlink -f "$mount" || true)"
5f98b977
 	if [ "$dir" != "$mount" ] && dir_in_dir "$mount" "$dir"; then
047ce47d
 		( set -x; umount -f "$mount" )
 	fi
 done
 
 # now, let's go destroy individual btrfs subvolumes, if any exist
6b340e39
 if command -v btrfs > /dev/null 2>&1; then
c3aa75c5
 	# 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); do
5f98b977
 		if [ "$dir" != "$subvol" ]; then
 			( set -x; btrfs subvolume delete "$subvol" )
 		fi
047ce47d
 	done
 fi
 
 # finally, DESTROY ALL THINGS
5f98b977
 ( shopt -s dotglob; set -x; rm -rf "$dir"/* )