Gestion d'Entreprise des Sauvegardes Time Machine sur macOS
Gérez et automatisez les sauvegardes Time Machine de votre MacFleet avec des politiques de sauvegarde de niveau entreprise et des capacités de récupération d'urgence. Ce tutoriel couvre la gestion avancée des sauvegardes, le déploiement à l'échelle de la flotte, la surveillance de conformité et les systèmes de récupération automatisés.
Comprendre la Gestion Time Machine d'Entreprise
La gestion des sauvegardes d'entreprise nécessite :
- 🔄 Politiques de sauvegarde automatisées - Planifications de sauvegarde cohérentes sur tous les appareils
- 🛡️ Planification de récupération d'urgence - Récupération rapide des incidents de perte de données
- 📊 Surveillance de conformité - Pistes d'audit et conformité réglementaire
- ⚡ Gestion de flotte - Contrôle et rapports de sauvegarde centralisés
- 🔐 Sécurité et chiffrement - Données de sauvegarde protégées avec contrôles d'accès
Opérations de Base Time Machine
Définir la Destination de Sauvegarde
#!/bin/bash
# Définir la destination de sauvegarde Time Machine
BACKUP_DESTINATION="/Volumes/BackupDrive"
if [[ -d "$BACKUP_DESTINATION" ]]; then
sudo tmutil setdestination "$BACKUP_DESTINATION"
echo "✅ Destination de sauvegarde définie vers : $BACKUP_DESTINATION"
else
echo "❌ Destination de sauvegarde non trouvée : $BACKUP_DESTINATION"
exit 1
fi
Activer et Démarrer la Sauvegarde
#!/bin/bash
# Activer Time Machine et démarrer la sauvegarde
sudo tmutil enable
sudo tmutil startbackup
echo "✅ Time Machine activé et sauvegarde démarrée"
Vérifier le Statut de Sauvegarde
#!/bin/bash
# Vérifier le statut actuel de la sauvegarde
tmutil status
echo "📊 Statut actuel de sauvegarde affiché"
Lister les Sauvegardes Disponibles
#!/bin/bash
# Lister toutes les sauvegardes disponibles
tmutil listbackups
echo "📋 Sauvegardes disponibles listées"
Gestion Avancée des Sauvegardes
Configuration Intelligente de Destination de Sauvegarde
#!/bin/bash
# Destination de sauvegarde intelligente avec validation
setup_backup_destination() {
local destination="$1"
local min_space_gb="${2:-100}" # Minimum 100GB par défaut
echo "🔍 Validation de la destination de sauvegarde : $destination"
# Vérifier si la destination existe
if [[ ! -d "$destination" ]]; then
echo "❌ Le répertoire de destination n'existe pas : $destination"
return 1
fi
# Vérifier l'espace disponible
local available_space=$(df -BG "$destination" | tail -1 | awk '{print $4}' | sed 's/G//')
if [[ $available_space -lt $min_space_gb ]]; then
echo "❌ Espace insuffisant : ${available_space}GB disponible, ${min_space_gb}GB requis"
return 1
fi
# Vérifier les permissions d'écriture
if [[ ! -w "$destination" ]]; then
echo "❌ Pas de permission d'écriture vers la destination : $destination"
return 1
fi
# Définir la destination
sudo tmutil setdestination "$destination"
if [[ $? -eq 0 ]]; then
echo "✅ Destination de sauvegarde définie avec succès : $destination"
echo "📊 Espace disponible : ${available_space}GB"
return 0
else
echo "❌ Échec de la définition de la destination de sauvegarde"
return 1
fi
}
# Exemple d'utilisation
setup_backup_destination "/Volumes/Enterprise_Backup" 500
Gestion Avancée des Exclusions
#!/bin/bash
# Gestion des exclusions de sauvegarde d'entreprise
manage_backup_exclusions() {
local action="$1" # add, remove, list
local path="$2"
case "$action" in
"add")
if [[ -n "$path" ]]; then
sudo tmutil addexclusion "$path"
echo "✅ Exclusion ajoutée : $path"
log_exclusion_change "added" "$path"
else
echo "❌ Chemin requis pour l'opération d'ajout"
return 1
fi
;;
"remove")
if [[ -n "$path" ]]; then
sudo tmutil removeexclusion "$path"
echo "✅ Exclusion supprimée : $path"
log_exclusion_change "removed" "$path"
else
echo "❌ Chemin requis pour l'opération de suppression"
return 1
fi
;;
"list")
echo "📋 Exclusions actuelles :"
tmutil listbackups | while read -r backup; do
if [[ -d "$backup" ]]; then
echo "Vérification des exclusions pour : $backup"
# Lister les exclusions nécessiterait l'analyse des métadonnées de sauvegarde
fi
done
;;
"enterprise_defaults")
apply_enterprise_exclusions
;;
*)
echo "❌ Action invalide : $action"
echo "Actions disponibles : add, remove, list, enterprise_defaults"
return 1
;;
esac
}
# Appliquer les exclusions d'entreprise standard
apply_enterprise_exclusions() {
echo "🏢 Application des exclusions de sauvegarde d'entreprise..."
local exclusions=(
"/System/Library/Caches"
"/Library/Caches"
"~/Library/Caches"
"/private/var/vm"
"/cores"
"/tmp"
"/private/tmp"
"~/.Trash"
"/Applications/Xcode.app/Contents/Developer/Platforms" # Gros fichiers de dev
"/usr/local/var/log" # Fichiers de log
"~/Downloads" # Téléchargements temporaires
)
for exclusion in "${exclusions[@]}"; do
sudo tmutil addexclusion "$exclusion" 2>/dev/null
echo "Exclusion ajoutée : $exclusion"
done
echo "✅ Exclusions d'entreprise appliquées"
}
# Journaliser les changements d'exclusion pour audit
log_exclusion_change() {
local action="$1"
local path="$2"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
local log_entry="[$timestamp] Exclusion $action : $path"
echo "$log_entry" >> "/var/log/macfleet_backup_exclusions.log"
}
Surveillance de la Santé des Sauvegardes
#!/bin/bash
# Évaluation complète de la santé des sauvegardes
assess_backup_health() {
echo "🏥 Évaluation de la santé des sauvegardes Time Machine..."
local health_score=100
local issues=()
local warnings=()
# Vérifier si Time Machine est activé
local tm_enabled=$(tmutil status | grep "Running" | wc -l)
if [[ $tm_enabled -eq 0 ]]; then
health_score=$((health_score - 30))
issues+=("Time Machine n'est pas en cours d'exécution")
fi
# Vérifier l'accessibilité des destinations de sauvegarde
local destinations=$(tmutil destinationinfo | grep "URL" | wc -l)
if [[ $destinations -eq 0 ]]; then
health_score=$((health_score - 25))
issues+=("Aucune destination de sauvegarde configurée")
else
# Vérifier si les destinations sont accessibles
tmutil destinationinfo | grep "URL" | while read -r line; do
local dest_path=$(echo "$line" | sed 's/.*URL : //')
if [[ ! -d "$dest_path" ]]; then
health_score=$((health_score - 15))
issues+=("Destination de sauvegarde inaccessible : $dest_path")
fi
done
fi
# Vérifier l'heure de la dernière sauvegarde
local last_backup=$(tmutil latestbackup 2>/dev/null)
if [[ -n "$last_backup" ]]; then
local last_backup_timestamp=$(stat -f %m "$last_backup" 2>/dev/null)
local current_timestamp=$(date +%s)
local hours_since_backup=$(( (current_timestamp - last_backup_timestamp) / 3600 ))
if [[ $hours_since_backup -gt 48 ]]; then
health_score=$((health_score - 20))
issues+=("Dernière sauvegarde il y a $hours_since_backup heures")
elif [[ $hours_since_backup -gt 24 ]]; then
health_score=$((health_score - 10))
warnings+=("Dernière sauvegarde il y a $hours_since_backup heures")
fi
else
health_score=$((health_score - 25))
issues+=("Aucune sauvegarde précédente trouvée")
fi
# Vérifier l'espace disque disponible sur la destination de sauvegarde
local backup_dest=$(tmutil destinationinfo | grep "URL" | head -1 | sed 's/.*URL : //')
if [[ -n "$backup_dest" ]] && [[ -d "$backup_dest" ]]; then
local available_space=$(df -BG "$backup_dest" | tail -1 | awk '{print $4}' | sed 's/G//')
if [[ $available_space -lt 10 ]]; then
health_score=$((health_score - 15))
issues+=("Espace disque faible sur la destination de sauvegarde : ${available_space}GB")
elif [[ $available_space -lt 50 ]]; then
warnings+=("L'espace de destination de sauvegarde devient faible : ${available_space}GB")
fi
fi
# Générer le rapport de santé
echo "📊 Score de Santé de Sauvegarde : $health_score/100"
if [[ ${#issues[@]} -gt 0 ]]; then
echo "🔴 Problèmes Critiques :"
printf ' - %s\n' "${issues[@]}"
fi
if [[ ${#warnings[@]} -gt 0 ]]; then
echo "⚠️ Avertissements :"
printf ' - %s\n' "${warnings[@]}"
fi
if [[ $health_score -ge 90 ]]; then
echo "✅ Le système de sauvegarde est en bonne santé"
elif [[ $health_score -ge 70 ]]; then
echo "⚠️ Le système de sauvegarde a des problèmes mineurs"
else
echo "🔴 Le système de sauvegarde nécessite une attention immédiate"
fi
return $health_score
}
Politiques de Sauvegarde d'Entreprise
Politique d'Environnement de Production
#!/bin/bash
# Politique de sauvegarde de production haute fréquence
apply_production_backup_policy() {
echo "🏭 Application de la politique de sauvegarde de production..."
# Activer Time Machine
sudo tmutil enable
# Définir un planning de sauvegarde agressif (toutes les 30 minutes)
configure_backup_intervals 1800 900 600 60
# Appliquer des exclusions minimales (conserver la plupart des données)
local minimal_exclusions=(
"/System/Library/Caches"
"/private/var/vm"
"/cores"
)
for exclusion in "${minimal_exclusions[@]}"; do
sudo tmutil addexclusion "$exclusion" 2>/dev/null
done
# Activer la vérification de sauvegarde
enable_backup_verification
echo "✅ Politique de sauvegarde de production appliquée"
log_policy_application "production"
}
Politique d'Environnement de Développement
#!/bin/bash
# Politique de sauvegarde optimisée pour le développement
apply_development_backup_policy() {
echo "💻 Application de la politique de sauvegarde de développement..."
# Activer Time Machine
sudo tmutil enable
# Définir un planning de sauvegarde modéré (toutes les 2 heures)
configure_backup_intervals 7200 3600 1800 300
# Exclure les artefacts de développement
local dev_exclusions=(
"/System/Library/Caches"
"/Library/Caches"
"~/Library/Caches"
"/private/var/vm"
"/cores"
"~/Library/Developer/Xcode/DerivedData"
"~/Library/Developer/CoreSimulator"
"*/node_modules"
"*/.git/objects"
"*/target"
"*/build"
"*/.gradle"
"*/.npm"
)
for exclusion in "${dev_exclusions[@]}"; do
sudo tmutil addexclusion "$exclusion" 2>/dev/null
done
echo "✅ Politique de sauvegarde de développement appliquée"
log_policy_application "development"
}
Politique Exécutive/Minimale
#!/bin/bash
# Politique de sauvegarde légère pour les cadres
apply_executive_backup_policy() {
echo "🏢 Application de la politique de sauvegarde exécutive..."
# Activer Time Machine
sudo tmutil enable
# Définir un planning de sauvegarde standard (toutes les 4 heures)
configure_backup_intervals 14400 7200 3600 600
# Exclure les fichiers non essentiels
local executive_exclusions=(
"/System/Library/Caches"
"/Library/Caches"
"~/Library/Caches"
"/private/var/vm"
"/cores"
"~/Downloads"
"~/Movies"
"/Applications/Games"
"~/Library/Application Support/Steam"
)
for exclusion in "${executive_exclusions[@]}"; do
sudo tmutil addexclusion "$exclusion" 2>/dev/null
done
echo "✅ Politique de sauvegarde exécutive appliquée"
log_policy_application "executive"
}