|
|
@@ -8,7 +8,7 @@ overlaycached(){
|
|
|
DEPTH=2
|
|
|
WRITE_THROUGH=false
|
|
|
SSHFS_CMD="sshfs"
|
|
|
- while getopts ":dmS:D:-" opt; do
|
|
|
+ while getopts ":dwmS:D:-" opt; do
|
|
|
case $opt in
|
|
|
d )
|
|
|
DEBUG=true
|
|
|
@@ -30,12 +30,16 @@ overlaycached(){
|
|
|
;;
|
|
|
\? ) cat 1>&2 <<'USAGEEOF'
|
|
|
|
|
|
-Usage: <sharxz> [-d] [ -D DEPTH ] [-m | -S SSHFS | LOWER_DIR ] [ UPPER_DIR ] [ MOUNT_DIR ]
|
|
|
+Usage:
|
|
|
+overlaycached [-dw] [ -D DEPTH ] LOWER_DIR UPPER_DIR MOUNT_DIR
|
|
|
+overlaycached [-dw] [ -D DEPTH ] -S SSHFS UPPER_DIR MOUNT_DIR
|
|
|
+overlaycached [-dw] [ -D DEPTH ] -m LOWER_DIR MOUNT_DIR
|
|
|
+overlaycached [-dw] [ -D DEPTH ] -mS SSHFS MOUNT_DIR
|
|
|
-d DEBUG
|
|
|
--D DEPTH=1 depth of inotify directory watches
|
|
|
--S SSHFS mount sshfs for LOWER_DIR
|
|
|
-m MOVE move MOUNT_DIR to another mount point and mount overlay
|
|
|
-w Write through missing files to lowerdir
|
|
|
+-D DEPTH=1 depth of inotify directory watches
|
|
|
+-S SSHFS mount sshfs for LOWER_DIR
|
|
|
-- stop parsing and pass remaining arguments
|
|
|
|
|
|
USAGEEOF
|
|
|
@@ -48,24 +52,27 @@ USAGEEOF
|
|
|
esac
|
|
|
done
|
|
|
shift $((OPTIND -1))
|
|
|
-
|
|
|
- $MOVE ||
|
|
|
- [ -z "$SSHFS" ] &&
|
|
|
- LOWER_DIR="$1" && shift 1
|
|
|
- UPPER_DIR="$1"
|
|
|
- MOUNT_DIR="$2"
|
|
|
- WORK_DIR="$(realpath "$UPPER_DIR").work"
|
|
|
+ [ -z "$SSHFS" ] && LOWER_DIR="$1" && shift 1
|
|
|
+ $MOVE || { UPPER_DIR="$1" && shift 1; }
|
|
|
+ MOUNT_DIR="$1"
|
|
|
+ trap cleanup EXIT
|
|
|
+ if $MOVE; then
|
|
|
+ UPPER_DIR="$(realpath "$MOUNT_DIR").upper"
|
|
|
+ WORK_DIR="$(realpath "$MOUNT_DIR").work"
|
|
|
+ set -x
|
|
|
+ mv "$MOUNT_DIR" "$UPPER_DIR"
|
|
|
+ mkdir -p "$MOUNT_DIR"
|
|
|
+ set +x
|
|
|
+ else
|
|
|
+ WORK_DIR="$(realpath "$UPPER_DIR").work"
|
|
|
+ fi
|
|
|
mkdir -p "$WORK_DIR"
|
|
|
CLEANUP_DIRS=(
|
|
|
"$WORK_DIR"
|
|
|
)
|
|
|
- if $MOVE; then
|
|
|
- LOWER_DIR="$(mktemp -d)"
|
|
|
- set -x
|
|
|
- mount --move "$MOUNT_DIR" "$LOWER_DIR"
|
|
|
- set +x
|
|
|
- elif [ ! -z "$SSHFS" ]; then
|
|
|
- LOWER_DIR="$(mktemp -d)"
|
|
|
+ if [ ! -z "$SSHFS" ]; then
|
|
|
+ LOWER_DIR="$(realpath "$MOUNT_DIR").sshfs"
|
|
|
+ mkdir -p "$LOWER_DIR"
|
|
|
SSHFS_OPTS="-oauto_cache,reconnect,no_readahead,allow_other"
|
|
|
# if [ ! -z "$SUDO_USER" ]; then
|
|
|
# SSHFS_CMD="sudo -u $SUDO_USER $SSHFS_CMD"
|
|
|
@@ -78,7 +85,6 @@ USAGEEOF
|
|
|
fi
|
|
|
show_workdir_contents
|
|
|
|
|
|
- trap cleanup EXIT
|
|
|
set -x
|
|
|
mount -t overlay -o lowerdir="$LOWER_DIR",upperdir="$UPPER_DIR",workdir="$WORK_DIR" overlay "$MOUNT_DIR"
|
|
|
set +x
|
|
|
@@ -90,7 +96,7 @@ USAGEEOF
|
|
|
|
|
|
[[ "$EVT" =~ "CLOSE_NOWRITE" ]] && [ ! -f "$UPPER_DIR/$RELPATH" ] && {
|
|
|
echo touch "$MOUNT_DIR/$RELPATH"
|
|
|
- touch -c "$MOUNT_DIR/$RELPATH"
|
|
|
+ cat "$LOWER_DIR/$RELPATH" > "$MOUNT_DIR/$RELPATH"
|
|
|
touch -c -r "$LOWER_DIR/$RELPATH" "$MOUNT_DIR/$RELPATH"
|
|
|
}
|
|
|
|
|
|
@@ -103,12 +109,13 @@ USAGEEOF
|
|
|
|
|
|
cleanup(){
|
|
|
echo "Cleaning up mount points...."
|
|
|
+ set +e
|
|
|
set -x
|
|
|
umount "$MOUNT_DIR" # 2> /dev/null
|
|
|
sync
|
|
|
if $MOVE; then
|
|
|
- mount --move "$LOWER_DIR" "$MOUNT_DIR"
|
|
|
- rmdir "$LOWER_DIR"
|
|
|
+ rmdir "$MOUNT_DIR"
|
|
|
+ mv "$UPPER_DIR" "$MOUNT_DIR"
|
|
|
fi
|
|
|
if [ ! -z "$SSHFS" ]; then
|
|
|
umount "$LOWER_DIR" # 2> /dev/null
|