mirror of
https://forge.chapril.org/tykayn/workflow
synced 2025-10-09 17:02:47 +02:00
add config assets, backup round
This commit is contained in:
parent
cb1e4934b5
commit
728457f71c
26 changed files with 2011 additions and 126 deletions
137
backup-management/round.sh
Executable file
137
backup-management/round.sh
Executable file
|
@ -0,0 +1,137 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Script to check if mounted disks have up-to-date borg2 backups
|
||||
# Compares the last modification date of borg_archives/borg2 on each disk
|
||||
# with /home/poule/borg_archives/borg2
|
||||
|
||||
# Set colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[0;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo "Checking mounted disks for borg2 backup status..."
|
||||
|
||||
# Reference directory
|
||||
REFERENCE_DIR="/home/poule/borg_archives/borg2"
|
||||
|
||||
# Check if reference directory exists
|
||||
if [ ! -d "$REFERENCE_DIR" ]; then
|
||||
echo -e "${RED}Error: Reference directory $REFERENCE_DIR does not exist.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get current time
|
||||
CURRENT_TIME=$(date +%s)
|
||||
# Calculate time 24 hours ago
|
||||
TIME_24H_AGO=$((CURRENT_TIME - 86400))
|
||||
|
||||
# Get only mount points in /media/$USER/
|
||||
MOUNT_POINTS=$(df -h | grep "/media/$USER/" | awk '{print $6}')
|
||||
|
||||
# Initialize arrays for results
|
||||
OUTDATED_DISKS=()
|
||||
OUTDATED_TIMES=()
|
||||
UP_TO_DATE_DISKS=()
|
||||
NO_BORG_DISKS=()
|
||||
LOW_SPACE_DISKS=()
|
||||
LOW_SPACE_VALUES=()
|
||||
|
||||
# Function to calculate time difference in years, months, days
|
||||
calculate_time_diff() {
|
||||
local timestamp=$1
|
||||
local now=$(date +%s)
|
||||
local diff=$((now - timestamp))
|
||||
|
||||
# Calculate years, months, days
|
||||
local days=$((diff / 86400))
|
||||
local years=$((days / 365))
|
||||
local remaining_days=$((days % 365))
|
||||
local months=$((remaining_days / 30))
|
||||
remaining_days=$((remaining_days % 30))
|
||||
|
||||
echo "${years}y ${months}m ${remaining_days}d"
|
||||
}
|
||||
|
||||
# Check each mount point
|
||||
for MOUNT in $MOUNT_POINTS; do
|
||||
BORG_DIR="$MOUNT/borg_archives/borg2"
|
||||
|
||||
# Skip the reference directory itself
|
||||
if [ "$MOUNT" == "/home" ] || [ "$MOUNT" == "/" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}Checking $MOUNT...${NC}"
|
||||
|
||||
# Check available disk space
|
||||
AVAILABLE_SPACE=$(df -BG "$MOUNT" | awk 'NR==2 {print $4}' | sed 's/G//')
|
||||
if [ "$AVAILABLE_SPACE" -lt 10 ]; then
|
||||
echo -e " ${RED}! Low disk space: ${AVAILABLE_SPACE}GB available${NC}"
|
||||
LOW_SPACE_DISKS+=("$MOUNT")
|
||||
LOW_SPACE_VALUES+=("$AVAILABLE_SPACE")
|
||||
fi
|
||||
|
||||
# Check if borg_archives/borg2 exists on this mount
|
||||
if [ -d "$BORG_DIR" ]; then
|
||||
# Get last modification time of the borg directory
|
||||
BORG_TIME=$(stat -c %Y "$BORG_DIR")
|
||||
|
||||
# Compare times - consider up-to-date if modified within the last 24 hours
|
||||
if [ "$BORG_TIME" -ge "$TIME_24H_AGO" ]; then
|
||||
echo -e " ${GREEN}✓ Backup is up to date${NC}"
|
||||
UP_TO_DATE_DISKS+=("$MOUNT")
|
||||
else
|
||||
echo -e " ${RED}✗ Backup is outdated${NC}"
|
||||
OUTDATED_DISKS+=("$MOUNT")
|
||||
OUTDATED_TIMES+=("$BORG_TIME")
|
||||
fi
|
||||
else
|
||||
echo -e " ${YELLOW}! No borg2 backup directory found${NC}"
|
||||
NO_BORG_DISKS+=("$MOUNT")
|
||||
fi
|
||||
done
|
||||
|
||||
# Print summary
|
||||
echo -e "\n${YELLOW}=== Backup Status Summary ===${NC}"
|
||||
|
||||
if [ ${#UP_TO_DATE_DISKS[@]} -gt 0 ]; then
|
||||
echo -e "\n${GREEN}Up-to-date disks:${NC}"
|
||||
for DISK in "${UP_TO_DATE_DISKS[@]}"; do
|
||||
echo " - $DISK"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ${#OUTDATED_DISKS[@]} -gt 0 ]; then
|
||||
echo -e "\n${RED}Outdated disks (need backup):${NC}"
|
||||
for i in "${!OUTDATED_DISKS[@]}"; do
|
||||
DISK="${OUTDATED_DISKS[$i]}"
|
||||
BORG_TIME="${OUTDATED_TIMES[$i]}"
|
||||
FORMATTED_DATE=$(date -d "@$BORG_TIME" "+%Y-%m-%d %H:%M:%S")
|
||||
TIME_DIFF=$(calculate_time_diff "$BORG_TIME")
|
||||
echo " - $DISK (Last modified: $FORMATTED_DATE, Age: $TIME_DIFF)"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ${#NO_BORG_DISKS[@]} -gt 0 ]; then
|
||||
echo -e "\n${YELLOW}Disks without borg2 backup directory:${NC}"
|
||||
for DISK in "${NO_BORG_DISKS[@]}"; do
|
||||
echo " - $DISK"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ${#LOW_SPACE_DISKS[@]} -gt 0 ]; then
|
||||
echo -e "\n${RED}Disks with low space (less than 10GB free):${NC}"
|
||||
for i in "${!LOW_SPACE_DISKS[@]}"; do
|
||||
DISK="${LOW_SPACE_DISKS[$i]}"
|
||||
SPACE="${LOW_SPACE_VALUES[$i]}"
|
||||
echo " - $DISK (${SPACE}GB available)"
|
||||
done
|
||||
fi
|
||||
|
||||
# Exit with error code if there are outdated disks
|
||||
if [ ${#OUTDATED_DISKS[@]} -gt 0 ]; then
|
||||
exit 1
|
||||
else
|
||||
exit 0
|
||||
fi
|
Loading…
Add table
Add a link
Reference in a new issue