Initial commit: Add interactive Borg vault and QCOW2 mounting scripts
This commit is contained in:
138
mount_backup.sh
Executable file
138
mount_backup.sh
Executable file
@@ -0,0 +1,138 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script to mount Borg backup vault and qcow2 disk image
|
||||||
|
# Created: 2025-10-07
|
||||||
|
|
||||||
|
set -e # Exit on error
|
||||||
|
|
||||||
|
BORG_REPO="/data_storage/Backup/borg/srvfs01"
|
||||||
|
BORG_MOUNT="/mnt/restore"
|
||||||
|
QCOW2_MOUNT="/mnt/qcow2"
|
||||||
|
QCOW2_FILE="vm-105-disk-3.qcow2"
|
||||||
|
|
||||||
|
# Function to format date from backup folder name
|
||||||
|
format_date() {
|
||||||
|
local folder=$1
|
||||||
|
# Extract date from folder name (e.g., vm105-20250904-145444 or vm105-20251006-020001)
|
||||||
|
if [[ $folder =~ vm[0-9]+-([0-9]{4})([0-9]{2})([0-9]{2})-([0-9]{6}) ]]; then
|
||||||
|
local year=${BASH_REMATCH[1]}
|
||||||
|
local month=${BASH_REMATCH[2]}
|
||||||
|
local day=${BASH_REMATCH[3]}
|
||||||
|
local time=${BASH_REMATCH[4]}
|
||||||
|
local hour=${time:0:2}
|
||||||
|
local minute=${time:2:2}
|
||||||
|
|
||||||
|
# Convert month number to German month name
|
||||||
|
case $month in
|
||||||
|
01) month_name="Januar" ;;
|
||||||
|
02) month_name="Februar" ;;
|
||||||
|
03) month_name="März" ;;
|
||||||
|
04) month_name="April" ;;
|
||||||
|
05) month_name="Mai" ;;
|
||||||
|
06) month_name="Juni" ;;
|
||||||
|
07) month_name="Juli" ;;
|
||||||
|
08) month_name="August" ;;
|
||||||
|
09) month_name="September" ;;
|
||||||
|
10) month_name="Oktober" ;;
|
||||||
|
11) month_name="November" ;;
|
||||||
|
12) month_name="Dezember" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "$day. $month_name $year - $hour:$minute Uhr"
|
||||||
|
else
|
||||||
|
echo "$folder"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "=== Mounting Borg Backup Vault ==="
|
||||||
|
# Mount the Borg vault
|
||||||
|
borg mount "$BORG_REPO" "$BORG_MOUNT"
|
||||||
|
echo "✓ Borg vault mounted to $BORG_MOUNT"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Scan for backup folders
|
||||||
|
echo "=== Scanning for available backups ==="
|
||||||
|
mapfile -t backups < <(ls -1 "$BORG_MOUNT" | sort -r)
|
||||||
|
|
||||||
|
if [ ${#backups[@]} -eq 0 ]; then
|
||||||
|
echo "Error: No backups found in $BORG_MOUNT"
|
||||||
|
borg umount "$BORG_MOUNT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Available backups:"
|
||||||
|
echo ""
|
||||||
|
for i in "${!backups[@]}"; do
|
||||||
|
backup_date=$(format_date "${backups[$i]}")
|
||||||
|
printf "%2d) %s\n" $((i+1)) "$backup_date"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
read -p "Select backup number (1-${#backups[@]}) or [Enter] for latest: " selection
|
||||||
|
|
||||||
|
# Default to latest (first in sorted list)
|
||||||
|
if [ -z "$selection" ]; then
|
||||||
|
selection=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Validate selection
|
||||||
|
if ! [[ "$selection" =~ ^[0-9]+$ ]] || [ "$selection" -lt 1 ] || [ "$selection" -gt ${#backups[@]} ]; then
|
||||||
|
echo "Error: Invalid selection"
|
||||||
|
borg umount "$BORG_MOUNT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
selected_backup="${backups[$((selection-1))]}"
|
||||||
|
selected_date=$(format_date "$selected_backup")
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✓ Selected backup: $selected_date"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Find the qcow2 file in the selected backup
|
||||||
|
echo "=== Searching for QCOW2 file ==="
|
||||||
|
qcow2_path=$(find "$BORG_MOUNT/$selected_backup" -name "$QCOW2_FILE" 2>/dev/null | head -n 1)
|
||||||
|
|
||||||
|
if [ -z "$qcow2_path" ]; then
|
||||||
|
echo "Error: Could not find $QCOW2_FILE in backup"
|
||||||
|
borg umount "$BORG_MOUNT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✓ Found: $qcow2_path"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "=== Mounting QCOW2 Disk Image ==="
|
||||||
|
# Load NBD kernel module
|
||||||
|
modprobe nbd max_part=8
|
||||||
|
echo "✓ NBD module loaded"
|
||||||
|
|
||||||
|
# Connect qcow2 image to NBD device in read-only mode
|
||||||
|
qemu-nbd --connect=/dev/nbd0 --read-only "$qcow2_path"
|
||||||
|
echo "✓ QCOW2 connected to /dev/nbd0"
|
||||||
|
|
||||||
|
# Wait a moment for device to be ready
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Scan for LVM volumes
|
||||||
|
pvscan > /dev/null 2>&1
|
||||||
|
vgscan > /dev/null 2>&1
|
||||||
|
echo "✓ LVM volumes scanned"
|
||||||
|
|
||||||
|
# Create mount point if it doesn't exist
|
||||||
|
mkdir -p "$QCOW2_MOUNT"
|
||||||
|
|
||||||
|
# Mount the logical volume in read-only mode without journal recovery
|
||||||
|
mount -t ext4 -o ro,noload /dev/vgdata/lvshare "$QCOW2_MOUNT"
|
||||||
|
echo "✓ Filesystem mounted to $QCOW2_MOUNT"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Mount Summary ==="
|
||||||
|
echo "Borg vault: $BORG_MOUNT"
|
||||||
|
echo "Selected: $selected_date"
|
||||||
|
echo "QCOW2 disk: $QCOW2_MOUNT"
|
||||||
|
echo ""
|
||||||
|
df -h "$BORG_MOUNT" "$QCOW2_MOUNT"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Done! To unmount, run: /data_storage/Backup/borg/umount_backup.sh"
|
||||||
44
umount_backup.sh
Executable file
44
umount_backup.sh
Executable file
@@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script to unmount QCOW2 disk image and Borg backup vault
|
||||||
|
# Created: 2025-10-07
|
||||||
|
|
||||||
|
BORG_MOUNT="/mnt/restore"
|
||||||
|
QCOW2_MOUNT="/mnt/qcow2"
|
||||||
|
|
||||||
|
echo "=== Unmounting Backup System ==="
|
||||||
|
|
||||||
|
# Unmount QCOW2 filesystem
|
||||||
|
if mountpoint -q "$QCOW2_MOUNT"; then
|
||||||
|
echo "Unmounting $QCOW2_MOUNT..."
|
||||||
|
umount "$QCOW2_MOUNT"
|
||||||
|
echo "✓ QCOW2 filesystem unmounted"
|
||||||
|
else
|
||||||
|
echo "ℹ $QCOW2_MOUNT is not mounted"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Deactivate LVM volume group
|
||||||
|
if vgs vgdata &>/dev/null; then
|
||||||
|
echo "Deactivating LVM volume group..."
|
||||||
|
vgchange -an vgdata 2>/dev/null || true
|
||||||
|
echo "✓ LVM volume group deactivated"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Disconnect NBD device
|
||||||
|
if [ -b /dev/nbd0 ]; then
|
||||||
|
echo "Disconnecting NBD device..."
|
||||||
|
qemu-nbd --disconnect /dev/nbd0
|
||||||
|
echo "✓ NBD device disconnected"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Unmount Borg vault
|
||||||
|
if mountpoint -q "$BORG_MOUNT"; then
|
||||||
|
echo "Unmounting Borg vault..."
|
||||||
|
borg umount "$BORG_MOUNT"
|
||||||
|
echo "✓ Borg vault unmounted"
|
||||||
|
else
|
||||||
|
echo "ℹ Borg vault is not mounted"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Done! All backups unmounted."
|
||||||
Reference in New Issue
Block a user