From 5f98b977496b5c8430162b129cb94c88efb0f3b6 Mon Sep 17 00:00:00 2001 From: Bruno Tavares Date: Fri, 28 Oct 2016 17:41:40 -0200 Subject: [PATCH] Nuke when graphdir is a mount Previously, when the graphdir was a root of a mountpoint, we would not be able to cleanup the graphdir, as the script would umount in case target dir is a mount itself ```/etc/mtab /dev/xvdc1 /var/lib/docker btrfs ``` When running the script, the graphdir would be unmounted and it would remove a (possibly) empty folder. ``` Nuking /var/lib/docker ... (if this is wrong, press Ctrl+C NOW!) + sleep 10 + umount -f /var/lib/docker + rm -rf /var/lib/docker ``` This PR includes the necessary changes to nuke the folder on this scenario, including when the graphdir is a btrfs mount iself. Signed-off-by: Bruno Tavares --- contrib/nuke-graph-directory.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/contrib/nuke-graph-directory.sh b/contrib/nuke-graph-directory.sh index c8a6798789..5eeb45c8bd 100755 --- a/contrib/nuke-graph-directory.sh +++ b/contrib/nuke-graph-directory.sh @@ -44,7 +44,7 @@ dir_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 + if [ "$dir" != "$mount" ] && dir_in_dir "$mount" "$dir"; then ( set -x; umount -f "$mount" ) fi done @@ -54,9 +54,11 @@ if command -v btrfs > /dev/null 2>&1; then # 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 - ( set -x; btrfs subvolume delete "$subvol" ) + if [ "$dir" != "$subvol" ]; then + ( set -x; btrfs subvolume delete "$subvol" ) + fi done fi # finally, DESTROY ALL THINGS -( set -x; rm -rf "$dir" ) +( shopt -s dotglob; set -x; rm -rf "$dir"/* )