Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 23599ca1a5 | |||
| 772a1d233d | |||
| a6bad70674 | |||
| 093f1e6c23 | |||
| c8f4335a71 | |||
| 78d3bbaa3f | |||
| 04a76310ba | |||
| a0fb5e58e9 | |||
| 472978bf06 | |||
| 38cb4f7318 | |||
| a978893c60 | |||
| 7ccbdcd4c0 | |||
| bfbddf363a | |||
| acad96bf93 | |||
| b62c83100c | |||
| 1d9e30bb54 | |||
| 8922dcbe05 | |||
| 573181216a | |||
| 9b7f3a1920 | |||
| 4aaa4b3f2b | |||
| aa6a2ac2df | |||
| 8fbfc73991 | |||
| ecb5f249ed |
@@ -54,3 +54,4 @@ id_ed25519.pub
|
|||||||
# Config files that might contain sensitive data
|
# Config files that might contain sensitive data
|
||||||
config.local.*
|
config.local.*
|
||||||
*.credentials
|
*.credentials
|
||||||
|
downloads/
|
||||||
|
|||||||
+61
-2
@@ -550,6 +550,8 @@ show_backup_menu() {
|
|||||||
show_banner
|
show_banner
|
||||||
echo -e "${YELLOW}${BOLD}💾 Backup & Recovery${NC}"
|
echo -e "${YELLOW}${BOLD}💾 Backup & Recovery${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
echo -e "${BOLD}cPanel Backups:${NC}"
|
||||||
|
echo ""
|
||||||
echo -e " ${YELLOW}1)${NC} Auto Backup (All Sites) - Create full backups"
|
echo -e " ${YELLOW}1)${NC} Auto Backup (All Sites) - Create full backups"
|
||||||
echo -e " ${YELLOW}2)${NC} Selective Backup - Backup specific accounts"
|
echo -e " ${YELLOW}2)${NC} Selective Backup - Backup specific accounts"
|
||||||
echo -e " ${YELLOW}3)${NC} Restore Helper - Interactive restore tool"
|
echo -e " ${YELLOW}3)${NC} Restore Helper - Interactive restore tool"
|
||||||
@@ -559,9 +561,13 @@ show_backup_menu() {
|
|||||||
echo -e " ${YELLOW}7)${NC} Backup Verification - Test backup integrity"
|
echo -e " ${YELLOW}7)${NC} Backup Verification - Test backup integrity"
|
||||||
echo -e " ${YELLOW}8)${NC} Off-site Sync - Sync to remote storage"
|
echo -e " ${YELLOW}8)${NC} Off-site Sync - Sync to remote storage"
|
||||||
echo ""
|
echo ""
|
||||||
|
echo -e "${BOLD}Acronis Cyber Protect:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${YELLOW}9)${NC} 🔷 Acronis Management → Install, configure, manage backups"
|
||||||
|
echo ""
|
||||||
echo -e "${BOLD}Data Management:${NC}"
|
echo -e "${BOLD}Data Management:${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${RED}9)${NC} 🗑️ Cleanup Toolkit Data - Remove IP reputation & temp files"
|
echo -e " ${RED}10)${NC} 🗑️ Cleanup Toolkit Data - Remove IP reputation & temp files"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${RED}0)${NC} Back to Main Menu"
|
echo -e " ${RED}0)${NC} Back to Main Menu"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -569,6 +575,58 @@ show_backup_menu() {
|
|||||||
echo -n "Select option: "
|
echo -n "Select option: "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Acronis Management submenu
|
||||||
|
show_acronis_menu() {
|
||||||
|
show_banner
|
||||||
|
echo -e "${YELLOW}${BOLD}🔷 Acronis Cyber Protect${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Installation & Setup:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${YELLOW}1)${NC} Install Acronis Agent - Download and install Acronis"
|
||||||
|
echo -e " ${YELLOW}2)${NC} Register with Cloud - Connect to Acronis Cloud"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Backup Management:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${GREEN}3)${NC} 📊 Manage Backups - Complete backup management interface"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Quick Actions:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${YELLOW}4)${NC} Check Agent Status - Verify Acronis is running"
|
||||||
|
echo -e " ${YELLOW}5)${NC} Update Agent - Upgrade to latest version"
|
||||||
|
echo -e " ${YELLOW}6)${NC} View Logs - Check Acronis logs"
|
||||||
|
echo -e " ${YELLOW}7)${NC} Uninstall Acronis - Remove Acronis agent"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Troubleshooting:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${RED}8)${NC} 🔧 Troubleshoot Backups - Diagnose backup failures"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${RED}0)${NC} Back to Backup & Recovery"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo -n "Select option: "
|
||||||
|
}
|
||||||
|
|
||||||
|
# Acronis submenu handler
|
||||||
|
handle_acronis_menu() {
|
||||||
|
while true; do
|
||||||
|
show_acronis_menu
|
||||||
|
read -r choice
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
1) run_module "backup" "acronis-install.sh" ;;
|
||||||
|
2) run_module "backup" "acronis-register.sh" ;;
|
||||||
|
3) run_module "backup" "acronis-backup-manager.sh" ;;
|
||||||
|
4) run_module "backup" "acronis-agent-status.sh" ;;
|
||||||
|
5) run_module "backup" "acronis-update.sh" ;;
|
||||||
|
6) run_module "backup" "acronis-logs.sh" ;;
|
||||||
|
7) run_module "backup" "acronis-uninstall.sh" ;;
|
||||||
|
8) run_module "backup" "acronis-troubleshoot.sh" ;;
|
||||||
|
0) return ;;
|
||||||
|
*) echo -e "${RED}Invalid option${NC}"; sleep 1 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# Monitoring menu
|
# Monitoring menu
|
||||||
show_monitoring_menu() {
|
show_monitoring_menu() {
|
||||||
show_banner
|
show_banner
|
||||||
@@ -1324,7 +1382,8 @@ handle_backup_menu() {
|
|||||||
6) run_module "backup" "log-archive.sh" ;;
|
6) run_module "backup" "log-archive.sh" ;;
|
||||||
7) run_module "backup" "backup-verification.sh" ;;
|
7) run_module "backup" "backup-verification.sh" ;;
|
||||||
8) run_module "backup" "offsite-sync.sh" ;;
|
8) run_module "backup" "offsite-sync.sh" ;;
|
||||||
9) run_module "maintenance" "cleanup-toolkit-data.sh" ;;
|
9) handle_acronis_menu ;;
|
||||||
|
10) run_module "maintenance" "cleanup-toolkit-data.sh" ;;
|
||||||
0) return ;;
|
0) return ;;
|
||||||
*) echo -e "${RED}Invalid option${NC}"; sleep 1 ;;
|
*) echo -e "${RED}Invalid option${NC}"; sleep 1 ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Executable
+268
@@ -0,0 +1,268 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Agent Status Checker
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Check status of all Acronis Cyber Protect services
|
||||||
|
# Services monitored:
|
||||||
|
# - aakore (Acronis Agent Core)
|
||||||
|
# - acronis_mms (Management Service)
|
||||||
|
# - acronis_schedule (Scheduler)
|
||||||
|
# - active-protection.service (Ransomware Protection)
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
# Require root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_banner "Acronis Agent Status"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Checking Acronis Cyber Protect Services...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Array of services to check
|
||||||
|
declare -a SERVICES=(
|
||||||
|
"aakore:Acronis Agent Core"
|
||||||
|
"acronis_mms:Management Service"
|
||||||
|
"acronis_schedule:Backup Scheduler"
|
||||||
|
"active-protection:Ransomware Protection"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Track overall status
|
||||||
|
all_running=true
|
||||||
|
any_installed=false
|
||||||
|
|
||||||
|
# Function to check service status
|
||||||
|
check_service_status() {
|
||||||
|
local service_name="$1"
|
||||||
|
local service_desc="$2"
|
||||||
|
|
||||||
|
# Check if service exists
|
||||||
|
if systemctl list-unit-files | grep -q "^${service_name}.service"; then
|
||||||
|
any_installed=true
|
||||||
|
|
||||||
|
# Get service status
|
||||||
|
if systemctl is-active --quiet "$service_name"; then
|
||||||
|
echo -e " ${GREEN}●${NC} ${BOLD}${service_desc}${NC}"
|
||||||
|
echo -e " Status: ${GREEN}RUNNING${NC}"
|
||||||
|
|
||||||
|
# Get uptime
|
||||||
|
local uptime=$(systemctl show "$service_name" -p ActiveEnterTimestamp --value)
|
||||||
|
if [ -n "$uptime" ]; then
|
||||||
|
echo -e " Uptime: ${uptime}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get PID
|
||||||
|
local pid=$(systemctl show "$service_name" -p MainPID --value)
|
||||||
|
if [ "$pid" != "0" ]; then
|
||||||
|
echo -e " PID: ${pid}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
all_running=false
|
||||||
|
echo -e " ${RED}●${NC} ${BOLD}${service_desc}${NC}"
|
||||||
|
echo -e " Status: ${RED}STOPPED${NC}"
|
||||||
|
|
||||||
|
# Check if failed
|
||||||
|
if systemctl is-failed --quiet "$service_name"; then
|
||||||
|
echo -e " ${RED}[FAILED]${NC} - Service has errors"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
elif service "$service_name" status &>/dev/null; then
|
||||||
|
# Fallback to service command for older systems
|
||||||
|
any_installed=true
|
||||||
|
if service "$service_name" status | grep -q "running"; then
|
||||||
|
echo -e " ${GREEN}●${NC} ${BOLD}${service_desc}${NC}"
|
||||||
|
echo -e " Status: ${GREEN}RUNNING${NC}"
|
||||||
|
else
|
||||||
|
all_running=false
|
||||||
|
echo -e " ${RED}●${NC} ${BOLD}${service_desc}${NC}"
|
||||||
|
echo -e " Status: ${RED}STOPPED${NC}"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check each service
|
||||||
|
for service_entry in "${SERVICES[@]}"; do
|
||||||
|
IFS=':' read -r service_name service_desc <<< "$service_entry"
|
||||||
|
check_service_status "$service_name" "$service_desc"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check if Acronis is even installed
|
||||||
|
if [ "$any_installed" = false ]; then
|
||||||
|
echo -e "${YELLOW}${BOLD}⚠ Acronis Agent Not Installed${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Acronis Cyber Protect is not installed on this system."
|
||||||
|
echo ""
|
||||||
|
echo "To install:"
|
||||||
|
echo " 1. Return to Backup & Recovery menu"
|
||||||
|
echo " 2. Select 'Acronis Management'"
|
||||||
|
echo " 3. Choose 'Install Acronis Agent'"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Overall status summary
|
||||||
|
if [ "$all_running" = true ]; then
|
||||||
|
echo -e "${GREEN}${BOLD}✓ All Services Running${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Acronis Cyber Protect is operational and ready for backups."
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}${BOLD}⚠ Some Services Not Running${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Some Acronis services are stopped. You may want to:"
|
||||||
|
echo " • Start services: Select 'Service Management' from Acronis menu"
|
||||||
|
echo " • Check logs: Select 'View Logs' for error details"
|
||||||
|
echo " • Restart services: Try restarting all services"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check agent registration status
|
||||||
|
echo -e "${BOLD}Agent Registration:${NC}"
|
||||||
|
if [ -f "/var/lib/Acronis/BackupAndRecovery/MMS/user.config" ]; then
|
||||||
|
# Check for registration info in user.config
|
||||||
|
if grep -q "<registration>" "/var/lib/Acronis/BackupAndRecovery/MMS/user.config" 2>/dev/null; then
|
||||||
|
reg_address=$(grep -oP '<address>\K[^<]+' /var/lib/Acronis/BackupAndRecovery/MMS/user.config 2>/dev/null)
|
||||||
|
reg_env=$(grep -oP '<environment>\K[^<]+' /var/lib/Acronis/BackupAndRecovery/MMS/user.config 2>/dev/null)
|
||||||
|
|
||||||
|
if [ -n "$reg_address" ]; then
|
||||||
|
echo -e " ${GREEN}✓${NC} Agent is registered with Acronis Cloud"
|
||||||
|
echo -e " URL: ${reg_address}"
|
||||||
|
[ -n "$reg_env" ] && echo -e " Environment: ${reg_env}"
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} Registration incomplete"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} Agent not registered"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} Configuration file not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check active ports
|
||||||
|
echo -e "${BOLD}Network Connectivity:${NC}"
|
||||||
|
|
||||||
|
# Check for actual Acronis listening ports (deduplicate IPv4/IPv6)
|
||||||
|
acronis_ports=$(netstat -tlnp 2>/dev/null | grep -E "(acronis|mms|aakore)" | awk '{
|
||||||
|
split($4, addr, ":");
|
||||||
|
port = addr[length(addr)];
|
||||||
|
if (!seen[port]++) {
|
||||||
|
print $4 " " $7;
|
||||||
|
}
|
||||||
|
}')
|
||||||
|
|
||||||
|
if [ -n "$acronis_ports" ]; then
|
||||||
|
echo "Active Acronis services:"
|
||||||
|
echo "$acronis_ports" | while read -r addr process; do
|
||||||
|
port=$(echo "$addr" | grep -oP ':\K[0-9]+$')
|
||||||
|
if echo "$addr" | grep -q "127.0.0.1\|::1"; then
|
||||||
|
# Local-only port
|
||||||
|
if [ "$port" = "9850" ]; then
|
||||||
|
echo -e " ${GREEN}✓${NC} Port $port (localhost) - MMS Service"
|
||||||
|
else
|
||||||
|
echo -e " ${GREEN}✓${NC} Port $port (localhost) - $(basename "$process" | cut -d/ -f2)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${GREEN}✓${NC} Port $port - $(basename "$process" | cut -d/ -f2)"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} No Acronis ports detected"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check outbound connectivity to cloud (port 443)
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Cloud Connectivity Test:${NC}"
|
||||||
|
|
||||||
|
if command -v curl >/dev/null 2>&1; then
|
||||||
|
reg_url=$(grep -oP '<address>\K[^<]+' /var/lib/Acronis/BackupAndRecovery/MMS/user.config 2>/dev/null)
|
||||||
|
if [ -n "$reg_url" ]; then
|
||||||
|
echo -n " Testing ${reg_url}... "
|
||||||
|
|
||||||
|
http_code=$(timeout 5 curl -s -o /dev/null -w "%{http_code}" "$reg_url" 2>/dev/null)
|
||||||
|
|
||||||
|
if [ "$http_code" -ge 200 ] && [ "$http_code" -lt 500 ]; then
|
||||||
|
echo -e "${GREEN}✓ Reachable${NC} (HTTP $http_code)"
|
||||||
|
else
|
||||||
|
echo -e "${RED}✗ Unreachable${NC}"
|
||||||
|
echo -e " ${YELLOW}⚠${NC} Cannot reach Acronis cloud (firewall/network issue)"
|
||||||
|
echo " • Check internet connectivity"
|
||||||
|
echo " • Verify firewall allows HTTPS (port 443)"
|
||||||
|
echo " • Test manually: curl -I $reg_url"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} Cloud URL not found in config"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} curl not installed (cannot test connectivity)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check cloud storage quota
|
||||||
|
echo -e "${BOLD}Cloud Backup Storage:${NC}"
|
||||||
|
if command -v acrocmd >/dev/null 2>&1; then
|
||||||
|
vault_info=$(acrocmd list vaults 2>/dev/null | tail -n +3 | head -1)
|
||||||
|
|
||||||
|
if [ -n "$vault_info" ]; then
|
||||||
|
# Extract storage info from vault output
|
||||||
|
vault_name=$(echo "$vault_info" | awk '{print $1}')
|
||||||
|
vault_free_val=$(echo "$vault_info" | awk '{print $4}')
|
||||||
|
vault_free_unit=$(echo "$vault_info" | awk '{print $5}')
|
||||||
|
vault_occupied=$(echo "$vault_info" | awk '{print $6, $7}')
|
||||||
|
|
||||||
|
echo -e " Vault: ${vault_name}"
|
||||||
|
echo -e " Available: ${vault_free_val} ${vault_free_unit}"
|
||||||
|
|
||||||
|
# Show occupied if available, otherwise note it's not synced
|
||||||
|
if [ "$vault_occupied" != "0 GB" ]; then
|
||||||
|
echo -e " Used: ${vault_occupied}"
|
||||||
|
else
|
||||||
|
echo -e " Used: ${DIM}(Check web console for accurate usage)${NC}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} No vault information available"
|
||||||
|
echo -e " ${DIM}(Cloud storage visible after first backup)${NC}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} acrocmd not available"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check local disk space
|
||||||
|
echo -e "${BOLD}Local Storage Status:${NC}"
|
||||||
|
if [ -d "/var/lib/Acronis" ]; then
|
||||||
|
backup_dir_size=$(du -sh /var/lib/Acronis 2>/dev/null | awk '{print $1}')
|
||||||
|
echo -e " Agent data: ${backup_dir_size} (local cache/logs/config)"
|
||||||
|
|
||||||
|
# Check free space on partition
|
||||||
|
free_space=$(df -h /var/lib/Acronis | tail -1 | awk '{print $4}')
|
||||||
|
use_percent=$(df -h /var/lib/Acronis | tail -1 | awk '{print $5}' | tr -d '%')
|
||||||
|
|
||||||
|
echo -e " Free space: ${free_space} (on root partition)"
|
||||||
|
|
||||||
|
if [ -n "$use_percent" ] && [ "$use_percent" -gt 90 ] 2>/dev/null; then
|
||||||
|
echo -e " ${RED}⚠ Warning: Disk usage at ${use_percent}%${NC}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
Executable
+103
@@ -0,0 +1,103 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Backup Manager
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Main interface for Acronis backup operations
|
||||||
|
# Features:
|
||||||
|
# - List backups and archives
|
||||||
|
# - Trigger manual backups
|
||||||
|
# - View backup schedules
|
||||||
|
# - Monitor backup/recovery status
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if Acronis is installed
|
||||||
|
if ! systemctl list-unit-files | grep -q "acronis_mms.service"; then
|
||||||
|
print_error "Acronis is not installed"
|
||||||
|
echo ""
|
||||||
|
echo "Install Acronis first from the Acronis menu."
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if acrocmd is available
|
||||||
|
if [ ! -f "/usr/sbin/acrocmd" ]; then
|
||||||
|
print_error "acrocmd command-line tool not found"
|
||||||
|
echo ""
|
||||||
|
echo "This may indicate an incomplete Acronis installation."
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
clear
|
||||||
|
print_banner "Backup Management"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Agent Management${NC}"
|
||||||
|
echo -e " ${YELLOW}1)${NC} Check Agent Status"
|
||||||
|
echo -e " ${YELLOW}2)${NC} View Agent Logs"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Backup Operations${NC}"
|
||||||
|
echo -e " ${YELLOW}3)${NC} List Backups & Archives"
|
||||||
|
echo -e " ${YELLOW}4)${NC} Trigger Manual Backup"
|
||||||
|
echo -e " ${YELLOW}5)${NC} Check Backup Status"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Plan Management${NC}"
|
||||||
|
echo -e " ${YELLOW}6)${NC} View Backup Plans/Schedules"
|
||||||
|
echo -e " ${YELLOW}7)${NC} Manage Protection Plans"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Restore Operations${NC}"
|
||||||
|
echo -e " ${YELLOW}8)${NC} Restore from Backup (Future)"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${YELLOW}0)${NC} Return to Acronis Menu"
|
||||||
|
echo ""
|
||||||
|
echo -n "Select option: "
|
||||||
|
read -r choice
|
||||||
|
|
||||||
|
case "$choice" in
|
||||||
|
1)
|
||||||
|
bash "$SCRIPT_DIR/modules/backup/acronis-agent-status.sh"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
bash "$SCRIPT_DIR/modules/backup/acronis-logs.sh"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
bash "$SCRIPT_DIR/modules/backup/acronis-list-backups.sh"
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
bash "$SCRIPT_DIR/modules/backup/acronis-trigger-backup.sh"
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
bash "$SCRIPT_DIR/modules/backup/acronis-backup-status.sh"
|
||||||
|
;;
|
||||||
|
6)
|
||||||
|
bash "$SCRIPT_DIR/modules/backup/acronis-schedule-viewer.sh"
|
||||||
|
;;
|
||||||
|
7)
|
||||||
|
bash "$SCRIPT_DIR/modules/backup/acronis-plan-manager.sh"
|
||||||
|
;;
|
||||||
|
8)
|
||||||
|
bash "$SCRIPT_DIR/modules/backup/acronis-restore.sh"
|
||||||
|
;;
|
||||||
|
0)
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo ""
|
||||||
|
print_error "Invalid option"
|
||||||
|
sleep 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
Executable
+118
@@ -0,0 +1,118 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Backup Status
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Check status of backup operations using acrocmd
|
||||||
|
# Features:
|
||||||
|
# - Show active/running backups
|
||||||
|
# - Display recent backup history
|
||||||
|
# - Show backup task status
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
clear
|
||||||
|
print_banner "Backup Status"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if acrocmd is available
|
||||||
|
if [ ! -f "/usr/sbin/acrocmd" ]; then
|
||||||
|
print_error "acrocmd command-line tool not found"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Show active/running tasks
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo -e "${BOLD}Active Backup Tasks${NC}"
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
task_output=$(/usr/sbin/acrocmd list tasks 2>&1)
|
||||||
|
|
||||||
|
if echo "$task_output" | grep -qi "no.*tasks\|error"; then
|
||||||
|
echo -e "${GREEN}✓${NC} No active backup tasks running"
|
||||||
|
else
|
||||||
|
echo "$task_output"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Show recent activities
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo -e "${BOLD}Recent Backup Activities${NC}"
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
activity_output=$(/usr/sbin/acrocmd list activities 2>&1)
|
||||||
|
|
||||||
|
if echo "$activity_output" | grep -qi "no.*activities\|error"; then
|
||||||
|
echo -e "${YELLOW}No recent backup activities found${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "This may indicate:"
|
||||||
|
echo " • No backups have been run yet"
|
||||||
|
echo " • Agent needs registration"
|
||||||
|
echo " • No backup plans configured"
|
||||||
|
else
|
||||||
|
echo "$activity_output" | tail -20
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Parse logs for backup status
|
||||||
|
if [ -f "/var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log" ]; then
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo -e "${BOLD}Log Summary${NC}"
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Count recent backup events
|
||||||
|
log_file="/var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log"
|
||||||
|
|
||||||
|
completed=$(grep -ic "backup.*completed\|backup.*success" "$log_file" 2>/dev/null || echo "0")
|
||||||
|
failed=$(grep -ic "backup.*failed\|backup.*error" "$log_file" 2>/dev/null || echo "0")
|
||||||
|
started=$(grep -ic "backup.*started\|backup.*begin" "$log_file" 2>/dev/null || echo "0")
|
||||||
|
|
||||||
|
echo "Backup Statistics (from current log):"
|
||||||
|
echo " • Started: $started"
|
||||||
|
echo " • Completed: $completed"
|
||||||
|
echo " • Failed: $failed"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Show last 5 backup-related events
|
||||||
|
echo "Recent Events:"
|
||||||
|
echo ""
|
||||||
|
grep -i "backup" "$log_file" 2>/dev/null | tail -5 | while read -r line; do
|
||||||
|
# Highlight status
|
||||||
|
if echo "$line" | grep -qi "success\|completed"; then
|
||||||
|
echo -e " ${GREEN}✓${NC} $line"
|
||||||
|
elif echo "$line" | grep -qi "fail\|error"; then
|
||||||
|
echo -e " ${RED}✗${NC} $line"
|
||||||
|
else
|
||||||
|
echo " → $line"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Options:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " • View full logs: Select 'View Agent Logs' from menu"
|
||||||
|
echo " • Trigger backup: Select 'Trigger Manual Backup'"
|
||||||
|
echo " • Troubleshoot: Use 'Troubleshoot Backups' for diagnostics"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
press_enter
|
||||||
Executable
+54
@@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_banner "Configure Backup Plans"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Acronis Backup Plan Configuration${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Backup plans are configured through the Acronis web console."
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}Steps to configure backup plans:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "1. Log in to your Acronis web console"
|
||||||
|
echo " → https://us5-cloud.acronis.com (or your region)"
|
||||||
|
echo ""
|
||||||
|
echo "2. Navigate to: Devices → All devices"
|
||||||
|
echo ""
|
||||||
|
echo "3. Find this server in the device list"
|
||||||
|
echo ""
|
||||||
|
echo "4. Click on the device and select 'Protection'"
|
||||||
|
echo ""
|
||||||
|
echo "5. Click 'Add plan' and configure:"
|
||||||
|
echo " • Backup source (files, folders, system)"
|
||||||
|
echo " • Backup schedule (hourly, daily, weekly)"
|
||||||
|
echo " • Retention policy (how long to keep backups)"
|
||||||
|
echo " • Backup location (cloud or local)"
|
||||||
|
echo ""
|
||||||
|
echo "6. Apply the plan to this device"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Common Backup Plans:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " • Full Server Backup"
|
||||||
|
echo " → Entire system image for disaster recovery"
|
||||||
|
echo ""
|
||||||
|
echo " • cPanel Accounts"
|
||||||
|
echo " → /home/* directories for user data"
|
||||||
|
echo ""
|
||||||
|
echo " • Databases"
|
||||||
|
echo " → MySQL/MariaDB databases with consistent snapshots"
|
||||||
|
echo ""
|
||||||
|
echo " • Configuration Files"
|
||||||
|
echo " → /etc and other critical configs"
|
||||||
|
echo ""
|
||||||
|
echo " • Web Files"
|
||||||
|
echo " → /home/*/public_html websites"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
Executable
+361
@@ -0,0 +1,361 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Agent Installer
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Download and install Acronis Cyber Protect agent
|
||||||
|
# Supports:
|
||||||
|
# - Interactive installation with prompts
|
||||||
|
# - Unattended installation (-a flag)
|
||||||
|
# - Skip registration (--skip-registration)
|
||||||
|
# - Install with token (--token=xxx)
|
||||||
|
# - Custom service URL (--rain=xxx)
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
# Require root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_banner "Acronis Agent Installation"
|
||||||
|
|
||||||
|
# Check if already installed
|
||||||
|
if systemctl list-unit-files | grep -q "acronis_mms.service"; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}${BOLD}⚠ Acronis Already Installed${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Acronis Cyber Protect agent is already installed on this system."
|
||||||
|
echo ""
|
||||||
|
echo -n "Do you want to reinstall/upgrade? (yes/no): "
|
||||||
|
read -r reinstall
|
||||||
|
if [ "$reinstall" != "yes" ]; then
|
||||||
|
echo "Installation cancelled"
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Acronis Cyber Protect Agent Installation${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "This will download and install the latest Acronis agent for Linux (x86_64)."
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}Installation Options:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " 1) Interactive installation (default)"
|
||||||
|
echo " 2) Unattended installation (auto-accept)"
|
||||||
|
echo " 3) Install and register with token"
|
||||||
|
echo " 4) Install without registration"
|
||||||
|
echo " 5) Advanced/Custom installation (specify all flags)"
|
||||||
|
echo ""
|
||||||
|
echo -n "Select installation mode [1]: "
|
||||||
|
read -r install_mode
|
||||||
|
install_mode="${install_mode:-1}"
|
||||||
|
|
||||||
|
# Build installation flags
|
||||||
|
INSTALL_FLAGS=""
|
||||||
|
SERVICE_URL="us5-cloud.acronis.com"
|
||||||
|
REGISTRATION_TOKEN=""
|
||||||
|
|
||||||
|
case "$install_mode" in
|
||||||
|
2)
|
||||||
|
INSTALL_FLAGS="-a"
|
||||||
|
echo ""
|
||||||
|
echo "Mode: Unattended installation"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
INSTALL_FLAGS="-a"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Register During Installation${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Paste your Acronis registration token below."
|
||||||
|
echo "To get a token:"
|
||||||
|
echo " 1. Log in to Acronis web console"
|
||||||
|
echo " 2. Go to: Settings → Registration tokens"
|
||||||
|
echo " 3. Create token or copy existing one"
|
||||||
|
echo ""
|
||||||
|
echo -n "Registration token: "
|
||||||
|
read -r REGISTRATION_TOKEN
|
||||||
|
|
||||||
|
# Allow pasting multi-line or trimming whitespace
|
||||||
|
REGISTRATION_TOKEN=$(echo "$REGISTRATION_TOKEN" | tr -d '[:space:]')
|
||||||
|
|
||||||
|
if [ -z "$REGISTRATION_TOKEN" ]; then
|
||||||
|
print_error "Token is required for this mode"
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
INSTALL_FLAGS="$INSTALL_FLAGS --token=$REGISTRATION_TOKEN"
|
||||||
|
echo ""
|
||||||
|
echo "Mode: Install with registration token"
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
INSTALL_FLAGS="-a --skip-registration"
|
||||||
|
echo ""
|
||||||
|
echo "Mode: Install without registration"
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
# Advanced/Custom mode
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Advanced Installation${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Build custom installation flags by selecting options."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Unattended mode
|
||||||
|
echo -n "Unattended install (auto-accept)? (y/n) [y]: "
|
||||||
|
read -r use_unattended
|
||||||
|
use_unattended="${use_unattended:-y}"
|
||||||
|
if [ "$use_unattended" = "y" ]; then
|
||||||
|
INSTALL_FLAGS="$INSTALL_FLAGS -a"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Registration options
|
||||||
|
echo ""
|
||||||
|
echo "Registration:"
|
||||||
|
echo " 1) Register with token during install"
|
||||||
|
echo " 2) Skip registration (register later)"
|
||||||
|
echo " 3) Interactive (installer will prompt)"
|
||||||
|
echo -n "Select [3]: "
|
||||||
|
read -r reg_choice
|
||||||
|
reg_choice="${reg_choice:-3}"
|
||||||
|
|
||||||
|
if [ "$reg_choice" = "1" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "Paste your Acronis registration token:"
|
||||||
|
echo "(Spaces and line breaks will be automatically removed)"
|
||||||
|
echo ""
|
||||||
|
read -r REGISTRATION_TOKEN
|
||||||
|
REGISTRATION_TOKEN=$(echo "$REGISTRATION_TOKEN" | tr -d '[:space:]')
|
||||||
|
|
||||||
|
if [ -n "$REGISTRATION_TOKEN" ]; then
|
||||||
|
INSTALL_FLAGS="$INSTALL_FLAGS --token=$REGISTRATION_TOKEN"
|
||||||
|
else
|
||||||
|
print_error "Token cannot be empty"
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
elif [ "$reg_choice" = "2" ]; then
|
||||||
|
INSTALL_FLAGS="$INSTALL_FLAGS --skip-registration"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Additional flags
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Additional Options:${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Verbose logging
|
||||||
|
echo -n "Enable verbose logging? (y/n) [n]: "
|
||||||
|
read -r use_verbose
|
||||||
|
if [ "$use_verbose" = "y" ]; then
|
||||||
|
INSTALL_FLAGS="$INSTALL_FLAGS --verbose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Custom flags
|
||||||
|
echo ""
|
||||||
|
echo "Enter any additional custom flags (or press Enter to skip):"
|
||||||
|
echo "Examples: --proxy=http://proxy:8080, --language=en, etc."
|
||||||
|
echo ""
|
||||||
|
echo -n "Custom flags: "
|
||||||
|
read -r custom_flags
|
||||||
|
if [ -n "$custom_flags" ]; then
|
||||||
|
INSTALL_FLAGS="$INSTALL_FLAGS $custom_flags"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Mode: Advanced/Custom installation"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo ""
|
||||||
|
echo "Mode: Interactive installation"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Ask for service URL (for all modes except skip-registration)
|
||||||
|
if [[ "$INSTALL_FLAGS" != *"--skip-registration"* ]]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Acronis Cloud Region${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Common regions:"
|
||||||
|
echo " • us5-cloud.acronis.com (US - Default)"
|
||||||
|
echo " • eu2-cloud.acronis.com (Europe)"
|
||||||
|
echo " • ap1-cloud.acronis.com (Asia Pacific)"
|
||||||
|
echo " • ca1-cloud.acronis.com (Canada)"
|
||||||
|
echo ""
|
||||||
|
echo -n "Enter service URL [us5-cloud.acronis.com]: "
|
||||||
|
read -r input_url
|
||||||
|
if [ -n "$input_url" ]; then
|
||||||
|
SERVICE_URL="$input_url"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add --rain flag if token is being used
|
||||||
|
if [[ "$INSTALL_FLAGS" == *"--token"* ]]; then
|
||||||
|
INSTALL_FLAGS="$INSTALL_FLAGS --rain=$SERVICE_URL"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Installation Summary:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " Download URL: https://${SERVICE_URL}/bc/api/ams/links/agents/redirect"
|
||||||
|
echo " Architecture: x86_64 (64-bit)"
|
||||||
|
echo " Install flags: ${INSTALL_FLAGS:-none}"
|
||||||
|
echo " Service URL: ${SERVICE_URL}"
|
||||||
|
[ -n "$REGISTRATION_TOKEN" ] && echo " Token: ********"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -n "Proceed with installation? (yes/no): "
|
||||||
|
read -r confirm
|
||||||
|
|
||||||
|
if [[ ! "$confirm" =~ ^[Yy]([Ee][Ss])?$ ]]; then
|
||||||
|
echo ""
|
||||||
|
print_error "Installation cancelled"
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Starting Installation...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Create download directory in toolkit folder
|
||||||
|
DOWNLOAD_DIR="$SCRIPT_DIR/downloads"
|
||||||
|
mkdir -p "$DOWNLOAD_DIR"
|
||||||
|
cd "$DOWNLOAD_DIR" || exit 1
|
||||||
|
|
||||||
|
# Use timestamped subdirectory for this installation
|
||||||
|
INSTALL_DIR="$DOWNLOAD_DIR/acronis-install-$(date +%Y%m%d-%H%M%S)"
|
||||||
|
mkdir -p "$INSTALL_DIR"
|
||||||
|
cd "$INSTALL_DIR" || exit 1
|
||||||
|
|
||||||
|
# Download installer
|
||||||
|
echo "→ Downloading Acronis agent installer..."
|
||||||
|
DOWNLOAD_URL="https://${SERVICE_URL}/bc/api/ams/links/agents/redirect?language=multi&system=linux&architecture=64&productType=enterprise"
|
||||||
|
|
||||||
|
if wget -q --show-progress "$DOWNLOAD_URL" -O "Cyber_Protection_Agent_for_Linux_x86_64.bin"; then
|
||||||
|
print_success "Download complete"
|
||||||
|
else
|
||||||
|
print_error "Download failed"
|
||||||
|
echo ""
|
||||||
|
echo "Possible causes:"
|
||||||
|
echo " • No internet connection"
|
||||||
|
echo " • Invalid service URL: ${SERVICE_URL}"
|
||||||
|
echo " • Firewall blocking connection"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
cd /
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Make executable
|
||||||
|
chmod +x "Cyber_Protection_Agent_for_Linux_x86_64.bin" 2>/dev/null
|
||||||
|
|
||||||
|
# Verify file exists and has size
|
||||||
|
if [ ! -f "Cyber_Protection_Agent_for_Linux_x86_64.bin" ]; then
|
||||||
|
print_error "Installer file not found"
|
||||||
|
cd /
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
file_size=$(stat -c%s "Cyber_Protection_Agent_for_Linux_x86_64.bin" 2>/dev/null || echo "0")
|
||||||
|
if [ "$file_size" -lt 1000000 ]; then
|
||||||
|
print_error "Installer file is too small (possibly corrupted)"
|
||||||
|
cd /
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run installer
|
||||||
|
echo "→ Running Acronis installer..."
|
||||||
|
echo ""
|
||||||
|
echo -e "${DIM}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
|
||||||
|
if [ -z "$INSTALL_FLAGS" ]; then
|
||||||
|
# Interactive mode - run directly
|
||||||
|
./Cyber_Protection_Agent_for_Linux_x86_64.bin
|
||||||
|
else
|
||||||
|
# Unattended mode - need to pass flags properly
|
||||||
|
./Cyber_Protection_Agent_for_Linux_x86_64.bin $INSTALL_FLAGS
|
||||||
|
fi
|
||||||
|
|
||||||
|
INSTALL_EXIT_CODE=$?
|
||||||
|
|
||||||
|
echo -e "${DIM}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check installation result
|
||||||
|
if [ $INSTALL_EXIT_CODE -eq 0 ]; then
|
||||||
|
print_success "Installation completed successfully!"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Start services
|
||||||
|
echo "→ Starting Acronis services..."
|
||||||
|
systemctl start aakore
|
||||||
|
systemctl start acronis_mms
|
||||||
|
systemctl start acronis_schedule
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if services started
|
||||||
|
sleep 2
|
||||||
|
if systemctl is-active --quiet acronis_mms; then
|
||||||
|
print_success "Services started successfully"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Show next steps
|
||||||
|
echo -e "${BOLD}Next Steps:${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ "$install_mode" = "4" ]; then
|
||||||
|
echo " 1. Register the agent with Acronis Cloud"
|
||||||
|
echo " → Select 'Register with Cloud' from Acronis menu"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " 2. Configure backup plans in Acronis web console"
|
||||||
|
echo " → Visit: https://${SERVICE_URL}"
|
||||||
|
echo ""
|
||||||
|
echo " 3. Check agent status"
|
||||||
|
echo " → Select 'Check Agent Status' from Acronis menu"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
print_error "Services failed to start"
|
||||||
|
echo ""
|
||||||
|
echo "Check logs for details:"
|
||||||
|
echo " tail -f /var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
print_error "Installation failed with exit code $INSTALL_EXIT_CODE"
|
||||||
|
echo ""
|
||||||
|
echo "Check the output above for error details."
|
||||||
|
echo ""
|
||||||
|
echo "Common issues:"
|
||||||
|
echo " • Incompatible system (requires 64-bit Linux)"
|
||||||
|
echo " • Insufficient disk space"
|
||||||
|
echo " • Conflicting backup software"
|
||||||
|
echo " • Invalid registration token"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
echo "→ Cleaning up installation files..."
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
rm -rf "$INSTALL_DIR"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
Executable
+76
@@ -0,0 +1,76 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis List Backups
|
||||||
|
################################################################################
|
||||||
|
# Purpose: List all backups and archives using acrocmd
|
||||||
|
# Features:
|
||||||
|
# - Show backup archives
|
||||||
|
# - Show backup versions
|
||||||
|
# - Display backup details (size, date, location)
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
clear
|
||||||
|
print_banner "List Backups & Archives"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Retrieving backup information...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if acrocmd is available
|
||||||
|
if [ ! -f "/usr/sbin/acrocmd" ]; then
|
||||||
|
print_error "acrocmd command-line tool not found"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# List archives
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo -e "${BOLD}Backup Archives${NC}"
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if /usr/sbin/acrocmd list archives 2>/dev/null | grep -q .; then
|
||||||
|
/usr/sbin/acrocmd list archives 2>/dev/null
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}No backup archives found${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Possible reasons:"
|
||||||
|
echo " • No backups have been created yet"
|
||||||
|
echo " • Agent not registered with Acronis Cloud"
|
||||||
|
echo " • No backup plans configured"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo -e "${BOLD}Backup Details${NC}"
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if /usr/sbin/acrocmd list backups 2>/dev/null | grep -q .; then
|
||||||
|
/usr/sbin/acrocmd list backups 2>/dev/null
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}No backup details available${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Options:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " • Create backups via 'Trigger Manual Backup'"
|
||||||
|
echo " • Configure plans in Acronis web console"
|
||||||
|
echo " • Check backup status for active operations"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
press_enter
|
||||||
Executable
+296
@@ -0,0 +1,296 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Log Viewer
|
||||||
|
################################################################################
|
||||||
|
# Purpose: View and tail Acronis Cyber Protect logs
|
||||||
|
# Log location: /var/lib/Acronis/BackupAndRecovery/MMS/
|
||||||
|
# Primary log: mms.0.log
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
# Require root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Log directory
|
||||||
|
LOG_DIR="/var/lib/Acronis/BackupAndRecovery/MMS"
|
||||||
|
PRIMARY_LOG="$LOG_DIR/mms.0.log"
|
||||||
|
|
||||||
|
print_banner "Acronis Logs Viewer"
|
||||||
|
|
||||||
|
# Check if Acronis is installed
|
||||||
|
if [ ! -d "$LOG_DIR" ]; then
|
||||||
|
echo ""
|
||||||
|
print_error "Acronis log directory not found"
|
||||||
|
echo ""
|
||||||
|
echo "Acronis may not be installed or logs are in a different location."
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Acronis Log Management${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Log directory: ${LOG_DIR}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Show log menu
|
||||||
|
show_log_menu() {
|
||||||
|
clear
|
||||||
|
print_banner "Acronis Logs Viewer"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Available Logs:${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# List all log files with sizes
|
||||||
|
if [ -d "$LOG_DIR" ]; then
|
||||||
|
local log_count=0
|
||||||
|
while IFS= read -r log_file; do
|
||||||
|
((log_count++))
|
||||||
|
local size=$(du -h "$log_file" 2>/dev/null | awk '{print $1}')
|
||||||
|
local filename=$(basename "$log_file")
|
||||||
|
local mod_time=$(stat -c %y "$log_file" 2>/dev/null | cut -d'.' -f1)
|
||||||
|
echo -e " ${CYAN}${log_count})${NC} ${filename}"
|
||||||
|
echo -e " Size: ${size} | Modified: ${mod_time}"
|
||||||
|
done < <(find "$LOG_DIR" -name "*.log" -type f | sort)
|
||||||
|
|
||||||
|
if [ $log_count -eq 0 ]; then
|
||||||
|
echo -e " ${DIM}No log files found${NC}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Actions:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${GREEN}v)${NC} View Primary Log (last 100 lines)"
|
||||||
|
echo -e " ${GREEN}t)${NC} Tail Primary Log (live follow)"
|
||||||
|
echo -e " ${GREEN}s)${NC} Search Logs"
|
||||||
|
echo -e " ${GREEN}e)${NC} Show Errors Only"
|
||||||
|
echo -e " ${GREEN}a)${NC} Archive Old Logs"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${RED}0)${NC} Return to Menu"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo -n "Select option: "
|
||||||
|
}
|
||||||
|
|
||||||
|
# View primary log
|
||||||
|
view_primary_log() {
|
||||||
|
clear
|
||||||
|
print_banner "Acronis Primary Log (Last 100 Lines)"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ -f "$PRIMARY_LOG" ]; then
|
||||||
|
tail -100 "$PRIMARY_LOG"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
else
|
||||||
|
print_error "Primary log file not found: $PRIMARY_LOG"
|
||||||
|
press_enter
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Tail primary log
|
||||||
|
tail_primary_log() {
|
||||||
|
clear
|
||||||
|
print_banner "Acronis Live Log (Ctrl+C to Exit)"
|
||||||
|
echo ""
|
||||||
|
echo "Following: $PRIMARY_LOG"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ -f "$PRIMARY_LOG" ]; then
|
||||||
|
tail -f "$PRIMARY_LOG"
|
||||||
|
else
|
||||||
|
print_error "Primary log file not found: $PRIMARY_LOG"
|
||||||
|
press_enter
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Search logs
|
||||||
|
search_logs() {
|
||||||
|
clear
|
||||||
|
print_banner "Search Acronis Logs"
|
||||||
|
echo ""
|
||||||
|
echo -n "Enter search term: "
|
||||||
|
read -r search_term
|
||||||
|
|
||||||
|
if [ -z "$search_term" ]; then
|
||||||
|
print_error "No search term provided"
|
||||||
|
press_enter
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Searching for: ${search_term}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Search all log files
|
||||||
|
local found=false
|
||||||
|
while IFS= read -r log_file; do
|
||||||
|
if grep -qi "$search_term" "$log_file" 2>/dev/null; then
|
||||||
|
found=true
|
||||||
|
echo -e "${BOLD}$(basename "$log_file"):${NC}"
|
||||||
|
grep -i --color=always "$search_term" "$log_file" | tail -20
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
done < <(find "$LOG_DIR" -name "*.log" -type f)
|
||||||
|
|
||||||
|
if [ "$found" = false ]; then
|
||||||
|
echo "No matches found for: $search_term"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show errors only
|
||||||
|
show_errors() {
|
||||||
|
clear
|
||||||
|
print_banner "Acronis Errors (Last 50)"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ -f "$PRIMARY_LOG" ]; then
|
||||||
|
echo "Filtering for ERROR, WARN, FAIL, CRITICAL..."
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
grep -iE "error|warn|fail|critical" "$PRIMARY_LOG" | tail -50 | while IFS= read -r line; do
|
||||||
|
# Color code by severity
|
||||||
|
if echo "$line" | grep -qi "critical"; then
|
||||||
|
echo -e "${RED}${BOLD}${line}${NC}"
|
||||||
|
elif echo "$line" | grep -qi "error"; then
|
||||||
|
echo -e "${RED}${line}${NC}"
|
||||||
|
elif echo "$line" | grep -qi "warn"; then
|
||||||
|
echo -e "${YELLOW}${line}${NC}"
|
||||||
|
else
|
||||||
|
echo "$line"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
print_error "Primary log file not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
press_enter
|
||||||
|
}
|
||||||
|
|
||||||
|
# Archive old logs
|
||||||
|
archive_old_logs() {
|
||||||
|
clear
|
||||||
|
print_banner "Archive Old Logs"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Calculate total size
|
||||||
|
local total_size=$(du -sh "$LOG_DIR" 2>/dev/null | awk '{print $1}')
|
||||||
|
local log_count=$(find "$LOG_DIR" -name "*.log" -type f | wc -l)
|
||||||
|
|
||||||
|
echo "Current log status:"
|
||||||
|
echo " Directory: $LOG_DIR"
|
||||||
|
echo " Total size: $total_size"
|
||||||
|
echo " Log files: $log_count"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Find old logs (older than 30 days)
|
||||||
|
local old_logs=$(find "$LOG_DIR" -name "*.log" -type f -mtime +30 2>/dev/null | wc -l)
|
||||||
|
|
||||||
|
if [ $old_logs -eq 0 ]; then
|
||||||
|
echo -e "${GREEN}✓ No old logs found (>30 days)${NC}"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Found $old_logs log file(s) older than 30 days"
|
||||||
|
echo ""
|
||||||
|
echo "Archive location: /root/acronis-logs-archive-$(date +%Y%m%d).tar.gz"
|
||||||
|
echo ""
|
||||||
|
echo -n "Create archive and remove old logs? (yes/no): "
|
||||||
|
read -r confirm
|
||||||
|
|
||||||
|
if [ "$confirm" != "yes" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "Archive cancelled"
|
||||||
|
press_enter
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "→ Creating archive..."
|
||||||
|
|
||||||
|
# Create archive
|
||||||
|
local archive_name="/root/acronis-logs-archive-$(date +%Y%m%d).tar.gz"
|
||||||
|
if find "$LOG_DIR" -name "*.log" -type f -mtime +30 -print0 2>/dev/null | tar -czf "$archive_name" --null -T -; then
|
||||||
|
print_success "Archive created: $archive_name"
|
||||||
|
|
||||||
|
# Remove old logs
|
||||||
|
echo ""
|
||||||
|
echo "→ Removing old logs..."
|
||||||
|
find "$LOG_DIR" -name "*.log" -type f -mtime +30 -delete 2>/dev/null
|
||||||
|
|
||||||
|
local remaining=$(find "$LOG_DIR" -name "*.log" -type f | wc -l)
|
||||||
|
echo ""
|
||||||
|
print_success "Old logs archived and removed"
|
||||||
|
echo ""
|
||||||
|
echo "Remaining log files: $remaining"
|
||||||
|
else
|
||||||
|
print_error "Failed to create archive"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main loop
|
||||||
|
while true; do
|
||||||
|
show_log_menu
|
||||||
|
read -r choice
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
v) view_primary_log ;;
|
||||||
|
t) tail_primary_log ;;
|
||||||
|
s) search_logs ;;
|
||||||
|
e) show_errors ;;
|
||||||
|
a) archive_old_logs ;;
|
||||||
|
0) exit 0 ;;
|
||||||
|
*)
|
||||||
|
# Check if numeric selection for specific log file
|
||||||
|
if [[ "$choice" =~ ^[0-9]+$ ]]; then
|
||||||
|
log_files=($(find "$LOG_DIR" -name "*.log" -type f | sort))
|
||||||
|
if [ $choice -gt 0 ] && [ $choice -le ${#log_files[@]} ]; then
|
||||||
|
selected_log="${log_files[$((choice-1))]}"
|
||||||
|
clear
|
||||||
|
print_banner "Log: $(basename "$selected_log")"
|
||||||
|
echo ""
|
||||||
|
tail -100 "$selected_log"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
else
|
||||||
|
print_error "Invalid log selection"
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_error "Invalid option"
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
Executable
+42
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_banner "Create Manual Backup"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Manual Backup Creation${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Manual backups are triggered through the Acronis web console or CLI."
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}Web Console Method (Recommended):${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "1. Log in to Acronis web console"
|
||||||
|
echo "2. Go to: Devices → Select this server"
|
||||||
|
echo "3. Click 'Back up now' button"
|
||||||
|
echo "4. Monitor backup progress in real-time"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}Command Line Method:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Use the Acronis CLI tool (acrocmd):"
|
||||||
|
echo ""
|
||||||
|
echo " # List available plans"
|
||||||
|
echo " acrocmd list plans"
|
||||||
|
echo ""
|
||||||
|
echo " # Run backup for specific plan"
|
||||||
|
echo " acrocmd backup run --plan <plan_id>"
|
||||||
|
echo ""
|
||||||
|
echo " # Create ad-hoc backup"
|
||||||
|
echo " acrocmd backup create --source /path/to/data --destination /backup/path"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Note:${NC} Detailed CLI backup functionality can be added here based on"
|
||||||
|
echo "your specific requirements. Would you like me to implement the full"
|
||||||
|
echo "CLI backup interface?"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
Executable
+210
@@ -0,0 +1,210 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Plan Manager
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Manage Acronis protection plans
|
||||||
|
# Features:
|
||||||
|
# - List protection plans
|
||||||
|
# - View plan details
|
||||||
|
# - Enable/disable plans
|
||||||
|
# - Guidance for plan configuration
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
clear
|
||||||
|
print_banner "Protection Plan Management"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if acrocmd is available
|
||||||
|
if [ ! -f "/usr/sbin/acrocmd" ]; then
|
||||||
|
print_error "acrocmd command-line tool not found"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# List plans
|
||||||
|
echo -e "${BOLD}Current Protection Plans${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
plan_output=$(/usr/sbin/acrocmd list plans 2>&1)
|
||||||
|
|
||||||
|
if echo "$plan_output" | grep -qi "error\|no.*plans"; then
|
||||||
|
echo -e "${YELLOW}No protection plans configured${NC}"
|
||||||
|
HAS_PLANS=false
|
||||||
|
else
|
||||||
|
echo "$plan_output"
|
||||||
|
HAS_PLANS=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ "$HAS_PLANS" = true ]; then
|
||||||
|
echo -e "${BOLD}Plan Management Options${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " 1) View detailed plan information"
|
||||||
|
echo " 2) Enable/disable plan"
|
||||||
|
echo " 3) Delete plan"
|
||||||
|
echo " 4) Create new plan (via web console)"
|
||||||
|
echo " 0) Return"
|
||||||
|
echo ""
|
||||||
|
echo -n "Select option [0]: "
|
||||||
|
read -r choice
|
||||||
|
choice="${choice:-0}"
|
||||||
|
|
||||||
|
case "$choice" in
|
||||||
|
1)
|
||||||
|
echo ""
|
||||||
|
echo -n "Enter plan ID or name: "
|
||||||
|
read -r plan_id
|
||||||
|
|
||||||
|
if [ -n "$plan_id" ]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Plan Details:${NC}"
|
||||||
|
echo ""
|
||||||
|
/usr/sbin/acrocmd show plan "$plan_id" 2>&1 || {
|
||||||
|
echo ""
|
||||||
|
print_error "Could not retrieve plan details"
|
||||||
|
echo "Check that the plan ID/name is correct"
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
2)
|
||||||
|
echo ""
|
||||||
|
echo -n "Enter plan ID to enable/disable: "
|
||||||
|
read -r plan_id
|
||||||
|
|
||||||
|
if [ -n "$plan_id" ]; then
|
||||||
|
echo ""
|
||||||
|
echo " 1) Enable plan"
|
||||||
|
echo " 2) Disable plan"
|
||||||
|
echo ""
|
||||||
|
echo -n "Select [1]: "
|
||||||
|
read -r action
|
||||||
|
action="${action:-1}"
|
||||||
|
|
||||||
|
if [ "$action" = "1" ]; then
|
||||||
|
/usr/sbin/acrocmd plan enable "$plan_id" 2>&1 && {
|
||||||
|
print_success "Plan enabled"
|
||||||
|
} || {
|
||||||
|
print_error "Failed to enable plan"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/usr/sbin/acrocmd plan disable "$plan_id" 2>&1 && {
|
||||||
|
print_success "Plan disabled"
|
||||||
|
} || {
|
||||||
|
print_error "Failed to disable plan"
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
3)
|
||||||
|
echo ""
|
||||||
|
echo -e "${RED}${BOLD}Delete Protection Plan${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}Warning:${NC} This will delete the plan configuration."
|
||||||
|
echo "Existing backups will be retained."
|
||||||
|
echo ""
|
||||||
|
echo -n "Enter plan ID to delete: "
|
||||||
|
read -r plan_id
|
||||||
|
|
||||||
|
if [ -n "$plan_id" ]; then
|
||||||
|
echo ""
|
||||||
|
echo -n "Confirm deletion (type 'yes'): "
|
||||||
|
read -r confirm
|
||||||
|
|
||||||
|
if [ "$confirm" = "yes" ]; then
|
||||||
|
/usr/sbin/acrocmd delete plan "$plan_id" 2>&1 && {
|
||||||
|
print_success "Plan deleted"
|
||||||
|
} || {
|
||||||
|
print_error "Failed to delete plan"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
echo "Cancelled"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
4)
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Create New Protection Plan${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Protection plans are best created via the web console"
|
||||||
|
echo "for full configuration options and validation."
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}Web Console Method:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "1. Log in to Acronis web console"
|
||||||
|
|
||||||
|
# Get cloud URL
|
||||||
|
if [ -f "/etc/Acronis/Global.config" ]; then
|
||||||
|
cloud_url=$(grep -oP 'CloudUrl[>=\"].*?https://[^\"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^\"<]+' | head -1)
|
||||||
|
if [ -n "$cloud_url" ]; then
|
||||||
|
echo " ${cloud_url}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "2. Navigate to: Devices → Select this server"
|
||||||
|
echo "3. Click 'Add protection plan'"
|
||||||
|
echo "4. Configure plan settings:"
|
||||||
|
echo " • What to back up (entire system/volumes/files)"
|
||||||
|
echo " • Where to store (cloud/local)"
|
||||||
|
echo " • When to run (schedule)"
|
||||||
|
echo " • How long to keep (retention)"
|
||||||
|
echo "5. Save and activate"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Advanced CLI Method:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "For advanced users, plans can be created via acrocmd:"
|
||||||
|
echo " acrocmd create plan --help"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo -e "${BOLD}Getting Started with Protection Plans${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Protection plans define your backup strategy:"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}What:${NC} Files, folders, volumes, or entire system"
|
||||||
|
echo -e "${CYAN}Where:${NC} Cloud storage or local destination"
|
||||||
|
echo -e "${CYAN}When:${NC} Scheduled times (hourly/daily/weekly/monthly)"
|
||||||
|
echo -e "${CYAN}Keep:${NC} Retention policy (days/versions to keep)"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}To Create Your First Plan:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "1. Log in to Acronis web console"
|
||||||
|
|
||||||
|
# Get cloud URL
|
||||||
|
if [ -f "/etc/Acronis/Global.config" ]; then
|
||||||
|
cloud_url=$(grep -oP 'CloudUrl[>=\"].*?https://[^\"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^\"<]+' | head -1)
|
||||||
|
if [ -n "$cloud_url" ]; then
|
||||||
|
echo " ${cloud_url}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "2. Navigate to: Devices → This server"
|
||||||
|
echo "3. Click 'Add protection plan'"
|
||||||
|
echo "4. Follow the configuration wizard"
|
||||||
|
echo "5. Activate the plan"
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}Tip:${NC} Start with a simple file backup plan to test,"
|
||||||
|
echo " then create full system backup plans as needed."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
Executable
+231
@@ -0,0 +1,231 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Agent Registration
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Register Acronis agent with Acronis Cloud
|
||||||
|
# Command: /usr/lib/Acronis/RegisterAgentTool/RegisterAgent
|
||||||
|
# Flags:
|
||||||
|
# -o register - Operation: register
|
||||||
|
# -t cloud - Type: cloud-based
|
||||||
|
# -a <url> - Service URL
|
||||||
|
# --token <token> - Registration token
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
# Require root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_banner "Acronis Agent Registration"
|
||||||
|
|
||||||
|
# Check if agent is installed
|
||||||
|
if [ ! -f "/usr/lib/Acronis/RegisterAgentTool/RegisterAgent" ]; then
|
||||||
|
echo ""
|
||||||
|
print_error "Acronis agent is not installed"
|
||||||
|
echo ""
|
||||||
|
echo "Please install the agent first:"
|
||||||
|
echo " 1. Return to Acronis Management menu"
|
||||||
|
echo " 2. Select 'Install Acronis Agent'"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check current registration status
|
||||||
|
echo -e "${BOLD}Current Registration Status:${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ -f "/etc/Acronis/Global.config" ]; then
|
||||||
|
if grep -q "CloudUrl" "/etc/Acronis/Global.config" 2>/dev/null; then
|
||||||
|
echo -e " ${GREEN}✓${NC} Agent is currently registered"
|
||||||
|
|
||||||
|
# Extract current cloud URL
|
||||||
|
current_url=$(grep -oP 'CloudUrl[>="].*?https://[^"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^"<]+' | head -1)
|
||||||
|
if [ -n "$current_url" ]; then
|
||||||
|
echo -e " Current URL: ${current_url}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}⚠ Agent is already registered${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Do you want to:"
|
||||||
|
echo " 1) Keep current registration"
|
||||||
|
echo " 2) Re-register (will overwrite current registration)"
|
||||||
|
echo ""
|
||||||
|
echo -n "Select [1]: "
|
||||||
|
read -r choice
|
||||||
|
choice="${choice:-1}"
|
||||||
|
|
||||||
|
if [ "$choice" = "1" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "Keeping current registration"
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Proceeding with re-registration..."
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}○${NC} Agent is not registered"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}○${NC} No configuration found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Agent Registration${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "You'll need:"
|
||||||
|
echo " • Acronis Cloud service URL (e.g., us5-cloud.acronis.com)"
|
||||||
|
echo " • Registration token from Acronis web console"
|
||||||
|
echo ""
|
||||||
|
echo "To get a registration token:"
|
||||||
|
echo " 1. Log in to Acronis web console"
|
||||||
|
echo " 2. Go to Settings → Registration tokens"
|
||||||
|
echo " 3. Create a new token or copy existing one"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Get service URL
|
||||||
|
echo -n "Enter Acronis Cloud service URL [us5-cloud.acronis.com]: "
|
||||||
|
read -r service_url
|
||||||
|
service_url="${service_url:-us5-cloud.acronis.com}"
|
||||||
|
|
||||||
|
# Validate URL format
|
||||||
|
if [[ ! "$service_url" =~ ^[a-z0-9.-]+\.acronis\.com$ ]]; then
|
||||||
|
print_error "Invalid service URL format"
|
||||||
|
echo ""
|
||||||
|
echo "Expected format: region-cloud.acronis.com"
|
||||||
|
echo "Examples:"
|
||||||
|
echo " • us5-cloud.acronis.com"
|
||||||
|
echo " • eu2-cloud.acronis.com"
|
||||||
|
echo " • ap1-cloud.acronis.com"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get registration token
|
||||||
|
echo ""
|
||||||
|
echo -n "Enter registration token: "
|
||||||
|
read -r reg_token
|
||||||
|
|
||||||
|
if [ -z "$reg_token" ]; then
|
||||||
|
print_error "Registration token is required"
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Confirm registration
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Registration Summary:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " Service URL: https://${service_url}"
|
||||||
|
echo " Token: ${reg_token:0:8}...${reg_token: -4}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -n "Proceed with registration? (yes/no): "
|
||||||
|
read -r confirm
|
||||||
|
|
||||||
|
if [ "$confirm" != "yes" ]; then
|
||||||
|
echo ""
|
||||||
|
print_error "Registration cancelled"
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Registering Agent...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Run registration command
|
||||||
|
REGISTER_CMD="/usr/lib/Acronis/RegisterAgentTool/RegisterAgent"
|
||||||
|
REGISTER_ARGS="-o register -t cloud -a https://${service_url} --token ${reg_token}"
|
||||||
|
|
||||||
|
echo "→ Contacting Acronis Cloud..."
|
||||||
|
echo ""
|
||||||
|
echo -e "${DIM}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
|
||||||
|
# Execute registration
|
||||||
|
if $REGISTER_CMD $REGISTER_ARGS; then
|
||||||
|
REG_EXIT_CODE=$?
|
||||||
|
else
|
||||||
|
REG_EXIT_CODE=$?
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${DIM}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check result
|
||||||
|
if [ $REG_EXIT_CODE -eq 0 ]; then
|
||||||
|
print_success "Registration successful!"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Restart services to apply registration
|
||||||
|
echo "→ Restarting Acronis services..."
|
||||||
|
systemctl restart acronis_mms
|
||||||
|
systemctl restart aakore
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
if systemctl is-active --quiet acronis_mms; then
|
||||||
|
print_success "Services restarted successfully"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -e "${BOLD}Agent Registered Successfully!${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo " 1. Log in to Acronis web console:"
|
||||||
|
echo " → https://${service_url}"
|
||||||
|
echo ""
|
||||||
|
echo " 2. Find this agent in the device list"
|
||||||
|
echo " → Navigate to: Devices → All devices"
|
||||||
|
echo ""
|
||||||
|
echo " 3. Assign backup plans to this agent"
|
||||||
|
echo " → Select device → Protection → Add plan"
|
||||||
|
echo ""
|
||||||
|
echo " 4. Check agent status from this toolkit"
|
||||||
|
echo " → Select 'Check Agent Status' from Acronis menu"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
print_error "Services failed to restart"
|
||||||
|
echo ""
|
||||||
|
echo "Registration may have succeeded but services need attention."
|
||||||
|
echo "Check logs: tail -f /var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
print_error "Registration failed with exit code $REG_EXIT_CODE"
|
||||||
|
echo ""
|
||||||
|
echo "Common issues:"
|
||||||
|
echo " • Invalid registration token"
|
||||||
|
echo " • Incorrect service URL"
|
||||||
|
echo " • Network connectivity issues"
|
||||||
|
echo " • Firewall blocking connection to Acronis Cloud"
|
||||||
|
echo " • Token already used or expired"
|
||||||
|
echo ""
|
||||||
|
echo "Troubleshooting:"
|
||||||
|
echo " 1. Verify token in Acronis web console"
|
||||||
|
echo " 2. Check network connectivity:"
|
||||||
|
echo " curl -I https://${service_url}"
|
||||||
|
echo ""
|
||||||
|
echo " 3. Check agent logs:"
|
||||||
|
echo " tail -f /var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
press_enter
|
||||||
Executable
+58
@@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_banner "Restore from Backup"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${RED}${BOLD}⚠️ RESTORE OPERATION ⚠️${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Restoring from backups requires careful planning to avoid data loss."
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Restore Methods:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}1. Web Console Method (Recommended)${NC}"
|
||||||
|
echo " • Most user-friendly with visual interface"
|
||||||
|
echo " • Full preview of backup contents"
|
||||||
|
echo " • Granular file/folder selection"
|
||||||
|
echo ""
|
||||||
|
echo " Steps:"
|
||||||
|
echo " a) Log in to Acronis web console"
|
||||||
|
echo " b) Navigate to: Backup → Recovery"
|
||||||
|
echo " c) Select backup archive"
|
||||||
|
echo " d) Choose recovery point (date/time)"
|
||||||
|
echo " e) Select files/folders to restore"
|
||||||
|
echo " f) Choose restore destination"
|
||||||
|
echo " g) Start recovery process"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}2. Command Line Method${NC}"
|
||||||
|
echo " • For advanced users and automation"
|
||||||
|
echo " • Requires acrocmd CLI tool"
|
||||||
|
echo ""
|
||||||
|
echo " Basic syntax:"
|
||||||
|
echo " acrocmd recover --archive <archive_id> \\"
|
||||||
|
echo " --recoverypoint <point_id> \\"
|
||||||
|
echo " --destination /restore/path"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}3. Bootable Media Recovery${NC}"
|
||||||
|
echo " • For full system disaster recovery"
|
||||||
|
echo " • Boot from Acronis bootable USB/ISO"
|
||||||
|
echo " • Restore entire system image"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Important Notes:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " ⚠ Test restores in a non-production environment first"
|
||||||
|
echo " ⚠ Verify backup integrity before critical restores"
|
||||||
|
echo " ⚠ Consider restoring to alternate location first"
|
||||||
|
echo " ⚠ Backup current data before overwriting"
|
||||||
|
echo ""
|
||||||
|
echo "Would you like me to implement an interactive restore wizard"
|
||||||
|
echo "with CLI backup browsing and restore capabilities?"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
Executable
+109
@@ -0,0 +1,109 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Schedule Viewer
|
||||||
|
################################################################################
|
||||||
|
# Purpose: View backup schedules and protection plans
|
||||||
|
# Features:
|
||||||
|
# - List all protection plans
|
||||||
|
# - Show backup schedules
|
||||||
|
# - Display plan details
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
clear
|
||||||
|
print_banner "Backup Plans & Schedules"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if acrocmd is available
|
||||||
|
if [ ! -f "/usr/sbin/acrocmd" ]; then
|
||||||
|
print_error "acrocmd command-line tool not found"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# List protection plans
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo -e "${BOLD}Protection Plans${NC}"
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
plan_output=$(/usr/sbin/acrocmd list plans 2>&1)
|
||||||
|
|
||||||
|
if echo "$plan_output" | grep -qi "error\|no.*plans"; then
|
||||||
|
echo -e "${YELLOW}No protection plans found${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Protection plans define what, when, and how to back up."
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}To Create Protection Plans:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "1. Log in to Acronis web console"
|
||||||
|
|
||||||
|
# Try to get cloud URL
|
||||||
|
if [ -f "/etc/Acronis/Global.config" ]; then
|
||||||
|
cloud_url=$(grep -oP 'CloudUrl[>=\"].*?https://[^\"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^\"<]+' | head -1)
|
||||||
|
if [ -n "$cloud_url" ]; then
|
||||||
|
echo " ${cloud_url}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "2. Navigate to: Devices → Select this server"
|
||||||
|
echo "3. Click 'Add protection plan'"
|
||||||
|
echo "4. Configure:"
|
||||||
|
echo " • Backup source (files/folders/volumes)"
|
||||||
|
echo " • Backup destination (cloud/local)"
|
||||||
|
echo " • Schedule (hourly/daily/weekly/monthly)"
|
||||||
|
echo " • Retention policy"
|
||||||
|
echo "5. Save and activate plan"
|
||||||
|
else
|
||||||
|
echo "$plan_output"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check schedule status from service
|
||||||
|
echo -e "${BOLD}Schedule Service Status${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if systemctl is-active --quiet acronis_schedule 2>/dev/null; then
|
||||||
|
echo -e "${GREEN}✓${NC} Acronis scheduler is running"
|
||||||
|
|
||||||
|
# Show recent schedule events from log
|
||||||
|
if [ -f "/var/lib/Acronis/BackupAndRecovery/scheduler.log" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "Recent scheduler activity:"
|
||||||
|
echo ""
|
||||||
|
tail -5 /var/lib/Acronis/BackupAndRecovery/scheduler.log 2>/dev/null | while read -r line; do
|
||||||
|
echo " $line"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}⚠${NC} Acronis scheduler is not running"
|
||||||
|
echo ""
|
||||||
|
echo "Start it with: systemctl start acronis_schedule"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Next Steps:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " • Trigger manual backup: Select 'Trigger Manual Backup'"
|
||||||
|
echo " • Manage plans: Select 'Manage Protection Plans'"
|
||||||
|
echo " • Check status: Select 'Check Backup Status'"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
press_enter
|
||||||
Executable
+45
@@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_banner "View Backup Status"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Acronis Backup Status${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Checking backup status..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if acrocmd exists
|
||||||
|
if ! command -v acrocmd &>/dev/null; then
|
||||||
|
echo -e "${YELLOW}acrocmd CLI tool not found${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Backup status is available through:"
|
||||||
|
echo " • Acronis web console (real-time status)"
|
||||||
|
echo " • Agent logs (see 'View Logs' option)"
|
||||||
|
echo ""
|
||||||
|
echo "To use CLI: acrocmd may need to be installed separately"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Show recent backup activities from logs
|
||||||
|
if [ -f "/var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log" ]; then
|
||||||
|
echo -e "${BOLD}Recent Backup Activity:${NC}"
|
||||||
|
echo ""
|
||||||
|
grep -i "backup.*completed\|backup.*started\|backup.*failed" /var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log 2>/dev/null | tail -10
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "For detailed status, use:"
|
||||||
|
echo " • Web console: Full backup history and status"
|
||||||
|
echo " • acrocmd: Command-line status queries"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
Executable
+202
@@ -0,0 +1,202 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Trigger Backup
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Trigger manual backups using acrocmd
|
||||||
|
# Features:
|
||||||
|
# - List available backup plans
|
||||||
|
# - Run backup for specific plan
|
||||||
|
# - Trigger ad-hoc backup
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
clear
|
||||||
|
print_banner "Trigger Manual Backup"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if acrocmd is available
|
||||||
|
if [ ! -f "/usr/sbin/acrocmd" ]; then
|
||||||
|
print_error "acrocmd command-line tool not found"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# List available plans
|
||||||
|
echo -e "${BOLD}Available Backup Plans${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Querying backup plans from Acronis..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
plan_output=$(/usr/sbin/acrocmd list plans 2>&1)
|
||||||
|
|
||||||
|
# Check if no plans exist (empty output or success message only)
|
||||||
|
if echo "$plan_output" | grep -qi "error\|failed\|no plans" || ! echo "$plan_output" | grep -q "[a-f0-9]\{8\}-[a-f0-9]\{4\}"; then
|
||||||
|
echo -e "${YELLOW}No backup plans found or error querying plans${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Possible reasons:"
|
||||||
|
echo " • No CLI-managed plans exist (acrocmd only shows local plans)"
|
||||||
|
echo " • Cloud-managed plans created in web console are not visible here"
|
||||||
|
echo " • Agent not registered with Acronis Cloud"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Important Note:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Plans created in the Acronis web console are managed at the cloud level"
|
||||||
|
echo "and are NOT accessible via the acrocmd CLI tool. The CLI can only see and"
|
||||||
|
echo "manage plans created locally via acrocmd commands."
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}To Trigger Cloud-Managed Backups:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "1. Log in to Acronis web console"
|
||||||
|
echo "2. Navigate to: Devices → Select this server"
|
||||||
|
echo "3. Click 'Back up now' to trigger your existing plan"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}To Create CLI-Managed Plans:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Use: acrocmd create plan --help"
|
||||||
|
echo "Note: CLI plans give you more control and optimization options"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$plan_output"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Select a Plan to Backup:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Enter the plan name or ID from the list above,"
|
||||||
|
echo "or press Enter to cancel and use web console instead."
|
||||||
|
echo ""
|
||||||
|
echo -n "Plan name/ID: "
|
||||||
|
read -r plan_id
|
||||||
|
|
||||||
|
if [ -z "$plan_id" ]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Use Web Console Instead${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "To trigger backup via web console:"
|
||||||
|
echo ""
|
||||||
|
echo "1. Log in to Acronis web console"
|
||||||
|
|
||||||
|
# Try to get cloud URL
|
||||||
|
if [ -f "/etc/Acronis/Global.config" ]; then
|
||||||
|
cloud_url=$(grep -oP 'CloudUrl[>=\"].*?https://[^\"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^\"<]+' | head -1)
|
||||||
|
if [ -n "$cloud_url" ]; then
|
||||||
|
echo " ${cloud_url}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "2. Navigate to: Devices → This server"
|
||||||
|
echo "3. Click 'Back up now' button"
|
||||||
|
echo "4. Monitor progress in real-time"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# User selected a plan, proceed with backup type selection
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Backup Type Selection${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Select backup type:"
|
||||||
|
echo " 1) Auto (use plan's configured type)"
|
||||||
|
echo " 2) Full backup"
|
||||||
|
echo " 3) Incremental backup"
|
||||||
|
echo " 4) Differential backup"
|
||||||
|
echo ""
|
||||||
|
echo -n "Select type [1]: "
|
||||||
|
read -r backup_type_choice
|
||||||
|
backup_type_choice="${backup_type_choice:-1}"
|
||||||
|
|
||||||
|
BACKUP_FLAGS=""
|
||||||
|
case "$backup_type_choice" in
|
||||||
|
2)
|
||||||
|
BACKUP_FLAGS="--backuptype=full"
|
||||||
|
echo " → Full backup selected"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
BACKUP_FLAGS="--backuptype=incremental"
|
||||||
|
echo " → Incremental backup selected (faster, stores only changes)"
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
BACKUP_FLAGS="--backuptype=differential"
|
||||||
|
echo " → Differential backup selected (changes since last full)"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo " → Using plan's default backup type"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Performance Options${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -n "Enable performance optimizations? (y/n) [n]: "
|
||||||
|
read -r opt_choice
|
||||||
|
|
||||||
|
if [ "$opt_choice" = "y" ] || [ "$opt_choice" = "Y" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "Available optimizations:"
|
||||||
|
echo " 1) Lower compression (faster backup, larger size)"
|
||||||
|
echo " 2) High priority (use more system resources)"
|
||||||
|
echo " 3) Both"
|
||||||
|
echo ""
|
||||||
|
echo -n "Select [3]: "
|
||||||
|
read -r perf_choice
|
||||||
|
perf_choice="${perf_choice:-3}"
|
||||||
|
|
||||||
|
case "$perf_choice" in
|
||||||
|
1)
|
||||||
|
BACKUP_FLAGS="$BACKUP_FLAGS --compression=normal"
|
||||||
|
echo " → Lower compression enabled"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
BACKUP_FLAGS="$BACKUP_FLAGS --priority=high"
|
||||||
|
echo " → High priority enabled"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
BACKUP_FLAGS="$BACKUP_FLAGS --compression=normal --priority=high"
|
||||||
|
echo " → Lower compression + high priority enabled"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Starting Backup...${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Plan: $plan_id"
|
||||||
|
[ -n "$BACKUP_FLAGS" ] && echo "Options: $BACKUP_FLAGS"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Try to run backup
|
||||||
|
if /usr/sbin/acrocmd backup run --plan "$plan_id" $BACKUP_FLAGS 2>&1; then
|
||||||
|
echo ""
|
||||||
|
print_success "Backup initiated successfully"
|
||||||
|
echo ""
|
||||||
|
echo "Monitor progress with 'Check Backup Status'"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
print_error "Failed to start backup"
|
||||||
|
echo ""
|
||||||
|
echo "Check that:"
|
||||||
|
echo " • Plan ID/name is correct"
|
||||||
|
echo " • Agent is online and registered"
|
||||||
|
echo " • No conflicting backups running"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
Executable
+471
@@ -0,0 +1,471 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Backup Troubleshooter
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Diagnose and troubleshoot Acronis backup failures
|
||||||
|
# Features:
|
||||||
|
# - Multi-log location scanning
|
||||||
|
# - Common failure pattern detection
|
||||||
|
# - Service health checks
|
||||||
|
# - Disk space analysis
|
||||||
|
# - Network connectivity tests
|
||||||
|
# - Automated fix suggestions
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
# Require root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Log locations to check
|
||||||
|
declare -A LOG_LOCATIONS=(
|
||||||
|
["MMS"]="/var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log"
|
||||||
|
["MMS_OLD"]="/var/lib/Acronis/BackupAndRecovery/MMS/mms.*.log"
|
||||||
|
["AGENT"]="/var/log/acronis/agent/*.log"
|
||||||
|
["CORE"]="/var/lib/Acronis/BackupAndRecovery/aakore.log"
|
||||||
|
["SCHEDULE"]="/var/lib/Acronis/BackupAndRecovery/scheduler.log"
|
||||||
|
["SYSTEM"]="/var/log/messages"
|
||||||
|
["SYSLOG"]="/var/log/syslog"
|
||||||
|
)
|
||||||
|
|
||||||
|
print_banner "Acronis Backup Troubleshooter"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Diagnostic Mode${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "This tool will analyze:"
|
||||||
|
echo " • Service status and health"
|
||||||
|
echo " • Log files for errors and failures"
|
||||||
|
echo " • System resources (disk, memory)"
|
||||||
|
echo " • Network connectivity to Acronis Cloud"
|
||||||
|
echo " • Common backup failure patterns"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Track issues found
|
||||||
|
declare -a ISSUES_FOUND=()
|
||||||
|
declare -a WARNINGS_FOUND=()
|
||||||
|
declare -a RECOMMENDATIONS=()
|
||||||
|
|
||||||
|
# Function to add issue
|
||||||
|
add_issue() {
|
||||||
|
ISSUES_FOUND+=("$1")
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add warning
|
||||||
|
add_warning() {
|
||||||
|
WARNINGS_FOUND+=("$1")
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add recommendation
|
||||||
|
add_recommendation() {
|
||||||
|
RECOMMENDATIONS+=("$1")
|
||||||
|
}
|
||||||
|
|
||||||
|
# 1. Check service status
|
||||||
|
echo -e "${BOLD}[1/7] Checking Acronis Services...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
declare -a SERVICES=("aakore" "acronis_mms" "acronis_schedule" "active-protection")
|
||||||
|
all_services_running=true
|
||||||
|
|
||||||
|
for service in "${SERVICES[@]}"; do
|
||||||
|
if systemctl list-unit-files | grep -q "^${service}.service"; then
|
||||||
|
if systemctl is-active --quiet "$service"; then
|
||||||
|
echo -e " ${GREEN}✓${NC} $service is running"
|
||||||
|
else
|
||||||
|
echo -e " ${RED}✗${NC} $service is NOT running"
|
||||||
|
add_issue "Service $service is stopped"
|
||||||
|
add_recommendation "Start service: systemctl start $service"
|
||||||
|
all_services_running=false
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$all_services_running" = false ]; then
|
||||||
|
add_recommendation "Start all services: Go to Acronis menu → Check Agent Status → Start All Services"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 2. Check disk space
|
||||||
|
echo -e "${BOLD}[2/7] Checking Disk Space...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check backup directory
|
||||||
|
if [ -d "/var/lib/Acronis" ]; then
|
||||||
|
backup_disk_usage=$(df -h /var/lib/Acronis | tail -1 | awk '{print $5}' | tr -d '%')
|
||||||
|
backup_disk_avail=$(df -h /var/lib/Acronis | tail -1 | awk '{print $4}')
|
||||||
|
|
||||||
|
echo " Acronis directory: /var/lib/Acronis"
|
||||||
|
echo " Disk usage: ${backup_disk_usage}%"
|
||||||
|
echo " Available: ${backup_disk_avail}"
|
||||||
|
|
||||||
|
if [ "$backup_disk_usage" -gt 95 ]; then
|
||||||
|
add_issue "Disk space critically low (${backup_disk_usage}% used)"
|
||||||
|
add_recommendation "Free up disk space or change backup destination"
|
||||||
|
elif [ "$backup_disk_usage" -gt 90 ]; then
|
||||||
|
add_warning "Disk space running low (${backup_disk_usage}% used)"
|
||||||
|
add_recommendation "Monitor disk space closely"
|
||||||
|
else
|
||||||
|
echo -e " ${GREEN}✓${NC} Disk space OK"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check system disk
|
||||||
|
root_disk_usage=$(df -h / | tail -1 | awk '{print $5}' | tr -d '%')
|
||||||
|
if [ "$root_disk_usage" -gt 90 ]; then
|
||||||
|
add_warning "Root filesystem at ${root_disk_usage}% capacity"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 3. Check memory
|
||||||
|
echo -e "${BOLD}[3/7] Checking Memory...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
mem_total=$(free -h | grep "^Mem:" | awk '{print $2}')
|
||||||
|
mem_available=$(free -h | grep "^Mem:" | awk '{print $7}')
|
||||||
|
mem_used_percent=$(free | grep "^Mem:" | awk '{printf "%.0f", ($3/$2)*100}')
|
||||||
|
|
||||||
|
echo " Total memory: ${mem_total}"
|
||||||
|
echo " Available: ${mem_available}"
|
||||||
|
echo " Used: ${mem_used_percent}%"
|
||||||
|
|
||||||
|
if [ "$mem_used_percent" -gt 95 ]; then
|
||||||
|
add_warning "Memory usage critically high (${mem_used_percent}%)"
|
||||||
|
add_recommendation "Check for memory leaks or reduce backup concurrency"
|
||||||
|
elif [ "$mem_used_percent" -gt 90 ]; then
|
||||||
|
add_warning "Memory usage high (${mem_used_percent}%)"
|
||||||
|
else
|
||||||
|
echo -e " ${GREEN}✓${NC} Memory OK"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 4. Check network connectivity
|
||||||
|
echo -e "${BOLD}[4/7] Checking Network Connectivity...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if registered
|
||||||
|
if [ -f "/etc/Acronis/Global.config" ]; then
|
||||||
|
cloud_url=$(grep -oP 'CloudUrl[>="].*?https://[^"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^"<]+' | head -1)
|
||||||
|
|
||||||
|
if [ -n "$cloud_url" ]; then
|
||||||
|
echo " Testing connection to: $cloud_url"
|
||||||
|
|
||||||
|
# Extract hostname
|
||||||
|
cloud_host=$(echo "$cloud_url" | sed 's|https://||' | sed 's|/.*||')
|
||||||
|
|
||||||
|
# Test connectivity
|
||||||
|
if curl -s --connect-timeout 5 -I "$cloud_url" >/dev/null 2>&1; then
|
||||||
|
echo -e " ${GREEN}✓${NC} Connection successful"
|
||||||
|
else
|
||||||
|
add_issue "Cannot connect to Acronis Cloud: $cloud_url"
|
||||||
|
add_recommendation "Check firewall rules and network connectivity"
|
||||||
|
add_recommendation "Test manually: curl -I $cloud_url"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Test DNS resolution
|
||||||
|
if host "$cloud_host" >/dev/null 2>&1; then
|
||||||
|
echo -e " ${GREEN}✓${NC} DNS resolution OK"
|
||||||
|
else
|
||||||
|
add_issue "DNS resolution failed for $cloud_host"
|
||||||
|
add_recommendation "Check DNS configuration: /etc/resolv.conf"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
add_warning "Agent may not be registered with Acronis Cloud"
|
||||||
|
add_recommendation "Register agent: Acronis menu → Register with Cloud"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
add_warning "Acronis configuration file not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 5. Scan logs for errors
|
||||||
|
echo -e "${BOLD}[5/7] Scanning Logs for Errors...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Common error patterns
|
||||||
|
declare -A ERROR_PATTERNS=(
|
||||||
|
["INSUFFICIENT_SPACE"]="insufficient.*space|no.*space.*left|disk.*full"
|
||||||
|
["PERMISSION_DENIED"]="permission.*denied|access.*denied|cannot.*access"
|
||||||
|
["CONNECTION_FAILED"]="connection.*failed|connection.*refused|timeout|network.*error"
|
||||||
|
["AUTH_FAILED"]="authentication.*failed|invalid.*credentials|unauthorized"
|
||||||
|
["BACKUP_FAILED"]="backup.*failed|backup.*error|task.*failed"
|
||||||
|
["VSS_ERROR"]="vss.*error|snapshot.*failed|shadow.*copy.*error"
|
||||||
|
["DATABASE_ERROR"]="database.*error|sql.*error|db.*lock"
|
||||||
|
["FILE_LOCKED"]="file.*locked|file.*in.*use|sharing.*violation"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Scan primary log
|
||||||
|
primary_log="/var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log"
|
||||||
|
|
||||||
|
if [ -f "$primary_log" ]; then
|
||||||
|
echo " Scanning primary log: mms.0.log"
|
||||||
|
|
||||||
|
for pattern_name in "${!ERROR_PATTERNS[@]}"; do
|
||||||
|
pattern="${ERROR_PATTERNS[$pattern_name]}"
|
||||||
|
|
||||||
|
if grep -iE "$pattern" "$primary_log" 2>/dev/null | tail -1 | grep -q .; then
|
||||||
|
error_count=$(grep -icE "$pattern" "$primary_log" 2>/dev/null)
|
||||||
|
last_error=$(grep -iE "$pattern" "$primary_log" 2>/dev/null | tail -1)
|
||||||
|
|
||||||
|
echo -e " ${RED}⚠${NC} Found $pattern_name errors (count: $error_count)"
|
||||||
|
echo -e " Last: ${DIM}${last_error:0:80}...${NC}"
|
||||||
|
|
||||||
|
add_issue "$pattern_name detected in logs (count: $error_count)"
|
||||||
|
|
||||||
|
# Add specific recommendations
|
||||||
|
case "$pattern_name" in
|
||||||
|
"INSUFFICIENT_SPACE")
|
||||||
|
add_recommendation "Free up disk space or change backup destination"
|
||||||
|
;;
|
||||||
|
"PERMISSION_DENIED")
|
||||||
|
add_recommendation "Check file/directory permissions"
|
||||||
|
add_recommendation "Ensure Acronis agent has necessary access rights"
|
||||||
|
;;
|
||||||
|
"CONNECTION_FAILED")
|
||||||
|
add_recommendation "Check network connectivity and firewall rules"
|
||||||
|
add_recommendation "Verify Acronis Cloud URL is accessible"
|
||||||
|
;;
|
||||||
|
"AUTH_FAILED")
|
||||||
|
add_recommendation "Re-register agent with valid token"
|
||||||
|
add_recommendation "Check registration status in web console"
|
||||||
|
;;
|
||||||
|
"VSS_ERROR")
|
||||||
|
add_recommendation "Check VSS service: vssadmin list writers"
|
||||||
|
add_recommendation "Restart VSS: net stop vss && net start vss"
|
||||||
|
;;
|
||||||
|
"DATABASE_ERROR")
|
||||||
|
add_recommendation "Check database connections and locks"
|
||||||
|
add_recommendation "Consider application-aware backup settings"
|
||||||
|
;;
|
||||||
|
"FILE_LOCKED")
|
||||||
|
add_recommendation "Identify processes locking files: lsof"
|
||||||
|
add_recommendation "Schedule backups during low-activity periods"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check for recent backup failures
|
||||||
|
recent_failures=$(grep -i "backup.*failed\|task.*failed" "$primary_log" 2>/dev/null | tail -5)
|
||||||
|
if [ -n "$recent_failures" ]; then
|
||||||
|
echo ""
|
||||||
|
echo -e " ${YELLOW}Recent backup failures:${NC}"
|
||||||
|
echo "$recent_failures" | while read -r line; do
|
||||||
|
echo -e " ${DIM}${line:0:100}${NC}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
add_warning "Primary log file not found: $primary_log"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 6. Check for stuck backups
|
||||||
|
echo -e "${BOLD}[6/7] Checking for Stuck Processes...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check for long-running Acronis processes
|
||||||
|
old_processes=$(ps aux | grep -i acronis | grep -v grep | awk '{if ($10 ~ /[0-9][0-9]:[0-9][0-9]/) print $0}')
|
||||||
|
|
||||||
|
if [ -n "$old_processes" ]; then
|
||||||
|
echo -e " ${YELLOW}⚠${NC} Long-running Acronis processes detected:"
|
||||||
|
echo "$old_processes" | while read -r line; do
|
||||||
|
echo -e " ${DIM}$line${NC}"
|
||||||
|
done
|
||||||
|
add_warning "Long-running Acronis processes may indicate stuck backups"
|
||||||
|
add_recommendation "Review processes and consider restarting services if stuck"
|
||||||
|
else
|
||||||
|
echo -e " ${GREEN}✓${NC} No stuck processes detected"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 7. Check configuration issues
|
||||||
|
echo -e "${BOLD}[7/7] Checking Configuration...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if backup plans are configured
|
||||||
|
if command -v acrocmd &>/dev/null; then
|
||||||
|
plan_count=$(acrocmd list plans 2>/dev/null | grep -c "^Plan ID" || echo "0")
|
||||||
|
echo " Configured backup plans: $plan_count"
|
||||||
|
|
||||||
|
if [ "$plan_count" -eq 0 ]; then
|
||||||
|
add_warning "No backup plans configured"
|
||||||
|
add_recommendation "Configure backup plans in Acronis web console"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " ${DIM}acrocmd not available - cannot check backup plans${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check agent version
|
||||||
|
if [ -f "/usr/lib/Acronis/BackupAndRecovery/aakore" ]; then
|
||||||
|
agent_version=$(/usr/lib/Acronis/BackupAndRecovery/aakore --version 2>/dev/null | head -1 || echo "Unknown")
|
||||||
|
echo " Agent version: $agent_version"
|
||||||
|
else
|
||||||
|
add_warning "Cannot determine agent version"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Summary Report
|
||||||
|
echo -e "${BOLD}DIAGNOSTIC SUMMARY${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ ${#ISSUES_FOUND[@]} -eq 0 ] && [ ${#WARNINGS_FOUND[@]} -eq 0 ]; then
|
||||||
|
echo -e "${GREEN}${BOLD}✓ No issues detected${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Acronis appears to be healthy. If you're experiencing backup"
|
||||||
|
echo "failures, check the web console for detailed backup logs."
|
||||||
|
else
|
||||||
|
# Show issues
|
||||||
|
if [ ${#ISSUES_FOUND[@]} -gt 0 ]; then
|
||||||
|
echo -e "${RED}${BOLD}Critical Issues (${#ISSUES_FOUND[@]}):${NC}"
|
||||||
|
for issue in "${ISSUES_FOUND[@]}"; do
|
||||||
|
echo -e " ${RED}✗${NC} $issue"
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Show warnings
|
||||||
|
if [ ${#WARNINGS_FOUND[@]} -gt 0 ]; then
|
||||||
|
echo -e "${YELLOW}${BOLD}Warnings (${#WARNINGS_FOUND[@]}):${NC}"
|
||||||
|
for warning in "${WARNINGS_FOUND[@]}"; do
|
||||||
|
echo -e " ${YELLOW}⚠${NC} $warning"
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Show recommendations
|
||||||
|
if [ ${#RECOMMENDATIONS[@]} -gt 0 ]; then
|
||||||
|
echo -e "${CYAN}${BOLD}Recommendations:${NC}"
|
||||||
|
local rec_num=1
|
||||||
|
for rec in "${RECOMMENDATIONS[@]}"; do
|
||||||
|
echo -e " ${CYAN}${rec_num}.${NC} $rec"
|
||||||
|
((rec_num++))
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Quick actions
|
||||||
|
echo -e "${BOLD}Quick Actions:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${CYAN}1)${NC} View Full Logs (all errors)"
|
||||||
|
echo -e " ${CYAN}2)${NC} Restart All Services"
|
||||||
|
echo -e " ${CYAN}3)${NC} Generate Detailed Report"
|
||||||
|
echo -e " ${CYAN}4)${NC} Export Logs for Support"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${RED}0)${NC} Return to Menu"
|
||||||
|
echo ""
|
||||||
|
echo -n "Select action (or press Enter to return): "
|
||||||
|
read -r action
|
||||||
|
|
||||||
|
case "$action" in
|
||||||
|
1)
|
||||||
|
# Show all errors
|
||||||
|
clear
|
||||||
|
print_banner "All Errors from Logs"
|
||||||
|
echo ""
|
||||||
|
if [ -f "$primary_log" ]; then
|
||||||
|
grep -iE "error|fail|critical|warn" "$primary_log" | tail -50
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
# Restart services
|
||||||
|
echo ""
|
||||||
|
echo "Restarting all Acronis services..."
|
||||||
|
systemctl restart aakore
|
||||||
|
systemctl restart acronis_mms
|
||||||
|
systemctl restart acronis_schedule
|
||||||
|
systemctl restart active-protection
|
||||||
|
echo ""
|
||||||
|
print_success "Services restarted"
|
||||||
|
echo ""
|
||||||
|
echo "Waiting 5 seconds for services to stabilize..."
|
||||||
|
sleep 5
|
||||||
|
echo ""
|
||||||
|
echo "Running diagnostic again..."
|
||||||
|
sleep 2
|
||||||
|
exec "$0"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
# Generate detailed report
|
||||||
|
report_file="/tmp/acronis-diagnostic-$(date +%Y%m%d-%H%M%S).txt"
|
||||||
|
echo ""
|
||||||
|
echo "Generating detailed report..."
|
||||||
|
|
||||||
|
{
|
||||||
|
echo "Acronis Diagnostic Report"
|
||||||
|
echo "Generated: $(date)"
|
||||||
|
echo "Hostname: $(hostname)"
|
||||||
|
echo ""
|
||||||
|
echo "=== Service Status ==="
|
||||||
|
for service in "${SERVICES[@]}"; do
|
||||||
|
systemctl status "$service" 2>&1 | head -20
|
||||||
|
echo ""
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
echo "=== Recent Log Entries ==="
|
||||||
|
if [ -f "$primary_log" ]; then
|
||||||
|
tail -200 "$primary_log"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
echo "=== System Resources ==="
|
||||||
|
df -h
|
||||||
|
echo ""
|
||||||
|
free -h
|
||||||
|
echo ""
|
||||||
|
echo "=== Network ==="
|
||||||
|
netstat -tuln | grep -E "7770|7800|8443|44445"
|
||||||
|
echo ""
|
||||||
|
echo "=== Processes ==="
|
||||||
|
ps aux | grep -i acronis | grep -v grep
|
||||||
|
} > "$report_file"
|
||||||
|
|
||||||
|
print_success "Report generated: $report_file"
|
||||||
|
echo ""
|
||||||
|
echo "You can send this report to Acronis support or review it locally."
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
# Export logs
|
||||||
|
archive_file="/tmp/acronis-logs-$(date +%Y%m%d-%H%M%S).tar.gz"
|
||||||
|
echo ""
|
||||||
|
echo "Exporting logs..."
|
||||||
|
|
||||||
|
if [ -d "/var/lib/Acronis/BackupAndRecovery/MMS" ]; then
|
||||||
|
tar -czf "$archive_file" /var/lib/Acronis/BackupAndRecovery/MMS/*.log 2>/dev/null
|
||||||
|
print_success "Logs exported: $archive_file"
|
||||||
|
echo ""
|
||||||
|
echo "Archive size: $(du -h "$archive_file" | awk '{print $1}')"
|
||||||
|
else
|
||||||
|
print_error "Log directory not found"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Executable
+249
@@ -0,0 +1,249 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Agent Uninstaller
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Safely uninstall Acronis Cyber Protect agent
|
||||||
|
# Process:
|
||||||
|
# 1. Stop all Acronis services
|
||||||
|
# 2. Unregister from cloud (optional)
|
||||||
|
# 3. Remove Acronis packages
|
||||||
|
# 4. Clean up data directories (optional)
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
# Require root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_banner "Acronis Agent Uninstaller"
|
||||||
|
|
||||||
|
# Check if Acronis is installed
|
||||||
|
if ! systemctl list-unit-files | grep -q "acronis_mms.service"; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}⚠ Acronis Not Installed${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Acronis Cyber Protect does not appear to be installed on this system."
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${RED}${BOLD}⚠️ WARNING ⚠️${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "This will completely remove Acronis Cyber Protect from this system."
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}What will be removed:${NC}"
|
||||||
|
echo " • All Acronis services (aakore, mms, schedule, active-protection)"
|
||||||
|
echo " • Acronis software packages"
|
||||||
|
echo " • Agent registration (if selected)"
|
||||||
|
echo " • Backup data and logs (if selected)"
|
||||||
|
echo ""
|
||||||
|
echo -e "${RED}This action cannot be easily undone!${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Confirm uninstallation
|
||||||
|
echo -n "Type 'uninstall' to confirm removal: "
|
||||||
|
read -r confirm
|
||||||
|
|
||||||
|
if [ "$confirm" != "uninstall" ]; then
|
||||||
|
echo ""
|
||||||
|
print_error "Uninstallation cancelled"
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Uninstallation Options:${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Ask about data retention
|
||||||
|
echo -n "Remove backup data and logs? (yes/no) [no]: "
|
||||||
|
read -r remove_data
|
||||||
|
remove_data="${remove_data:-no}"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -n "Unregister from Acronis Cloud? (yes/no) [yes]: "
|
||||||
|
read -r unregister
|
||||||
|
unregister="${unregister:-yes}"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Uninstallation Summary:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " Stop services: Yes"
|
||||||
|
echo " Remove software: Yes"
|
||||||
|
echo " Unregister agent: ${unregister}"
|
||||||
|
echo " Remove data/logs: ${remove_data}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -n "Proceed with uninstallation? (yes/no): "
|
||||||
|
read -r final_confirm
|
||||||
|
|
||||||
|
if [ "$final_confirm" != "yes" ]; then
|
||||||
|
echo ""
|
||||||
|
print_error "Uninstallation cancelled"
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Starting Uninstallation...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Stop all services
|
||||||
|
echo "→ Stopping Acronis services..."
|
||||||
|
systemctl stop active-protection.service 2>/dev/null
|
||||||
|
systemctl stop acronis_schedule 2>/dev/null
|
||||||
|
systemctl stop acronis_mms 2>/dev/null
|
||||||
|
systemctl stop aakore 2>/dev/null
|
||||||
|
service acronis_mms stop 2>/dev/null
|
||||||
|
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
if systemctl is-active --quiet acronis_mms; then
|
||||||
|
print_error "Warning: Some services may still be running"
|
||||||
|
else
|
||||||
|
print_success "Services stopped"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Unregister from cloud if requested
|
||||||
|
if [ "$unregister" = "yes" ]; then
|
||||||
|
echo "→ Unregistering from Acronis Cloud..."
|
||||||
|
|
||||||
|
if [ -f "/usr/lib/Acronis/RegisterAgentTool/RegisterAgent" ]; then
|
||||||
|
if /usr/lib/Acronis/RegisterAgentTool/RegisterAgent -o unregister 2>/dev/null; then
|
||||||
|
print_success "Agent unregistered"
|
||||||
|
else
|
||||||
|
echo " ${YELLOW}Note: Unregistration may have failed (continuing anyway)${NC}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " ${YELLOW}Note: Registration tool not found (skipping)${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Disable services
|
||||||
|
echo "→ Disabling Acronis services..."
|
||||||
|
systemctl disable aakore 2>/dev/null
|
||||||
|
systemctl disable acronis_mms 2>/dev/null
|
||||||
|
systemctl disable acronis_schedule 2>/dev/null
|
||||||
|
systemctl disable active-protection.service 2>/dev/null
|
||||||
|
echo " ${GREEN}✓${NC} Services disabled"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Remove packages
|
||||||
|
echo "→ Removing Acronis packages..."
|
||||||
|
|
||||||
|
# Try different package managers
|
||||||
|
if command -v dpkg &>/dev/null; then
|
||||||
|
# Debian/Ubuntu
|
||||||
|
dpkg -l | grep -i acronis | awk '{print $2}' | while read -r pkg; do
|
||||||
|
echo " Removing: $pkg"
|
||||||
|
dpkg --purge "$pkg" 2>/dev/null
|
||||||
|
done
|
||||||
|
elif command -v rpm &>/dev/null; then
|
||||||
|
# RedHat/CentOS
|
||||||
|
rpm -qa | grep -i acronis | while read -r pkg; do
|
||||||
|
echo " Removing: $pkg"
|
||||||
|
rpm -e "$pkg" 2>/dev/null
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_success "Packages removed"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Remove data directories if requested
|
||||||
|
if [ "$remove_data" = "yes" ]; then
|
||||||
|
echo "→ Removing Acronis data and logs..."
|
||||||
|
|
||||||
|
declare -a DATA_DIRS=(
|
||||||
|
"/var/lib/Acronis"
|
||||||
|
"/usr/lib/Acronis"
|
||||||
|
"/etc/Acronis"
|
||||||
|
"/opt/acronis"
|
||||||
|
)
|
||||||
|
|
||||||
|
for dir in "${DATA_DIRS[@]}"; do
|
||||||
|
if [ -d "$dir" ]; then
|
||||||
|
local size=$(du -sh "$dir" 2>/dev/null | awk '{print $1}')
|
||||||
|
echo " Removing: $dir (${size})"
|
||||||
|
rm -rf "$dir" 2>/dev/null
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
print_success "Data directories removed"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clean up systemd
|
||||||
|
echo "→ Cleaning up system configuration..."
|
||||||
|
systemctl daemon-reload
|
||||||
|
echo " ${GREEN}✓${NC} systemd reloaded"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Final verification
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}${BOLD}✓ Uninstallation Complete${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if anything remains
|
||||||
|
local remaining=0
|
||||||
|
|
||||||
|
if systemctl list-unit-files | grep -q "acronis"; then
|
||||||
|
echo -e "${YELLOW}⚠ Some service files may still be present${NC}"
|
||||||
|
((remaining++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d "/var/lib/Acronis" ] || [ -d "/usr/lib/Acronis" ]; then
|
||||||
|
echo -e "${YELLOW}⚠ Some directories were not removed${NC}"
|
||||||
|
((remaining++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $remaining -eq 0 ]; then
|
||||||
|
echo "Acronis Cyber Protect has been completely removed from this system."
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Uninstallation mostly complete, but some files may remain."
|
||||||
|
echo "This is usually safe and won't affect system operation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Show what was kept
|
||||||
|
if [ "$remove_data" = "no" ]; then
|
||||||
|
echo -e "${BOLD}Retained Data:${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Backup data and logs were kept as requested:"
|
||||||
|
if [ -d "/var/lib/Acronis" ]; then
|
||||||
|
local data_size=$(du -sh /var/lib/Acronis 2>/dev/null | awk '{print $1}')
|
||||||
|
echo " Location: /var/lib/Acronis"
|
||||||
|
echo " Size: $data_size"
|
||||||
|
echo ""
|
||||||
|
echo "To remove this data later:"
|
||||||
|
echo " rm -rf /var/lib/Acronis"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "To reinstall Acronis in the future:"
|
||||||
|
echo " 1. Return to Backup & Recovery menu"
|
||||||
|
echo " 2. Select 'Acronis Management'"
|
||||||
|
echo " 3. Choose 'Install Acronis Agent'"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
press_enter
|
||||||
Executable
+314
@@ -0,0 +1,314 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Acronis Agent Update/Upgrade
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Update Acronis Cyber Protect agent to latest version
|
||||||
|
# Methods:
|
||||||
|
# - Automatic via cloud (web console)
|
||||||
|
# - Manual download and upgrade (preserves config/registration)
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
print_error "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_banner "Update Acronis Agent"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if Acronis is installed
|
||||||
|
if ! systemctl list-unit-files | grep -q "acronis_mms.service"; then
|
||||||
|
print_error "Acronis is not installed"
|
||||||
|
echo ""
|
||||||
|
echo "Install Acronis first:"
|
||||||
|
echo " 1. Return to Acronis menu"
|
||||||
|
echo " 2. Select 'Install Acronis Agent'"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${BOLD}Current Installation${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check current version
|
||||||
|
echo "→ Checking current agent version..."
|
||||||
|
if [ -f "/usr/lib/Acronis/BackupAndRecovery/aakore" ]; then
|
||||||
|
current_version=$(/usr/lib/Acronis/BackupAndRecovery/aakore --version 2>/dev/null | head -1 || echo "Unknown")
|
||||||
|
echo " Current version: ${current_version}"
|
||||||
|
else
|
||||||
|
echo " ${YELLOW}Version unknown${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check service status
|
||||||
|
echo ""
|
||||||
|
echo "→ Service status:"
|
||||||
|
if systemctl is-active --quiet acronis_mms; then
|
||||||
|
echo " ${GREEN}✓${NC} Services are running"
|
||||||
|
else
|
||||||
|
echo " ${YELLOW}⚠${NC} Some services are stopped"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Update Methods${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}1. Automatic Update (via Acronis Cloud)${NC}"
|
||||||
|
echo " • Managed from web console"
|
||||||
|
echo " • Navigate to: Settings → Agent updates"
|
||||||
|
echo " • Can enable automatic updates"
|
||||||
|
echo " • Recommended for production environments"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}2. Manual Update (Download + Upgrade)${NC}"
|
||||||
|
echo " • Downloads latest installer"
|
||||||
|
echo " • Runs upgrade automatically"
|
||||||
|
echo " • Preserves configuration and registration"
|
||||||
|
echo " • Agent stays registered to same account"
|
||||||
|
echo ""
|
||||||
|
echo -n "Select update method (1/2) or 0 to cancel [2]: "
|
||||||
|
read -r method
|
||||||
|
method="${method:-2}"
|
||||||
|
|
||||||
|
case "$method" in
|
||||||
|
1)
|
||||||
|
# Automatic update instructions
|
||||||
|
clear
|
||||||
|
print_banner "Automatic Agent Updates"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Configure Automatic Updates via Web Console${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Steps:"
|
||||||
|
echo " 1. Log in to Acronis web console"
|
||||||
|
|
||||||
|
# Try to get cloud URL
|
||||||
|
if [ -f "/etc/Acronis/Global.config" ]; then
|
||||||
|
cloud_url=$(grep -oP 'CloudUrl[>="].*?https://[^"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^"<]+' | head -1)
|
||||||
|
if [ -n "$cloud_url" ]; then
|
||||||
|
echo " ${cloud_url}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo " 2. Navigate to: Settings → Agent updates"
|
||||||
|
echo ""
|
||||||
|
echo " 3. Options available:"
|
||||||
|
echo " • Enable automatic updates"
|
||||||
|
echo " • Schedule update time"
|
||||||
|
echo " • Set update policy per device"
|
||||||
|
echo " • Configure notification preferences"
|
||||||
|
echo ""
|
||||||
|
echo " 4. Agents will update during maintenance window"
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}Benefits:${NC}"
|
||||||
|
echo " ✓ Centrally managed"
|
||||||
|
echo " ✓ Scheduled updates"
|
||||||
|
echo " ✓ Rollback capability"
|
||||||
|
echo " ✓ Update verification"
|
||||||
|
echo ""
|
||||||
|
press_enter
|
||||||
|
;;
|
||||||
|
|
||||||
|
2)
|
||||||
|
# Manual update/upgrade
|
||||||
|
clear
|
||||||
|
print_banner "Manual Agent Upgrade"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Upgrade Process${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "This will:"
|
||||||
|
echo " 1. Download the latest Acronis agent installer"
|
||||||
|
echo " 2. Run installer over existing installation"
|
||||||
|
echo " 3. Automatically upgrade to latest version"
|
||||||
|
echo " 4. Preserve all configuration and registration"
|
||||||
|
echo " 5. Restart services with new version"
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}Note:${NC} The agent will stay registered to your Acronis account."
|
||||||
|
echo " No need to re-register after upgrade."
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Get cloud URL for download
|
||||||
|
SERVICE_URL="us5-cloud.acronis.com"
|
||||||
|
if [ -f "/etc/Acronis/Global.config" ]; then
|
||||||
|
config_url=$(grep -oP 'CloudUrl[>="].*?https://[^"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^"<]+' | head -1)
|
||||||
|
if [ -n "$config_url" ]; then
|
||||||
|
SERVICE_URL=$(echo "$config_url" | sed 's|https://||' | sed 's|/.*||')
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Download region: ${SERVICE_URL}"
|
||||||
|
echo ""
|
||||||
|
echo -n "Proceed with upgrade? (yes/no): "
|
||||||
|
read -r confirm
|
||||||
|
|
||||||
|
if [[ ! "$confirm" =~ ^[Yy]([Ee][Ss])?$ ]]; then
|
||||||
|
echo ""
|
||||||
|
print_error "Upgrade cancelled"
|
||||||
|
press_enter
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Starting Upgrade...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Create download directory
|
||||||
|
DOWNLOAD_DIR="$SCRIPT_DIR/downloads"
|
||||||
|
mkdir -p "$DOWNLOAD_DIR"
|
||||||
|
cd "$DOWNLOAD_DIR" || exit 1
|
||||||
|
|
||||||
|
INSTALL_DIR="$DOWNLOAD_DIR/acronis-upgrade-$(date +%Y%m%d-%H%M%S)"
|
||||||
|
mkdir -p "$INSTALL_DIR"
|
||||||
|
cd "$INSTALL_DIR" || exit 1
|
||||||
|
|
||||||
|
# Download installer
|
||||||
|
echo "→ Downloading latest Acronis agent..."
|
||||||
|
DOWNLOAD_URL="https://${SERVICE_URL}/bc/api/ams/links/agents/redirect?language=multi&system=linux&architecture=64&productType=enterprise"
|
||||||
|
|
||||||
|
if wget -q --show-progress "$DOWNLOAD_URL" -O "Cyber_Protection_Agent_for_Linux_x86_64.bin"; then
|
||||||
|
print_success "Download complete"
|
||||||
|
else
|
||||||
|
print_error "Download failed"
|
||||||
|
echo ""
|
||||||
|
echo "Possible causes:"
|
||||||
|
echo " • No internet connection"
|
||||||
|
echo " • Invalid service URL"
|
||||||
|
echo " • Firewall blocking connection"
|
||||||
|
echo ""
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
rm -rf "$INSTALL_DIR"
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Make executable
|
||||||
|
chmod +x "Cyber_Protection_Agent_for_Linux_x86_64.bin" 2>/dev/null
|
||||||
|
|
||||||
|
# Verify file
|
||||||
|
file_size=$(stat -c%s "Cyber_Protection_Agent_for_Linux_x86_64.bin" 2>/dev/null || echo "0")
|
||||||
|
if [ "$file_size" -lt 1000000 ]; then
|
||||||
|
print_error "Downloaded file is too small (possibly corrupted)"
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
rm -rf "$INSTALL_DIR"
|
||||||
|
press_enter
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run upgrade (unattended mode)
|
||||||
|
echo "→ Running upgrade..."
|
||||||
|
echo ""
|
||||||
|
echo "The installer will automatically:"
|
||||||
|
echo " • Detect existing installation"
|
||||||
|
echo " • Upgrade to latest version"
|
||||||
|
echo " • Preserve configuration"
|
||||||
|
echo " • Keep registration"
|
||||||
|
echo ""
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo -e "${DIM}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
|
||||||
|
# Run installer in unattended mode
|
||||||
|
./Cyber_Protection_Agent_for_Linux_x86_64.bin -a
|
||||||
|
|
||||||
|
UPGRADE_EXIT_CODE=$?
|
||||||
|
|
||||||
|
echo -e "${DIM}──────────────────────────────────────────────────────────────${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check result
|
||||||
|
if [ $UPGRADE_EXIT_CODE -eq 0 ]; then
|
||||||
|
print_success "Upgrade completed successfully!"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check new version
|
||||||
|
echo "→ Verifying upgrade..."
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
if [ -f "/usr/lib/Acronis/BackupAndRecovery/aakore" ]; then
|
||||||
|
new_version=$(/usr/lib/Acronis/BackupAndRecovery/aakore --version 2>/dev/null | head -1 || echo "Unknown")
|
||||||
|
echo " New version: ${new_version}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ "$new_version" != "$current_version" ]; then
|
||||||
|
print_success "Agent upgraded: $current_version → $new_version"
|
||||||
|
else
|
||||||
|
echo " ${YELLOW}Version appears unchanged (may already be latest)${NC}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check services
|
||||||
|
echo "→ Checking services..."
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
if systemctl is-active --quiet acronis_mms; then
|
||||||
|
print_success "Services are running"
|
||||||
|
else
|
||||||
|
echo " ${YELLOW}⚠ Services may need restart${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -n "Restart Acronis services? (yes/no): "
|
||||||
|
read -r restart_confirm
|
||||||
|
|
||||||
|
if [[ "$restart_confirm" =~ ^[Yy]([Ee][Ss])?$ ]]; then
|
||||||
|
echo ""
|
||||||
|
echo "→ Restarting services..."
|
||||||
|
systemctl restart aakore
|
||||||
|
systemctl restart acronis_mms
|
||||||
|
systemctl restart acronis_schedule
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
if systemctl is-active --quiet acronis_mms; then
|
||||||
|
print_success "Services restarted"
|
||||||
|
else
|
||||||
|
print_error "Service restart failed"
|
||||||
|
echo "Check status: systemctl status acronis_mms"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}${BOLD}✓ Upgrade Complete${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "The agent has been upgraded and remains registered."
|
||||||
|
echo "Backups will continue according to existing schedules."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
else
|
||||||
|
print_error "Upgrade failed with exit code $UPGRADE_EXIT_CODE"
|
||||||
|
echo ""
|
||||||
|
echo "Common issues:"
|
||||||
|
echo " • Agent is already latest version"
|
||||||
|
echo " • Insufficient disk space"
|
||||||
|
echo " • Services in use"
|
||||||
|
echo ""
|
||||||
|
echo "Check logs for details:"
|
||||||
|
echo " tail -f /var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
echo "→ Cleaning up installation files..."
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
rm -rf "$INSTALL_DIR"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
press_enter
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo ""
|
||||||
|
echo "Update cancelled"
|
||||||
|
press_enter
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Reference in New Issue
Block a user