113 lines
5.1 KiB
Bash
Executable File
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" |