summaryrefslogtreecommitdiff
path: root/package/aufs2-util/src/auchk
diff options
context:
space:
mode:
Diffstat (limited to 'package/aufs2-util/src/auchk')
-rwxr-xr-xpackage/aufs2-util/src/auchk130
1 files changed, 130 insertions, 0 deletions
diff --git a/package/aufs2-util/src/auchk b/package/aufs2-util/src/auchk
new file mode 100755
index 000000000..26a3d8027
--- /dev/null
+++ b/package/aufs2-util/src/auchk
@@ -0,0 +1,130 @@
+#!/bin/sh -
+
+# Copyright (C) 2005-2009 Junjiro Okajima
+#
+# This program, aufs is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+set -eu
+#set -x
+
+EEcho() # str
+{
+ echo $0: $@ 1>&2
+}
+
+f=/etc/default/aufs
+. $f
+
+Usage()
+{
+ echo $0 writable_branch '[...]'
+}
+
+Pass() # title
+{
+ pass=$(($pass + 1))
+ EEcho \[Pass $pass\] $@
+}
+
+Remove() # file
+{
+ if [ -d "$1" ]
+ then
+ rm -ir "$1" || :
+ else
+ rm -v "$1" || :
+ fi
+}
+
+for i
+do
+ EEcho Checking "$i" for aufs
+
+ cd "$i"
+ case $(stat -f -c %T .) in
+ aufs|UNKNOWN*${AUFS_SUPER_MAGIC_HEX}*)
+ EEcho $i must not be aufs
+ cd $OLDPWD
+ continue
+ ;;
+ esac
+
+ ########################################
+ pass=0
+ Pass Illegal whiteout
+ find . -name '.wh.*' ! -name '.wh..wh.*' -printf '%h\0%f\0' |
+ xargs -r0n2 |
+ while read dir wh
+ do
+ #echo \""$dir"\" \""$wh"\"
+ base=$(echo "$wh" | cut -c5-)
+ test ! -e "$dir/$base" && continue
+
+ ls -ld "$dir/$wh" "$dir/$base"
+ read -p 'Which to remove [whiteout/real/skip]? ' ans \
+ < /dev/tty > /dev/tty 2>&1
+ case "$ans" in
+ [wW]*) Remove "$dir/$wh" || :;;
+ [rR]*) Remove "$dir/$base" || :;;
+ *) echo skipped;;
+ esac
+ done
+
+ ########################################
+ Pass Remained pseudo-links
+ did=0
+ for plink in ${AUFS_WH_PLINKDIR}/*
+ do
+ test ! -e "$plink" && break
+ if [ -d "$plink" ]
+ then
+ EEcho illegal "$plink"
+ continue
+ fi
+
+ did=1
+ #ls -l "$plink" || :
+ find . -inum $(basename "$plink" | cut -f2 -d .) -ls || :
+ done
+ if [ $did -ne 0 ]
+ then
+ cat <<- EOF
+ They will be maintained at remount or umount time,
+ if you installed aufs helper scripts (See README
+ in detail).
+ If "$i" is not a writeble branch of CURRENTLY mounted
+ aufs, you need to maintain them by yourself.
+ EOF
+ fi
+
+ ########################################
+ Pass Remained temp files
+ for tmp in ${AUFS_WH_TMPDIR}/*
+ do
+ test ! -e "$tmp" && break
+ if [ -d "$tmp" ]
+ then
+ EEcho illegal "$tmp"
+ continue
+ fi
+
+ ls -l "$tmp" || :
+ rm -i "$tmp" || :
+ done
+
+ # nothing to do for xinodir
+
+ cd $OLDPWD
+done