Update: add a Staging to the Minecraft Server Backup making it more reliable in the end
This commit is contained in:
parent
a7d8d0d04d
commit
76e6ad5f15
1 changed files with 64 additions and 1 deletions
|
|
@ -270,6 +270,7 @@ do_backup() {
|
||||||
local backup_format="tar"
|
local backup_format="tar"
|
||||||
local backup_pure=false
|
local backup_pure=false
|
||||||
local progress_interval=$PROGRESS_INTERVAL
|
local progress_interval=$PROGRESS_INTERVAL
|
||||||
|
local full_source_path=""
|
||||||
|
|
||||||
# Parse args
|
# Parse args
|
||||||
while [[ $# -gt 0 ]]; do
|
while [[ $# -gt 0 ]]; do
|
||||||
|
|
@ -289,7 +290,13 @@ do_backup() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local timestamp="$(date +%Y%m%d-%H%M%S)"
|
local timestamp="$(date +%Y%m%d-%H%M%S)"
|
||||||
local full_source_path="$DATA_DIR/$backup_source"
|
|
||||||
|
if [[ "$backup_source" = /* ]]; then
|
||||||
|
full_source_path="$backup_source"
|
||||||
|
else
|
||||||
|
full_source_path="$DATA_DIR/$backup_source"
|
||||||
|
fi
|
||||||
|
|
||||||
local source_basename="$(basename "$backup_source")"
|
local source_basename="$(basename "$backup_source")"
|
||||||
local archive_path=""
|
local archive_path=""
|
||||||
local archive_ext=""
|
local archive_ext=""
|
||||||
|
|
@ -410,8 +417,42 @@ do_backup() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delta_sync_snapshot() {
|
||||||
|
if [[ -z "${SNAPSHOT_DIR:-}" ]]; then
|
||||||
|
echo "[ERROR] SNAPSHOT_DIR is not set"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "$DATA_DIR/$SERVER_NAME" ]]; then
|
||||||
|
echo "[ERROR] Source directory not found: $DATA_DIR/$SERVER_NAME"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local progress_last_percent=-1
|
||||||
|
local progress_last_time
|
||||||
|
progress_last_time=$(date +%s)
|
||||||
|
|
||||||
|
"$rsync_cmd" -rptgoDL --delete --info=progress2 --stats \
|
||||||
|
"$DATA_DIR/$SERVER_NAME/" \
|
||||||
|
"$SNAPSHOT_DIR/" 2>&1 | \
|
||||||
|
while IFS= read -r -d $'\r' chunk; do
|
||||||
|
if [[ $chunk =~ ([0-9]{1,3})% ]]; then
|
||||||
|
local progress_percent="${BASH_REMATCH[1]}"
|
||||||
|
local now
|
||||||
|
now=$(date +%s)
|
||||||
|
|
||||||
|
if [[ $progress_percent -ne $progress_last_percent ]] && \
|
||||||
|
(( now - progress_last_time >= PROGRESS_INTERVAL )); then
|
||||||
|
say "Snapshot sync progress: ${progress_percent}%"
|
||||||
|
progress_last_percent=$progress_percent
|
||||||
|
progress_last_time=$now
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ $progress_last_percent -lt 100 ]] && say "Snapshot sync progress: 100%"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# MAIN
|
# MAIN
|
||||||
|
|
||||||
|
|
@ -458,6 +499,28 @@ fi
|
||||||
|
|
||||||
mkdir -p "$DESTINATION"
|
mkdir -p "$DESTINATION"
|
||||||
|
|
||||||
|
echo "[INFO] Make Snapshot dir..."
|
||||||
|
SNAPSHOT_DIR="${DATA_DIR}/${SERVER_NAME}_snapshot"
|
||||||
|
mkdir -p "$SNAPSHOT_DIR"
|
||||||
|
|
||||||
|
say "Updating the Snapshot it could take a moment"
|
||||||
|
|
||||||
|
delta_sync_snapshot
|
||||||
|
|
||||||
|
|
||||||
|
say "Backing up Server now "
|
||||||
|
|
||||||
|
if [[ "$FULL" == true ]]; then
|
||||||
|
BACKUP_SOURCE="${SNAPSHOT_DIR}"
|
||||||
|
BACKUP_MODE="full server directory"
|
||||||
|
DESTINATION="${DESTINATION}/Full"
|
||||||
|
else
|
||||||
|
BACKUP_SOURCE="${SNAPSHOT_DIR}/world"
|
||||||
|
BACKUP_MODE="world folder only"
|
||||||
|
DESTINATION="${DESTINATION}/World"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "[INFO] Running backup of $BACKUP_MODE to $DESTINATION..."
|
echo "[INFO] Running backup of $BACKUP_MODE to $DESTINATION..."
|
||||||
if do_backup \
|
if do_backup \
|
||||||
--source "$BACKUP_SOURCE" \
|
--source "$BACKUP_SOURCE" \
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue