Files
HomeAudit/migration_scripts/discovery/targeted_data_discovery.sh
2025-08-24 11:13:39 -04:00

113 lines
5.1 KiB
Bash
Executable File

#!/bin/bash
#
# Targeted Data Discovery Script
# Fast identification of critical data locations for migration planning
# Avoids filesystem traversal bottlenecks
#
set -euo pipefail
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
HOSTNAME=$(hostname -f)
OUTPUT_DIR="/tmp/data_discovery_${HOSTNAME}_${TIMESTAMP}"
mkdir -p "$OUTPUT_DIR"
LOG_FILE="${OUTPUT_DIR}/data.log"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "Starting Data Discovery on ${HOSTNAME} at $(date)"
echo "Output: $OUTPUT_DIR"
echo "========================================"
# Database locations (common paths only)
echo "1. Database Locations"
echo "--- PostgreSQL ---" > "$OUTPUT_DIR/databases.txt"
find /var/lib/postgresql /opt/postgresql -name "*.conf" -o -name "postgresql.conf" 2>/dev/null >> "$OUTPUT_DIR/databases.txt" || true
echo "--- MySQL/MariaDB ---" >> "$OUTPUT_DIR/databases.txt"
find /var/lib/mysql /etc/mysql -name "my.cnf" -o -name "*.cnf" 2>/dev/null >> "$OUTPUT_DIR/databases.txt" || true
echo "--- SQLite ---" >> "$OUTPUT_DIR/databases.txt"
find /var/lib /opt -maxdepth 3 -name "*.db" -o -name "*.sqlite*" 2>/dev/null >> "$OUTPUT_DIR/databases.txt" || true
# Docker data locations
echo "2. Docker Data Locations"
if command -v docker >/dev/null 2>&1; then
docker system df > "$OUTPUT_DIR/docker_storage.txt" 2>/dev/null || echo "Docker system df failed"
docker volume ls --format "table {{.Name}}\t{{.Driver}}\t{{.Mountpoint}}" > "$OUTPUT_DIR/docker_volumes.txt" 2>/dev/null || true
# Get volume mount points
echo "Docker volume details:" > "$OUTPUT_DIR/docker_volume_details.txt"
docker volume ls --format "{{.Name}}" | while read volume; do
echo "Volume: $volume" >> "$OUTPUT_DIR/docker_volume_details.txt"
docker volume inspect "$volume" 2>/dev/null >> "$OUTPUT_DIR/docker_volume_details.txt" || true
echo "---" >> "$OUTPUT_DIR/docker_volume_details.txt"
done
fi
# Configuration files (targeted search)
echo "3. Critical Configuration Files"
echo "=== Application Configs ===" > "$OUTPUT_DIR/config_files.txt"
find /etc -maxdepth 2 -name "*.conf" -o -name "*.cfg" -o -name "*.ini" 2>/dev/null | head -30 >> "$OUTPUT_DIR/config_files.txt"
echo "=== Docker Compose Files ===" >> "$OUTPUT_DIR/config_files.txt"
find /opt /home -maxdepth 4 -name "docker-compose.yml" -o -name "docker-compose.yaml" -o -name "compose.yml" 2>/dev/null >> "$OUTPUT_DIR/config_files.txt" || true
# Storage and mount information
echo "4. Storage & Mount Points"
df -hT > "$OUTPUT_DIR/disk_usage.txt"
mount > "$OUTPUT_DIR/mount_points.txt"
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT > "$OUTPUT_DIR/block_devices.txt"
# NFS and network storage
echo "5. Network Storage"
if command -v showmount >/dev/null 2>&1; then
showmount -e localhost > "$OUTPUT_DIR/nfs_exports.txt" 2>/dev/null || echo "No NFS exports"
fi
grep nfs /proc/mounts > "$OUTPUT_DIR/nfs_mounts.txt" 2>/dev/null || echo "No NFS mounts"
# Samba/SMB shares
echo "6. SMB/Samba Shares"
if command -v smbstatus >/dev/null 2>&1; then
smbstatus -S > "$OUTPUT_DIR/smb_shares.txt" 2>/dev/null || echo "SMB not running"
fi
if [ -f /etc/samba/smb.conf ]; then
cp /etc/samba/smb.conf "$OUTPUT_DIR/" 2>/dev/null || true
fi
# Application-specific data directories
echo "7. Application Data Directories"
echo "=== Common App Directories ===" > "$OUTPUT_DIR/app_directories.txt"
ls -la /var/lib/ 2>/dev/null | grep -E "(mysql|postgresql|redis|nginx|apache|docker)" >> "$OUTPUT_DIR/app_directories.txt" || true
echo "=== /opt Applications ===" >> "$OUTPUT_DIR/app_directories.txt"
ls -la /opt/ 2>/dev/null >> "$OUTPUT_DIR/app_directories.txt" || true
echo "=== /srv Data ===" >> "$OUTPUT_DIR/app_directories.txt"
ls -la /srv/ 2>/dev/null >> "$OUTPUT_DIR/app_directories.txt" || true
# Log directories (critical for troubleshooting)
echo "8. Log Locations"
echo "=== System Logs ===" > "$OUTPUT_DIR/log_locations.txt"
ls -la /var/log/ | head -20 >> "$OUTPUT_DIR/log_locations.txt"
echo "=== Application Logs ===" >> "$OUTPUT_DIR/log_locations.txt"
find /opt /var/log -maxdepth 3 -name "*.log" 2>/dev/null | head -20 >> "$OUTPUT_DIR/log_locations.txt" || true
# Home directory critical data
echo "9. User Data Locations"
ls -la /home/ > "$OUTPUT_DIR/user_directories.txt" 2>/dev/null || echo "No /home directory"
find /home -maxdepth 2 -type d -name ".*" 2>/dev/null | head -20 > "$OUTPUT_DIR/user_hidden_dirs.txt" || true
# System package data
echo "10. Package Manager Data"
if command -v dpkg >/dev/null 2>&1; then
dpkg -l | wc -l > "$OUTPUT_DIR/package_count.txt"
echo "dpkg packages: $(cat "$OUTPUT_DIR/package_count.txt")" >> "$OUTPUT_DIR/package_summary.txt"
fi
if command -v rpm >/dev/null 2>&1; then
rpm -qa | wc -l > "$OUTPUT_DIR/rpm_package_count.txt"
echo "rpm packages: $(cat "$OUTPUT_DIR/rpm_package_count.txt")" >> "$OUTPUT_DIR/package_summary.txt"
fi
# Backup locations
echo "11. Backup Locations"
echo "=== Common Backup Directories ===" > "$OUTPUT_DIR/backup_locations.txt"
find /backup /backups /mnt -maxdepth 2 -type d 2>/dev/null >> "$OUTPUT_DIR/backup_locations.txt" || echo "No backup directories found"
echo "Data discovery completed at $(date)"
echo "Results in: $OUTPUT_DIR"
ls -la "$OUTPUT_DIR"