134 lines
4.5 KiB
Bash
134 lines
4.5 KiB
Bash
#!/bin/bash
|
|
# -----------------------------------------------------------------------------------------------
|
|
# --------------------------------- Recreate Shares Script -------------------------------------
|
|
# -----------------------------------------------------------------------------------------------
|
|
# Reads all .cfg files from /boot/config/shares/ and creates the corresponding share
|
|
# directories on the correct disks based on shareInclude settings.
|
|
# Also drops a .recovery marker file in each share via /mnt/user/ so that an initial
|
|
# rsync push can run without --delete and self-clean on the second nightly run.
|
|
#
|
|
# Run this script directly on the secondary server after array is started.
|
|
# Usage: bash recreate_shares.sh
|
|
# -----------------------------------------------------------------------------------------------
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
source "$SCRIPT_DIR/../Master.conf"
|
|
source "$SCRIPT_DIR/../common.sh"
|
|
|
|
SHARE_CFG_DIR="/boot/config/shares"
|
|
MARKER_FILE=".recovery"
|
|
|
|
CREATED=()
|
|
SKIPPED=()
|
|
FAILED=()
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_GEAR Setup ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
echo "━━━ $ICON_GEAR Setup ━━━"
|
|
|
|
if ! mountpoint -q /mnt/user; then
|
|
error "Array is not started — /mnt/user is not mounted"
|
|
info "Start the array in the unRAID UI before running this script"
|
|
exit 1
|
|
fi
|
|
|
|
success "Array is started"
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_DISK Recreating Shares ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
echo "━━━ $ICON_DISK Recreating Shares ━━━"
|
|
echo ""
|
|
|
|
for cfg in "$SHARE_CFG_DIR"/*.cfg; do
|
|
SHARE_NAME=$(basename "$cfg" .cfg)
|
|
INCLUDE=$(grep '^shareInclude=' "$cfg" | cut -d'"' -f2)
|
|
|
|
if [[ -z "$INCLUDE" ]]; then
|
|
warn "$SHARE_NAME — no shareInclude defined, skipping"
|
|
SKIPPED+=("$SHARE_NAME")
|
|
continue
|
|
fi
|
|
|
|
info "$ICON_DISK Processing $SHARE_NAME (disks: $INCLUDE)..."
|
|
|
|
SHARE_OK=true
|
|
|
|
IFS=',' read -ra DISKS <<< "$INCLUDE"
|
|
for disk in "${DISKS[@]}"; do
|
|
DISK_PATH="/mnt/${disk}/${SHARE_NAME}"
|
|
|
|
if [[ -d "$DISK_PATH" ]]; then
|
|
echo "$ICON_RUNNING $disk/$SHARE_NAME already exists, skipping"
|
|
else
|
|
if mkdir -p "$DISK_PATH"; then
|
|
echo "$ICON_STARTED Created $DISK_PATH"
|
|
else
|
|
error "Failed to create $DISK_PATH"
|
|
SHARE_OK=false
|
|
fi
|
|
fi
|
|
done
|
|
|
|
MARKER_PATH="/mnt/user/${SHARE_NAME}/${MARKER_FILE}"
|
|
if [[ "$SHARE_OK" == true ]]; then
|
|
if touch "$MARKER_PATH" 2>/dev/null; then
|
|
echo "$ICON_DONE Marker placed: $MARKER_PATH"
|
|
CREATED+=("$SHARE_NAME")
|
|
else
|
|
warn "Could not place marker in $SHARE_NAME — share may not be visible yet"
|
|
SKIPPED+=("$SHARE_NAME")
|
|
fi
|
|
else
|
|
FAILED+=("$SHARE_NAME")
|
|
fi
|
|
|
|
echo ""
|
|
done
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_SUMMARY Summary ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo "━━━━━ $ICON_SUMMARY RECREATE SHARES SUMMARY ━━━━━"
|
|
echo ""
|
|
|
|
if [[ ${#CREATED[@]} -gt 0 ]]; then
|
|
echo " $ICON_DONE Created & marked:"
|
|
for s in "${CREATED[@]}"; do
|
|
echo " $ICON_STARTED $s"
|
|
done
|
|
echo ""
|
|
fi
|
|
|
|
if [[ ${#SKIPPED[@]} -gt 0 ]]; then
|
|
echo " $ICON_WARN Skipped:"
|
|
for s in "${SKIPPED[@]}"; do
|
|
echo " $ICON_NOT_RUNNING $s"
|
|
done
|
|
echo ""
|
|
fi
|
|
|
|
if [[ ${#FAILED[@]} -gt 0 ]]; then
|
|
echo " $ICON_ERROR Failed:"
|
|
for s in "${FAILED[@]}"; do
|
|
echo " $ICON_ERROR $s"
|
|
done
|
|
echo ""
|
|
fi
|
|
|
|
echo " $ICON_SUCCESS Created: ${#CREATED[@]}"
|
|
echo " $ICON_NOT_RUNNING Skipped: ${#SKIPPED[@]}"
|
|
echo " $ICON_ERROR Failed: ${#FAILED[@]}"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. $ICON_HEALTH Verify shares are visible in unRAID UI"
|
|
echo " 2. $ICON_GEAR Remove --delete from Master.conf rsync opts"
|
|
echo " 3. $ICON_RUN Run initial push — marker files self-clean on second nightly run"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
|
|
[[ ${#FAILED[@]} -gt 0 ]] && exit 1
|
|
exit 0 |