Skip to content

Commit

Permalink
Add contrib/nuke-graph-directory.sh script to clean out old /var/lib/…
Browse files Browse the repository at this point in the history
…docker directories much more easily

Signed-off-by: Andrew Page <admwiggin@gmail.com>
  • Loading branch information
tianon committed Aug 5, 2014
1 parent 3c1212c commit 047ce47
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions contrib/nuke-graph-directory.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/bin/sh
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)"
if dir_in_dir "$mount" "$dir"; then
( set -x; umount -f "$mount" )

This comment has been minimized.

Copy link
@jaredbroad

jaredbroad Jan 8, 2016

What can we do when the umount returns device is busy? Is there anyway to clean without rebooting? (all containers are stopped, images cleaned)

fi
done

# now, let's go destroy individual btrfs subvolumes, if any exist
if command -v btrfs &> /dev/null; then
root="$(df "$dir" | awk 'NR>1 { print $NF }')"
for subvol in $(btrfs subvolume list -o "$root" 2>/dev/null | awk -F' path ' '{ print $2 }'); do
subvolDir="$root/$subvol"
if dir_in_dir "$subvolDir" "$dir"; then
( set -x; btrfs subvolume delete "$subvolDir" )
fi
done
fi

# finally, DESTROY ALL THINGS
( set -x; rm -rf "$dir" )

0 comments on commit 047ce47

Please sign in to comment.